Aboutus,Iran Developers Network

Ganjafzar

صفحه اصلي | دروس | Download | ارتباط با ما | نقشه سايت

Iran Developers
صفحه اول
معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۲۷۲ مراجعه امروز
۳۸۶۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ايران دولوپر
ايران دولوپر يک سايت تخصصي در زمينه برنامه نويسي تحت وب و دسکتاپ مي باشد سايت ما يک سايت آموزشي و کاملا رايگان مي باشد و استفاده از آن براي همگان آزاد مي باشدايران دولوپر با هدف ايجاد بستري براي آموزش علوم تخصصي کامپيوتر افتخار دارد که با عنايت و همکاري اعضاي انجمن و پرسنل خود مجموعه اي ارزشمند از مقالات آموزشي تخصصي خود رابه شما مراجعه کننده گرامي عرضه کند اين مجموعه شامل مقالات مختلف آموزشي در زمينه هاي وب و برنامه نويسي دسکتاپ مي باشد اميدواريم که توانسته باشيم در اين مهم قدمي مثبت برداشته باشيم. اميدواريم که شما ما را تنها نگذاريد و جهت پر بار تر کردن سايت ما را ياري کنيد از آنجاييکه در ابتداي راه قرار داريم خواهشمنديم که کمي کاستي ها و همچنين نظرات وپيشنهادات خود را با ما در ميان بگذاريد والسلام
©2005 IranDevelopers. All rights reserved. E-mail this Page


Books ,Iran Developers Network

صفحه اول
معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۵۲۴ مراجعه امروز
۴۱۱۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

کاربر گرامي بعد از ثبت کتاب يا نشريه به طور خودکار به صفحه قبلي هدايت مي شويد پس از بررسي مديران سايت کتاب يا نشريه شما به ليست اضافه مي گردد.

اضافه کردن کتاب , نشريه
نام کتاب يا نشريه
آدرس سايت
آدرس تصوير
توضيحات


مقدمات زبان C ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۵۳۹ مراجعه امروز
۴۱۳۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمات زبان C
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۷۸۲۶ بار مطالعه شده است
۱۹۱ نفر تا به حال به اين مقاله رای داده اند.

مقدمات زبان C

زبان C در سال 1970 توسط دنيس ريچي طراحي گرديد. اين زبان تكامل يافته زبان BCPL
ميباشد كه طراح آن مارتين ريچاردز است ،و زبان BCPL از زبان B كه طراح آن
كن تامپسون مي باشد ، نتيجه شده است .
زبان C معمولا" يك زبان مياني ناميده مي شود . اين بدان معني نيست كه آموزش
اين زبان مشكل است ، يا قدرت آن از زبان هاي برنامه سازي مثل پاسكال و بيسيك
كمتر است و يا اين كه مشكلاتي مشابه زبان اسمبلي براي برنامه نويس ايجاد مي كند.
علت مياني بودن زبان C اين است كه عناصر زبان هاي سطح بالا را با خصيصه تابعي
زبان اسمبلي درهم آميخته است .براي پي بردن به جايگاه زبان C درمقايسه با ساير
زبان هاي برنامه سازي به جدول (1) مراجعه نماييد .
جدول (1) . سطوح زبان هاي برنامه سازي

زبان C همانند ساير زبانهاي مياني با مفاهيم بيت ، بايت و آدرس كه از عناصر
ابتدايي ماشين هستند سر و كار دارد . يعني در اين زبان مي توان محتويات بيت ها
و بايت ها را تيز تغيير داد .
برنامه هاي نوشته شده به زبان C براحتي از ماشيني به ماشين ديگر قابل انتقال
مي باشند . مثلا" برنامه نوشته شده براي كامپيوتر APPL در كامپيوترهاي IBM قابل
اجرا است . اين خصيصه را قابل حمل بودن (Portability) زبان مي گويند .
كليه زبان هاي برنامه سازي سطح بالا و مياني داراي نوعهاي داده (data types)
هستند . هر نوع داده ، مجموعه اي از مقادير را مشخص مي كند كه اعمال خاصي روي
آنها قابل انجام است . نوع داده اي كه در اكثر زبانها وجود دارد عبارتند از :
اعداد صحيح ، كاراكتري و اعداد اعشاري . C داراي 5 نوع داده اصلي است كه در آن
تقريبا" تبديل هر نوع داده به نوع ديگر امكان پذير است . مثلا" در يك عبارت
مي توان نوع كاراكتري را با نوع عددي صحيح و يا اعشاري تركيب كرد .
زبان C خطاي زمان اجرا مثل boundray checking را چك نمي كند . منظور از boundray checking
اين است كه در آرايه ها تجاوز از حدود مشخص شده ، به راحتي
امكان پذير بوده و از نظر كامپايلر با خطايي مواجه نميشود. اين مساله برميگردد
به اين كه در زبان C آرايه يك اشاره گر (pointer) است . در اين راستا ، نوع
پارامترها و آرگومان هاي توابع نيز در گونه هاي قديمي C با يكديگر مطابقت نشده و
از نظر كامپايلر با خطا مواجه نمي شد ولي در گونه هاي جديد C با معرفي الگوي
تابع (Function prototype) اين مشكل رفع شده است . C
همانند زبان هاي ALGOL، PASCAL، و... يك زبان ساخت يافته است . يك زبان
برنامه سازي ساخت يافته امكانات زيادي ، از جمله استفاده از چند ساختار حلقه سازي
مثل while، do-while،و forو را فراهم مي كند . در اين گونه زبان ها از goto به
ندرت استفاده مي شود و نوشتن دستورات برنامه در هر ستوني از خط و در هر جاي
فايل امكان پذير بوده ، مثل زبان فرترن مقيد به ستون هاي خاصي نيستند. استفاده
از زيربرنامه ها و بلاك ها نيز از خصيصه هاي اين نوع زبان ها هستند . ذكر اسامي
چند زبان ساخت يافته و غير ساخت يافته ، در انتخاب زبان برنامه سازي جهت برنامه
نويسي مفيد است . ( جدول (2) ) .
جدول (2) . بعضي از زبانهاي ساخت يافته و غيرساخت يافته

هر برنامه در زبان C داراي خصيصه هايي است كه بعضي از آنها عبارتند از : 1
در زبان C هر دستور برنامه به يك ; ختم مي شود . 2
هر دستور ميتواند درچند خط ادامه داشته و يك خط ممكن است شامل چند دستور
باشد . 3
حداكثر طول يك خط برنامه 254 كاراكتر است . 4
در زبان C برنامه نويس مي تواند در هر نقطه از برنامه ، بااستفاده از علائم {
و }و يك بلاك را مشخص كرده و هر متغيري را كه مي خواهد در آنجا تعريف نمايد .
اين متغيرها فقط در آن بلاك معني خواهند داشت . توجه داريم كه هر بلاك مجموعه اي
از دستورات وابسته به يكديگر خواهد بود :
ؤؤ { |

بلاك | ; مجموعه دستورات } |

ؤؤ 5
براي داشتن توضيحات در برنامه كافي است آنها را دربين /*و *و/ قرار داد: *

توضيحات /* C
يك زبان ساخت يافته بلاكي نيست . اين بدان معني است كه تعريف يك زيربرنامه
( در اينجا تابع ) در زيربرنامه ديگر ( همانند پاسكال ) امكان پذير نيست و اين
امر از مساله coupling مي كاهد . C
زبان برنامه نويسي سيستم است . منظور از برنامه هاي سيستم عبارتند از : 1
سيستم عامل (Operating system) 2
مفسر (Interpreter) 3
ويراستار (Editor) 4
اسمبلر (Assrmbler) 5
كامپايلر (Compiler) 6
مديريت بانكهاي اطلاعاتي (Database management)
امروزه C در اكثر امور برنامه نويسي مورد استفاده قرار مي گيرد . زيرا اين
زبان هم داراي خصيصه " قابل حمل بودن " است و هم داراي كارآيي خوبي مي باشد و
سرعت زياد C بر محبوبيت آن افزوده است . مساله قابل حمل بودن ، يك مساله بسيار
مهم است زيرا هم موجب صرفه جويي در وقت شده و هم باعث صرفه جويي در هزينه ها
مي گردد .
زبان C فقط داراي 32 كلمه كليدي است ( جدول (3) ) كه 27 كلمه كليدي آن توسط
ريچي ( طراح زبان ) معرفي شده و 5 كلمه كليدي ديگر توسط موسسه استاندارد سازي
زبان به آن اضافه شده است . اين تعداد در مقايسه با 159 كلمه كليدي كه در زبان
بيسيك وجود دارد قابل توجه است .

| auto | double | int | struct |
| break | else | long | switch |
| case | enum* | register | typedef |
| char | extern | return | union |
| const* | float | short | unsigned |
| continue | for | signed* | void* |
| default | goto | sizeof | volatile* |
| do | if | static | while |

اضافه شدن توسط موسسه استاندارد سازي زبان
جدول (3) . كلمات كليدي زبان C

بعضي از كامپايلرها علاوه بر 32 كلمه كليدي جدول (3) كلمات كليدي ديگري به
زبان اضافه نموده اند . ( جدول (4) ) .
| asm | ess |- ds |- es |
|- ss | cdecl | far | huge |
| intrrupt | near | pascal | |

جدول (4) . كلمات كليدي زبان C كه بعضي از كامپايلرها اضافه كرده اند

كليه كلمات كليدي در زبان C به حروف كوچك نوشته مي شوند . چون در اين زبان
بين حروف كوچك و بزرگ تفاوت است ، به عنوان مثال كلمه else يك كلمه كليدي است

کيفيت مقاله :
عالی خوب متوسط ضعيف


انواع داده ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۵۸۷ مراجعه امروز
۴۱۷۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انواع داده
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۳۹۲۰ بار مطالعه شده است
۴۴ نفر تا به حال به اين مقاله رای داده اند.

انواع داده

همان طور كه قبلا" گفته شد در هر زبان برنامه سازي تعدادي از نوع هاي داده
وجود دارند كه بازه اي را شامل بوده و اعمال خاصي روي آنها انجام پذير است و در C
پنج نوع داده اصلي وجود دارد كه عبارتند از : char، int،، float،، double، و void
. در اين زبان اندازه و محدوده اي كه هر نوع داده اختيار مي كند بستگي به
نوع پردازشگر (Processor) و نحوه پياده سازي كامپايلر دارد. شناسه هايي ( متغير
برچسب ، اسامي توابع و ... ) كه از نوع char باشند براي ذخيره كردن مقاديري كه
توسط كاراكترهاي اسكي تعريف شده اند به كار مي روند. شناسه هايي از نوع int براي
ذخيره كردن مقادير صحيح ، و از نوع floatو doubleو براي ذخيره كردن اطلاعات عددي
اعشاري به كار ميروند كه محدوده آنها توسط تعداد ارقام و دقت آنها مشخص ميشود.
نوع void در مورد توباع به كار مي رود .
نوعهاي داده اصلي ( به جز void ) مي توانند با عباراتي مثل signed، long، unsigned
و shortو تركيب شده و نوع هاي ديگري را به وجود آورند . ( جدول (1) ).
نوع | اندازه تقريبي به بيت | بازه قابل قبول |
char
|
| 8 | 127- تا | 127 unsigned char
|
| 8 | 0 تا | 255 signed char
|
| 8 | 127- تا | 127 int
|
| 16 | 32767- تا | 32767 unsigned int
|
| 16 | 0 تا | 65525 signed int
|
| 16 | 32767- تا | 32767 short int
|
| 16 | 32767- تا | 32767 unsigned
|
| 16 | 0 تا | 65525 | | | short int |
signed
|
| 16 | 32767- تا | 32767 | | | short int |
long int
|
| 32 | َ2147483647- تا | 2147483647 |
float | 32 | 6 رقم دقت | |
double | 64 | 10 رقم دقت | |
long double | 128 | 10 رقم دقت | |
signed | 32 | َ2147483647- تا | 2147483647 | | | long int |
|
| uunsigned long int 32 | 0 تا | 4294967295
ول (1) . نوعهاي تركيبي

کيفيت مقاله :
عالی خوب متوسط ضعيف


متغير ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۲۳ مراجعه امروز
۴۲۱۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
متغير
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۳۲۹۷ بار مطالعه شده است
۲۶ نفر تا به حال به اين مقاله رای داده اند.

متغير

متغير، نامي براي يك محل حافظه است كه محتويات آن در طول اجراي برنامه ممكن
است تغيير كند . اسم هر متغير شامل حروف aتا zا، A،تا Zا ، ارقام 0تا 9ا و خط
ربط است . به طوري كه با يكي از حروف و يا خط ربط شروع شده باشند . طول نام هر
متغير بستگي به نوع كامپايلر دارد كه معمولا"از 1ز تا 31 كاراكتر قابل استفاده
است . بعضي از اسامي مجاز و غير مجاز در زير آمده اند :
اسامي مجاز براي متغيرها | اسامي غيرمجاز براي متغيرها |
| 1count | count |
| high! there | test123 |
| grad.1 | high |

تعريف نوع متغير
براي استفاده از متغيرها درC بايد ابتدا آنها را تعريف كنيم . تعريف متغيرها
شامل نامگذاري و تعيين نوع آنها است كه به صورت زير انجام مي شود :
<نوع> <اسامي متغيرها>
يكي از انواع است كه قبلا<نوع>" شامل متغيرهايي <اسامي متغيرها> ذكر كرديم و
است كه مي خواهيم داراي آن نوع باشند . براي تعريف چند متغير در يك دستور بايد
اسامي با كاما از يكديگر جدا گردد : int var1/ var2;

دستور فوق دو متغير به اسامي var2و var1و را از نوع int تعريف مي كند . float flovar1/ flovar2;

دستور فوق ، دو متغير به نام هاي flovar2و flovar1و را از نوع float تعريف
مي كند . double d1;
char ch;

اولين دستور ، d1 را از نوع double و دستور دوم متغير ch را از نوع char
تعريف مي كند .

مقدار دادن به متغيرها
براي مقدار دادن به متغيرها مي توان به دو طريق عمل كرد: 1 به هنگام تعريف
متغير . 2 پس از تعريف متغير . به عنوان مثال : int a=0;
int b/ c/ d/ e=0;
char ch= 'a';
b=0;
c=d=0;

دستور اول ضمن تعريف a از نوع int مقدار آن را برابر با 0 قرار مي دهد .
دستور دوم چهار متغيرb، c،، d،و eو را از نوع int تعريف كرده وفقط مقدار متغير ch
را از نوع كاراكتري تعريف كرده و مقدار آن را برابر با حرف a قرار مي دهد .
دستور چهارم مقدار متغير b را برابر با 0 قرار مي دهد . دستور پنجم مقدار دو
متغير cو dو را برابر صفر قرار مي دهد و اين دستور ، انتساب چندتايي را مشخص
مي كند .
همان طور كه قبلا"گفته شد مقدار متغيرها ممكن است در طول اجراي برنامه تغيير
كند . با استفاده از كلمه كليدي const مي توانيم متغيرهايي را تعريف كنيم كه
مقدار آنها در طول اجراي برنامه ثابت باشد . براي تعريف اين نوع متغيرها بصورت
زير عمل مي شود :
<نوع> <اسامي متغيرها>const
نوع ، يكي از نوع هايي است كه قبلا" ذكر شده و اسامي متغيرها ، مشخص كننده
متغيرهايي است كه بايد به صورت ثابت تعريف شوند : const int a = 10 / b = 20;

دستور فوق دو متغير aو bو را از نوع int تعريف كرده و مقادير آنها را برابر مي دهد . اين مقادير در طول اجراي برنامه قابل تغيير هستند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


عملگرها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۶۷۴ مراجعه امروز
۴۲۶۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
عملگرها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۳۰۸۷ بار مطالعه شده است
۲۰ نفر تا به حال به اين مقاله رای داده اند.

عملگرها

عملگرها نمادهايي هستند كه براي انجام اعمال خاصي مورداستفاده قرارميگيرند.
عملگرها در زبان C از تنوع زيادي برخوردارند . در C چهار دسته عملگر به نامهاي
( محاسباتي ، رابطه اي ، منطقي و دستكاري بيت ها ) وجود دارند كه آنها را بررسي
مي كنيم .

عملگرهاي محاسباتي
عملگرهاي محاسباتي كه در C مورد استفاده قرار مي گيرند در جدول (1) فهرست
شده اند .
رديف | عملگر | نام | مثال |
1 | - | تفريق و منهاي يكاني | |-xx/x-y
2 | + | جمع | | x+y
3 | * | ضرب | | x*y
4 | / | تقسيم | | x/y
5 | % | باقيمانده تقسيم | | x%y
6 | - - | كاهش يك واحد * | - -xيا xا - |-
7 | ++ + | افزايش يك واحد * | x+ + يا | + +xا
* decrement ** increment

جدول (1) . عملگرهاي محاسباتي

عملگرهاي رديف 1تا 4ا در جدول (1) تقريبا" در همه زبانهاي برنامه سازي وجود
دارند. عملگر % كه در بقيه زبانها با علامت ديگري ( مثلا" در بيسيك به صورت MOD)
وجود دارد باقيمانده تقسيم دو عدد را محاسبه مي كند : x= 13;
y= 5;
z= x%y;

اگر سه دستور فوق را توسط ماشين اجرا كنيم مقدار3 كه باقيمانده تقسيم 13 بر 5
است در z قرار مي گيرد .
عملگر كاهش ، يك واحد از عملوند مربوط كم مي كند . x= 10;
- - x;

دستور x - - از x يك واحد كم مي كند و نتيجه را در x قرار مي دهد كه معادل
دستور 1 + َx = x-1 است .
عملگر افزايش ، يك واحد به عملوند مربوطه اضافه مي كند : x= 40;
++x;

دستور ++x معادل دستور x = + 1 است كه موجب افزودن يك واحد به x مي شود .
عملگرهاي افزايش و كاهش يك واحد را مي توان بعداز عملوند مربوطه نيز به كار
برد مثل : x + + و - - x .
اگر در يك عبارت از عملگرهاي افزايش و كاهش يك واحد ، استفاده كنيم به كار
بردن اين عملگرها در قبل و بعد از عملوند مربوطه ، با يكديگر متفاوت است . بدين
معني كه اگر اين عملگرها قبل از عملوند باشند مقدار فعلي عملوند مورد استفاده
قرار گرفته و سپس عملگرها بر روي آن عمل ميكنند، ولي اگر بعد از عملوند مربوطه
باشند پس از انجام عمل افزايش و كاهش يك واحد به آنها مقادير جديد ، در عبارت
مورد استفاده قرار مي گيرند. استفاده ازعملگرهاي افزايش و كاهش يك واحد ، سرعت
محاسباتي را بالا مي برد .
اگر در يك عبارت از چند عملگر محاسباتي استفاده شود ، مساله تقدم عملگرها
مطرح مي شود . ( جدول (2) ) .
بالاترين تقدم - - | + + |
تفريق يكاني - | | * / % |
|
پايين ترين تقدم - | +
جدول (2) . تقدم عملگرهاي محاسباتي

همان طور كه در جدول (2) مشاهده مي شود ، عملگرهاي افزايش و كاهش يك واحد
داراي بالاترين تقدم و عملگرهاي جمع و تفريق داراي كمترين تقدم هستند و منهاي
يكاني ، داراي دومين تقدم است . عملگرهايي كه در يك سطر آمده اند ، مثل - و +
بدين معني است كه داراي تقدم مكاني نسبت به يكديگر هستند. در اين صورت هر كدام
از غملگرها كه اول ظاهر شود ، زودتر انجام خواهد شد .

عملگرهاي رابطه اي
عملگرهاي رابطه اي براي تشخيص ارتباط بين عملوندها يا مقايسه آنها مورد
استفاده قرار مي گيرند ( جدول (3) ) .
عملگر | نام | مثال |
> | بزرگتر | y >x | >
= >|> بزرگتر مساوي | =y >x | >
< | كوچكتر | y
= <|< كوچكتر مساوي | =y
== | = مساوي بودن | | x=x==y
!= | ! نامساوي | | x=x!=y
جدول (3) . عملگرهاي رابطه اي

نكته قابل ذك درمورد عملگرهاي رابطه اي اين است كه عملگر== براي تشخيص مساوي
بودن دو عبارت مورد استفاده قرار مي گيرد. اين عملگر با عملگر= كه براي انتساب
يك عبارت به يك متغير استفاده مي شود متفاوت است .

عملگرهاي منطقي
عملگرهاي منطقي ( جدول (4) ) بر روي عملوندهاي منطقي عمل ميكنند. عملوندهاي
منطقي داراي دو ارزش درستي و نادرستي هستند .
عملگر | نام | مثال |
&& | & و(AND) z || x
|| | | يا (OR) z || x
! | نقيض (NOT) | !x |
جدول (4) . عملگرهاي منطقي

ارزش نادرستي درزبان C با مقدار صفر و ارزش درستي با مقادير غيراز صفر مشخص
ميشود. عملگر منطقي ! داراي بالاترين تقدم و عملگر || داراي كمترين تقدم در بين
عملگرهاي منطقي هستند . چون عملگرهاي منطقي رابطه نزديكي با عملگرهاي رابطه اي
دارند مي توان تقدم آنها را نسبت به يكديگر بيان كرد ( جدول (5) ) .
بالاترين تقدم | ! | > >= < <= |
| == != |
| && |
|
پايين ترين تقدم | ||
جدول (5) . تقدم عملگرهاي منطقي و رابطه اي

عملگرهاي محاسباتي و رابطه اي با يكديگر تركيب شده و عملگرهاي ديگري را بنام
عملگرهاي محاسباتي رابطه اي ايجاد مي كنند ( جدول (6) ) . تقدم اين عملگرها از
ساير عملگرها پايين تر است .
عملگر | نام | مثال |
+= | + انتساب جمع | x+=y |
= | انتساب تفريق | x-=y |
*= | * انتساب ضرب | x*=y |
/= | / انتساب تقسيم | x/=y |
%= | % انتساب باقيمانده تقسيم | x%=y |
جدول (6) . عملگرهاي محاسباتي و رابطه اي

در جدول (6) ، عبارت x + = y معادل با x = x + y است و عبارت x % = y معادل y
x = x % است كه موجب انتساب باقيمانده تقسيم xبر yربه x مي شود : int a=10;
int b=20;
a+= b;

با اجراي دستورات فوق متغير a برابر30 خواهد بود. زيرا دستور a + = b معادل
دستور a = a + b است .

عملگر دستكاري بيت ها
ازآنجايي كه زبان C طوري طراحي شده است كه بتواند دربسياري ازموارد جايگزين
زبان اسمبلي گردد. بايد قادر باشد كليه اعمال ( يا حداقل بسياري از اعمال ) كه
در زبان اسمبلي قابل انجام هستند را انجام دهد . يكي از اعمالي كه در زبان
اسمبلي براحتي انجام پذير است . انجام اعمالي بر روي بيت هاي يك بايت يا يك
كلمه از حافظه است كه در زبان C براي انجام اين منظور از عملگرهايي استفاده
مي شود كه به عملگرهاي بيتي معروفند ( جدول (7) ) . اين عملگرها انجام اعمال
تست ، مقدار دادن و يا انتقال (shift) بيت ها را در يك بايت يا كلمه حافظه
امكان پذير مي نمايند. عملگرهاي بيتي فقط بر روي متغيرهايي از نوع charيا intا
عمل مي كنند و بر روي متغيرهايي از نوع float، double،، long double،، void، و
يا ساير متغيرها قابل اجرا نيستند . عملگرهاي بيتي &، |،و ~و(AND(، OR،و NOTو)
مشابه عملگرهاي منطقي AND، OR،و NOTو عمل مي كنند با اين تفاوت كه عمل آنها بر
روي يك بيت است . با فرض اين كه pو qو دو بيت مختلف باشند ، نحوه عمل عملگر ^
را در ذيل مشاهده مي نماييد .
p | q | p^q |

0 | 0 | 0 |

1 | 0 | 1 |

1 | 1 | 0 |

عملگرهاي بيتي در جدول (7) مشاهده مي شوند .
عملگر | نوع عمل |
& | AND ( و ) |
| | OR ( يا ) |
^ | XOR ( يا انحصاري ) |
~ | NOT ( نقيض يا متمم يك ) |
>> | انتقال به سمت راست (shift right) |
<< | انتقال به سمت چپ (shift left) |
جدول (7) . عملگرهاي بيتي

همان طور كه مشاهده شد ، نتيجه عملگر بيتي ^ وقتي يك (1) است كه يكي از
عملوندهاي آن صفر و ديگري يك باشد . به عبارت ديگر ، نتيجه عملگر بيتي ^ وقتي
صفر است كه هر دو عملوند آن صفر و يا هر دو يك باشند .
عملگرهاي &، |،و ^و و << ، >> بر روي دو عملوند عمل مي كنند اما عملگرهاي ~
به صورت ذيل به كار مي روند: >> و <<بر روي يك عملوند عمل مي كنند . عملگرهاي
متغير >>تعداد انتقال
متغير <<تعداد انتقال
و <<در روش كلي فوق ، متغير ، يك بايت يا كلمه اي از حافظه است كه عملگرهاي
بايد بر روي آن عمل كنند . تعداد انتقال عددي است كه مشخص مي كند بيت هاي >>"
متغير " بايد چند محل به سمت راست و يا چپ انتقال يابند . همان طور كه قبلا"
براي انتقال به چپ مورداستفاده << براي انتقال به راست و عملگر>>گفته شد عملگر
قرار مي گيرد . هر انتقال به چپ ، معادل با تقسيم كردن مقدار متغير به 2 و هر
انتقال به راست ، معادل ضرب كردن در 2 است .

مثال 1 :
تعداد عددي متغير | x مقدار بيتي متغير | x دستورات زبان | C
| char x; | | |

| x=7 ; | 00000111 | 7 |

| x<<1 ; | 00001110 | 14 |

| x<<3 ; | 01110000 | 112 |

| x<<2 ; | 11000000 | 192 |

| x>>1 ; | 01100000 | 96 |

| x>>2 ; | 00011000 | 24 |

همان طور كه مشاهده مي كنيد پس از اجراي دستور 2<< x< اطلاعات واقعي از بين
مي روند و مساله ضرب در 2 شدن ، در اينجا صدق نمي كند .
عملگر ~ در يك بايت يا كلمه حافظه ( يك متغير ) كليه بيت ها را نقيض ميكند.
يعني بيت صفر را به بيت يك و بيت يك را به بيت صفر تبديل مي نمايد . لذا اگر
اين عملگر دو بار بر روي يك متغير عمل كند وضعيت بيت هاي متغير به حالت اول
برمي گردند .

مثال 2 : x :00101100
~x :11010011
~x :00101100

همان طور كه مشاهده مي شود بيت هاي رديف اول و رديف آخر داراي يك وضعيت
ميباشند ( بيت هاي رديف آخر نتيجه دوبار اجراي عملگر نقيض بر روي متغير است ).
نكته اي كه در مورد عملگرهاي بيتي بايد در نظر داشت اين است كه اين عملگرها
معمولا" در مبدل هاي دستگاهها (device drivers) مورد استفاده قرار مي گيرند .
مثل برنامه هايي كه براي كار با modem و با چاپگر نوشته مي شوند . زيرا در اين
گونه موارد معمولا" تست كردن بيت هاي يك متغير مد نظر خواهد بود .

عملگر ?
عملگر ? با تست يك شرط ، مقداري را به يك متغير نسبت مي دهد . اين عملگر به
صورت زير استفاده مي شود : exp3
:= exp1 ? exp2 متغير exp1
، exp2،و exp3و سه عبارت هستند . نحوه عمل ? به اين صورت است كه : ابتدا
عبارت اول (exp1) ارزيابي مي شود چنانچه اين عبارت داراي ارزش true ( ارزش
درستي ) باشد مقدار exp2 پس از ارزيابي ، در متغير ذكر شده قرار مي گيرد وگرنه
عبارت سوم (exp3) ارزيابي شده و نتيجه آن به متغير ذكر شده منتقل مي شود . x= 10;
y= x>9 ? 100 :200;

نحوه عمل در دو دستور فوق به اين صورت است كه عبارت 9> x> ارزيابي مي شود .
چون اين عبارت يك ارزش منطقي true دارد ( 9> x> است ) لذا عدد 100 در متغير y
قرار مي گيرد .

عملگرهاي &و *و
عملگر & يك عملگر يكاني است كه آدرس عملوند خود را مشخص مي كند و به صورت
زير به كار مي رود : ;
نام عملوند &
مثل : int num;
p= #

با اجراي دستورات فوق آدرس متغير num در متغير p قرار مي گيرد. لذا عملگر &
به معني " آدرس " است . عملگر * همانند عملگر & يك عملگر يكاني است كه محتويات
يك آدرس حافظه را مشخص مي كند و به صورت زير به كار مي رود . ;
نام عملوند *
مثل : p= #
m= *p;

دستور اول ، آدرس متغير num را در p قرار ميدهد و دستور دوم ، محتويات محلي
را كه آدرس آن در p قرار دارد ( محتويات num ) ، را در m قرار ميدهد. بنابراين
مفهوم " * محتويات آدرس " مي باشد . دو دستور فوق معادل دستور m = num; است كه
موجب انتقال محتويات متغير num به متغير m مي شود .

عملگر كاما (/)
عملگر كاما براي انجام چند عمل در يك دستور ، به كار رفته و به صورت زير
استفاده مي شود :
( عبارت 2 و عبارت 1) =) متغير
عملگر كاما موجب مي شود تا " عبارت " 1 ارزيابي شده و سپس نتيجه ارزيابي "
عبارت " 2 با يكديگر ارتباط دارند . x =( y = 3 / y + 5);

ابتدا y باربر با 3 قرار مي گيرد و نتيجه عبارت y + 5 كه برابر 8 است در x
قرار خواهد گرفت .

عملگر sizeof
اين عملگر كه عملگر زمان ترجمه ناميده مي شود، براي محاسبه طول يك نوع و يا
يك متغير به كار رفته و به صورت زير استفاده مي شود . ;
(نوع) sizeof ;
متغير sizeof
اگر بخواهيم با استفاده از اين عملگرها، طول يك نوع مثل int، double و غيره
را محاسبه كنيم بايد آن را در داخل پرانتز قرار دهيم : اما اگر بخواهيم طول يك
متغير را محاسبه كنيم نيازي به استفاده از پرانتز نيست . به عنوان مثال : int a/ b/ c;
a= sizeof( int);
b= sizeof c;

دستور اول سه متغير a، b،ز cز را به صورت int تعريف مي كند . دستور دوم طول
نوع int را محاسبه كرده و در متغير a قرار مي دهد . دستور سوم طول متغير c را
محاسبه كرده و در متغير b قرار مي دهد. اين دستور براي مساله portability زبان C
بسيار مفيد است . بعنوان مثال ممكن است طول نوع int از ماشيني به ماشين ديگر
متفاوت باشد . نكته اي كه در مورد اين عملگر بايد توجه داشت اين است كه معمولا"
روش اول مورد استفاده قرار مي گيرد و روش دوم چندان جالب نيست .

تقدم عملگرها در حالت كلي
وقتي كه در يك عبارت چندين عملگر مورد استفاده قرار مي گيرند تقدم عملگر به
صورت جدول (8) خواهد بود .
بالاترين تقدم () | | ! ~ + + - - * & sizeof |
| * / % |
| + - |
| << >> |
| << = >> = |
| == =! |
| & |
| ^ |
| | |
| && |
| || |
| ? |
| = +=- = *= /= %= |
| / |

جدول (8) . تقدم عملگرها در حالت كلي

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

مثال 3 : int x=5/ y=10/ k=4;
int s;
s= x*((x+y-)3)/k;

درنتيجه اجراي چند دستور فوق مقداري كه درs قرار مي گيرد برابر با 15 خواهد
بود . سپس عدد 3 از 15 كم مي شود كه 12 حاصل مي گردد و بعداز آن عمل ضرب انجام برابر با 60 ( 5 * 12 ) مي باشد و عملگر تقسيم (/) آخرين

کيفيت مقاله :
عالی خوب متوسط ضعيف


تبديل انواع ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۷۱۶ مراجعه امروز
۴۳۰۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تبديل انواع
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۹۱۲ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.

تبديل انواع

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

مثال 1: char ch;
int i;
float f;
double d;
result =( ch/i )+( f*d( - )f+i)
| | | | | |
int |double | | float
| | | | | |
| | | | | |

ؤؤؤ ؤؤؤ ؤؤؤ | | |
int double float
| | |
| | |
|
ؤؤؤؤؤؤؤؤؤ | |
| |
double |
| |
| |

ؤؤؤؤؤؤؤؤؤؤؤؤؤ |
double

همان طور كه از مثال 1 پيداست ، نوع نتيجه double خواهد بود .
علاوه بر تبديل انواع در عبارات ، در احكام انتساب نيز ممكن است تبديل انواع
صورت گيرد . در تبديل انواع اطلاعاتي از بين مي روند كه بايد در نتيجه حاصل از
احكام انتساب دقت كافي به خرج داد. در ذيل تبديل انواع در احكام انتساب مشاهده
مي شود : int x;
char ch;
float f;
ch= x;
x= f;
f= ch;
f= x;

كليه احكام انتساب فوق قابل انجام بوده و از طرف كامپايلر زبان C هيچ گونه
خطايي گزارش نمي شود . اطلاعاتي كه ممكن است در تبديل انواع از بين بروند . در
جدول (1) آمده است .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
نوع منبع | نوع مقصد | اطلاعاتي كه ممكن است از بين برود |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| signed char | char اگر مقدار بزرگتر از127 باشد مقصد منفي خواهد شد |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| short 8 | char بيت با ارزش |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| int 8 | char بيت با ارزش |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| long int | char َ24 بيت با ارزش |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| long int | int َ16 بيت با ارزش |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| float | int قسمت كسري يا بيشتر و نتيجه حاصل گرد مي شود |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| double | float قسمت كسري و يا بيشتر و نتيجه حاصل گرد مي شود |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
جدول (1) . تبديل انواع

دو نكته را بايد در مورد تبديل انواع ( جدول (1) ) به خاطر داشته باشيم : 1
بعضي از تبديل انواع در جدول فوق وجود ندارد مثل doubleبه int . در اين
موارد مي توان double را به float تبديل كرده و سپس float را به int تبديل نمود. 2
وقتي نوع بزرگتري به نوع كوچكتري انتساب داده مي شود . قسمتي از اطلاعات
از دست مي روند . همان طور كه مي دانيم ، معمولا" اعداد صحيح (int) در 2 بايت و
اطلاعات از نوع char در يك بابت ذخيره مي شوند :
ؤؤؤؤؤؤؤؤؤؤؤ char
ؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ int
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
بايت كم ارزش بايت باارزش
وقتي يك متغير int به يك متغير char انتساب داده مي شود بايت كم ارزش متغير
از نوع int به متغير char منتقل شده ولي با ارزش متغير int در متغير char جايي ميگوييم در انتساب متغيرintبه char ، 8، بيت با ارزش از دست ميرود.

کيفيت مقاله :
عالی خوب متوسط ضعيف


ساختمان زبان C و چند تابع ورودي خروجي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۵۸ مراجعه امروز
۴۳۵۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ساختمان زبان C و چند تابع ورودي خروجي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۸۷۷ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.

ساختمان زبان C و چند تابع ورودي خروجي

همانطور كه قبلا" گفته شد C زبان ساخت يافته است و هر برنامه در اين زبان
شامل يك يا چند تابع است . يكي از اين توابع كه اسم آن ()main است به عنوان
تابع اصلي برنامه و بقيه توابع بعنوان تابع عرضي هستند . اجراي برنامه با تابع
اصلي ، يعني ()main شروع مي شود. در نوشتن برنامه ، بايد تابع اصلي و سپس بقيه
توابع را بنويسيم . تعريف يك تابع در داخل تابع ديگر امكان پذير نيست ولي هر
تابع مي تواند يك يا چند تابع ديگر را فراخواني نمايد .
برخلاف زبانهاي ديگر كه زير روال و توابع دو چيز جداگانه اي هستند در C همگي
تحت عنوان تابع بررسي مي شوند .
كليه متغيرهايي كه در برنامه استفاده مي شوند بايد تعريف شوند و منظور از
تعريف متغير ، نامگذاري و تعيين نوع آن است . متغيرها در C مقدار اوليه ندارند
و تا متغيري مقدار نگيرد قابل استفاده نخواهد بود . شكل (1) ساختمان ساده يك
برنامه به زبان C را نشان مي دهد كه پس از مطالعه مفاهيم ديگري از زبان C ، آن
را تكميل تر خواهيم كرد .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|
| { |
|
تعريف متغيرها | | . |
| . |
| . |
| } |
| f1 )(|
| { |
| . |
| . |
| . |
| } |
| f2 )(|
| { |
| . |
| . |
| . |
| } |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (1) . ساختمان ساده اي از برنامه C

اولين تابع برنامه ، ()main است . ابتدا متغيرهاي مورد استفاده اين تابع
تعريف ، سپس دستورات تابع اصلي با يك { شروع و به } ختم مي شود . بعضي از
دستورات تابع اصلي ممكن است فراخواني توابع ()f1 ، ()f2 وغيره نيز باشند. ()f1
()f2 دو تابع فرعي هستند كه در برنامه وجود دارند همانطوري كه مشاهده مي گردد
تعريف توابع فرعي پس از تابع اصلي صورت مي گيرد. در زبان C فرض ميشود كه نتايج
حاصل از تابع بصورت int است كه اگر غير از اين باشد ، بايد ضمن تعريف متغيرها وع توابع استفاده شده در برنامه به كامپايلر اعلان شود .

کيفيت مقاله :
عالی خوب متوسط ضعيف


تابع ()printf ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۸۰۰ مراجعه امروز
۴۳۹۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تابع ()printf
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۶۸۲ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

تابع ()printf

اين تابع براي انتقال اطلاعات از كامپيوتر به صفحه نمايش مورد استفاده قرار
مي گيرد و بصورت زير استفاده مي شود : ;
( عبارت ديگر " / عبارت " 1) printf) "
عبارت " 1 شامل تعدادي كاراكترهاي كنترلي ، كاراكترهاي قالب جهت تعيين شكل
خروجي و رشته هاي ديگري است كه بايد به خروجي منتقل شوند . " عبارت ديگر " شامل
اطلاعاتي هستند كه با فرمت مشخص شده در " عبارت " 1، بايد به خروجي منتقل شوند.
كاراكترهايي كه براي تعيين فرمت خروجي مورد استفاده قرار مي گيرند با كاراكتر %
شروع مي شوند ( جدول 1 ) .
كاراكتر | نوع اطلاعات كه بايد به خروجي منتقل شود |
%C | % يك كاراكتر | |
%d | % اعداد صحيح دهدهي مثبت و منفي | |
%i | % اعداد صحيح دهدهي مثبت و منفي | |
%e | % نمايش علمي عدد همراه با حرف e | |
%E | % نمايش علمي عدد همراه با حرف E | |
%f | % عدد اعشاري مميز شناور | |
%g | % اعداد اعشاري مميز شناور | |
%G | % اعداد اعشاري مميز شناور | |
%O | % اعداد مبناي 8 مثبت | |
%S | % رشته اي از كاراكترها ( عبارت رشته اي ) | |
%U | % اعداد صحيح بدون علامت ( مثبت ) | |
%x | % اعداد مبناي 16 مثبت با حروف كوچك | |
%X | % اعداد مبناي 16 مثبت با حروف بزرگ | |
%p pointer | % ( اشاره گر ) | |
%n | % موجب ميشود تا تعداد كاراكترهايي كه تا قبل | |
| ازاين كاراكتر به خروجي منتقل شده اند شمارش | |
| شده و در پارامتر متناظر با آن قرار گيرد . | |
%% | % علامت % |
جدول (1) . كاراكترهاي فرمت در تابع ()printf

كاراكترهاي كنترلي كه در تابع ()printf بكار ميروند در جدول (2) آمده است .
بعضي از كاراكترهاي كنترلي براي انتقال خروجي به يك محل معين از صفحه نمايش
مورد استفاده قرار مي گيرند .
| كاراكتر عملي كه انجام مي شود |
\f | \ موجب انتقال كنترل به صفحه جديد مي شود | |
\n | \ موجب انتقال كنترل به خط جديد مي شود | |
\t | \ انتقال به 8 محل بعدي صفحه نمايش | |
\" | \ چاپ كوتيشن (") | |
\' | \ چاپ كوتيشن (') | |
\0 NULL | \ رشته تهي | | back slash | \\ |
|
\V | \ انتقال كنترل به 8 سطر بعدي | |
\N | \ ثابت هاي مبناي 8( N( عدد مبناي 8 است ) | |
\xN | \ ثابت هاي مبناي 16( N( عدد مبناي 16 است ) |
جدول (2) . كاراكترهاي كنترلي

چند دستور متوالي كه شامل تابع ()print باشند ، خروجي خود را بر روي يك سطر
منتقل يم كنند . مگر اين كه با پارامتر كنترلي \n كنترل را به سطر بعدي منتقل
كنيم .
مثال 1:
                                                                     main)(

        {

          printf(" i like %c "/'c' );

          printf("%s"/"very much." );

        }

خروجي حاصل از اجراي برنامه فوق بصورت ذيل خواهد بود : i like c very much.

با استفاده از \n مي توانيم خروجي را در چند سطر داشته باشيم . main)(
{
printf("this is second program.\n" );
printf("output is in two line." );
}

خروجي حاصل از اجراي برنامه فوق بصورت ذيل است : this is second program.
output is in two line.

مثال 2: main)(
{
int num ;
printf("the address of num is:" );
printf(" %p"/ &num );
}

در مثال فوق عبارت &num آدرس متغير num را مشخص مي كند كه براي نوشتن آن از
كاراكتر فرمت %p استفاده شده است . نمونه اي از خروجي مثال 2 بصورت زير است . the address of num is : 6A30:OFE4

اگر در تابع ()printf چند كاراكتر فرمت داشته باشيم ، هر كاراكتر با يك عنصر
داده كه بايد به خروجي برود تطبيق داده مي شود : main)(
{
int a=10 ;
float b=20 ;
printf(" a is:%d/b is :%f"/a/b);
}

خروجي حاصل از اجراي برنامه فوق بصورت ذيل است : a is:10/b is:20:000000

مثال 3: main)(
{
unsigned int num ;
num=100 ;
printf("the value of num is:%u"/num);
}

همانطوري كه در مثال 3 مشاهده مي شود ، براي چاپ عدد num كه بصورت عدد صحيح
بدون علامت تعريف شد ، از %u استفاده شده است .
خروجي حاصل از اجراي برنامه مثال 3 به صورت ذيل است : the value of num is:100

مثال 4: main)(
{
double d ;
d=le+007 ;
printf("the value of d is:%e\n"/d);
printf("the value of d is:%E\n"/d);
printf("the value of d is:%g\n"/d);
}

خروجي حاصل از اجراي برنامه مثال 4 بصورت ذيل خواهد بود : the value of d is:1.00000e+07
the value of d is:1.00000E+07
the value of d is:1e+07

همانطور كه مشاهده مي شود براي چاپ اعدادي كه بصورت نماد علمي باشند ميتوان
از كاراكترهاي فرمت % e، % E،و % gو استفاده كرد .

مثال 5: main)(
{
float f=12.50 ;
int t=10 ;
printf("\n f is:%f"/f );
printf(" tenper is:%%%d"/t );
}

خروجي حاصل از اجراي برنامه فوق بصورت زير است : f is:12.500000/tenper is:%10

در مثال 5 براي چاپ علامت % از كاراكتر %% و براي چاپ متغير f از نوع float
مي باشد از %f استفاده شده است .
كاراكتر فرمت %n از ساير كاراكترهاي فرمت متفاوت است . اين كاراكتر بجاي
انتقال مقاديري به خروجي ، موجب مي شود تا تعداد كاركترهايي كه تا قبل از اين
كاراكتر به خروجي منتقل شده اند ، شمارش شده و در پارامتر متناظر با آن قرار
بگيرد .

مثال 6: main)(
{
printf("\neach\tword\tis\n" );
printf("tabbed\tover\tonce" );
}

خروجي از اجراي برنامه فوق بصورت زير خواهد بود : each word is
tabbed over once

كاراكتر كنترلي \b موجب انتقال مكان نما به اندازه يك كاراكتر به عقب ميشود
( بسمت چپ ). كاراكترهاي كنترلي \ "و \و براي چاپ كوتيشن درخروجي مورد استفاده
قرار مي گيرند .

تعيين طول ميدان در تابع ()printf
در حين انتقال اطلاعات توسط تابع ()printf ميتوانيم طول ميدان خروجي را مشخص
كنيم . در اين مورد مي توانيم محل نقطه اعشار و تعداد ارقام اعشار را نيز تعيين
كنيم . تعيين طول ميدان در جدول بندي ها بسيار مفيد است . طول ميدان ، بصورت w.d
است كه در اعداد اعشاري مميز شناور ، w طول ميدان و d تعداد ارقام اعشار را
مشخص مي كند .

مثال 7: main)(
{
printf("\n%8.1f %8.1f %8.1f\n"
/3.0/12.5/523.3 );
printf("\n%8.1f %8.1f %8.1f\n"
/300.0/1200.5/5300.3 );
}

خروجي حاصل از اجراي برنامه فوق بصورت زير است : 3.0 12.5 523.3
300.0 1200.5 5300.3

همانطوركه مشاهده مي گردد طول ميدان برابر با 8 و تعداد ارقام اعشار، برابر
با يك كه در منتهااليه سمت راست ميدان قرار گرفته ، منظور شده است . براي توضيح
بيشتر ، عدد 5300/3 را در حافظه نشان مي دهيم :
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | | 5 | 3 | 0 | 0 | . | 3 |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
اگر فرمت w.d كه طول ميدان را مشخص مي كند در مورد رشته ها استفاده گردد ، w
حداقل طول ميدان و d حداكثر كاراكترهاي قابل چاپ را مشخص مي كند .
اگر w.d در مورد اعداد صحيح بكار برده شود ، w مشخص كننده حداقل طول ميدان
و d تعيين كننده حداكثر طول ميدان است .

مثال 8: main)(
{
printf("%7.4f\n"/123.1234567 );
printf("%3.8d\n"/1000 );
printf("%10.16a\n"/"this is a" );
printf(" simple test" );
}

خروجي حاصل از اجراي برنامه فوق بصورت زير است : 123.1235
00001000
this is a simple

در خروجي اول ، تعداد ارقام اعشاري 4 در نظر گرفته شده كه بقيه ارقام حذف
شده اند و ضمنا" عدد حاصل گرد شده است .
در خروجي دوم كه : ميدان 3/8 است عدد صحيح 1000 چاپ شده است .
در خروجي سوم از رشته this is a simple به اندازه 16 كاراكتر چاپ شده است .
در حالت معمولي ، خروجي حاصل در سمت راست ميدان قرار مي گيرد كه مي توان با
قرار دادن علامت منها ( - ) بلافاصله پس از علامت % ، اطلاعات را در سمت چپ ميدان

کيفيت مقاله :
عالی خوب متوسط ضعيف


تابع ()scanf ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۸۰۹ مراجعه امروز
۴۴۰۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تابع ()scanf
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۳۵۷ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

تابع ()scanf

اين تابع براي خواندن اطلاعات از ورودي استاندارد ( صفحه كليد ) بكار رفته و
بصورت زير استفاده مي شود : ;
(آدرس متغيرها ، " كاراكترهاي فرمت ") scanf
كاراكترهاي فرمت ، نوع اطلاعاتي كه بايد خوانده شوند را مشخص مي كند. و آدرس
متغيرها، مشخص كننده محل هايي از حافظه هستند كه اطلاعات ورودي بايد درآن محلها
قرار گيرند. همانطور كه قبلا" ديده ايم آدرس متغيرها را با عملگر & مشخص ميكنيم .
در تابع scanf همانند تابع printf از تعدادي كاراكترهاي فرمت استفاده مي شود .
( جدول 1 ) .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| كاراكتر اطلاعاتي كه خوانده مي شوند |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
%c | % يك كاراكتر | |
%d | % يك عدد صحيح دهدهي | |
%i | % يك عدد صحيح دهدهي | |
%e | % عدد اعشاري مميز شناور | |
%f | % عدد اعشاري مميز شناور | |
%g | % عدد اعشاري مميز شناور | |
%o | % عدد مبناي 8 | |
%x | % عدد مبناي 16 | |
%p | % يك اشاره گر | |
%n | % مشخص كننده تعداد كاراكترهايي است كه تا | %%n |
| ورودي خوانده شده اند | |
%u | % عدد صحيح مثبت | |
%s | % رشته ها |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
جدول (1) . كاراكترهاي فرمت در تابع ()scanf

مثال 1: main)(
{
char ch ;
printf("\n enter a character :");
scanf("%c"/&ch );
printf("\n ch=%c".ch );
}

اجراي فرمان فوق ، ضمن صدور يك پيام ، كاراكتري را از ورودي خوانده در متغير ch
قرار مي دهد . نمونه اي از خروجي را در زير مشاهده مي كنيم : enter a character : s
ch=s

مثال 2: main)(
{
int year ;
printf("enter your age in year:");
scanf("%d"/&year );
printf("\n your age is");
printf(" %d day."/year*365);
}

نمونه اي از خروجي را در زير مشاهده مي كنيم : enter your age in year:19
your age 6935 day.

اين برنامه ، سن شما را از ورودي دريافت كرده و آن را به روز تبديل ميكند و
سپس به خروجي مي برد . لازم به ذكر است كه در مثال 2 تابع ()scanf بر روي خطي
عمل مي كند كه تابع ()printf اولي عمل كرده است . تابع ()printf دومي به علت
وجود \n ، بر روي خط بعدي از صفحه نمايش عمل خواهد كرد . استفاده از ساير
كاراكترهاي قالب در تابع ()scanf همانند تابع ()printf است كه ذكر مثال درمورد
آنها ضروري به نظر نمي رسد .
قالب ديگري كه بايد در مورد آن توضيح داده شود %n است كه مشابه آن را در
تابع ()printf داشته ايم . %n در تابع ()scanf تعداد كاراكترهاي خوانده شده توسط
اين تابع تا %n را به متغيري كه آدرس آن متناظر با %n ذكر شده است منتقل ميكند.
براي خواندن چند متغير از ورودي توسط تابع ()scanf ، اسامي متغيرها را كه
به همراه & ( عملگر آدرس ) ذكر مي شوند با كاما از يكديگر جدا كرده و در حين
ورود اطلاعات مي توانيم آنها را با فاصله (blank) ، كليد enter و يا tab جدا
كنيم .

مثال 3: main)(
{
int a/b/c ;
float ave ;
printf("\n enter three number :");
scanf("%d %d %d"/&a/&b/&c );
ave=(a+b+c)/3 ;
printf("\n average is:%f"/ave );
}

به نتيجه اجراي برنامه و چگونگي ورود سه عدد 20 ، 19 و 18 بعنوان اطلاعات
ووردي توجه كنيد : enter three number :20 19 18
av

کيفيت مقاله :
عالی خوب متوسط ضعيف


خواندن يك كاراكتر از ورودي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۰۹ مراجعه امروز
۴۱۲۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
خواندن يك كاراكتر از ورودي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۴۴۶ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

خواندن يك كاراكتر از ورودي

براي خواندن يك كاراكتر از ورودي ، علاوه بر تابع ()scanf از توابع ديگري نيز
استفاده ميشود كه قبل از بررسي آنها به مثالي از()scanf جهت خواندن يك كاراكتر
توجه كنيد :
مثال 1: main)(
{
char ch ;
printf("enter a character : " );
scanf("%c"/&ch );
printf(" you typed the character");
printf(": %c"/ch );
}

نمونه اي از خروجي حاصل از مثال 1 بصورت زير است : enter a character: j
you typed the character:j

تابع ()getch
اين تابع براي خواندن يك كاراكتر از ورودي بكار مي رود و بصورت زير استفاده
مي شود :
()= getch متغير
پس از آن كه كنترل اجراي برنامه به تابع ()getch رسيد ، برنامه منتظر فشار
دادن كليدي از صفحه كليد مي شود . اگر متغير مورد نظر كاراكتري باشد مقدار
كاراكتري كليد ورود به اين متغير منتقل مي شود و در صورتي كه اين متغير از نوع
عددي باشد ، كد اسكي كليد وارد شده ، در اين متغير قرار مي گيرد .

مثال 2: main)(
{
char ch ;
int x ;
printf("\n enter a character : " );
ch=getch )(;
printf("\n enter this character" );
printf(" second time :" );
ch=getch )(;
printf("\n character is:" );
printf("%c/%c/%d/%d/ch/x/ch/x );
}

فرض كنيد در پاسخ به اجراي اين برنامه كليد s را دوبار در پاسخ به دو تابع
()getch وارد كنيم . در اين صورت خروجي حاصل از اجراي برنامه بصورت زير خواهد
بود : enter a character:
enter this character second time:
character is:s/s/115/115

اگر در مثال 2 به تابع ()printf توجه كنيد ، متغير chو xو را يكبار با فرمت %c
و بار ديگر با فرمت %d نوشته ايم كه در هر دو حالت عدد 115 كه كد اسكي s است
چاپ شده است . وقتي متغير عددي x را با فرمت %d نوشته ايم آنچه كه در آن قرار
گرفته ( كد اسكي كليد s ) نوشته شده است و زماني كه اين متغير را با فرمت %c
نوشته ايم كد اسكي به كاراكتر s تبديل شده و سپس در خروجي چاپ مي شود .

تابع ()getche
اين تابع همانند تابع ()getch براي خواندن يك كاراكتر از ورودي بكار مي رود
و بصورت زير استفاده مي شود :
()= getche متغير
نوع عمل اين تابع مثل ()getch است . با اين تفاوت كه اين تابع پس از اخذ
ورودي ، آن را روي صفحه نمايش چاپ مي كند . حرف e در انتهاي تابع به معني echo
( عكس العمل ) است .

تابع ()getchar
اين تابع همانند توابع ()getch و ()getche براي خواندن يك كاراكتر از ورودي
بكار رفته و بصورت زير استفاده مي شود :
()= getchar متغير
نوع عمل اين تابع همانند دو تابع فوق الذكر است . با اين تفاوت كه در اين
تابع پس از وارد نمودن كليه ( كاراكتر ) مورد نظر ، كليد enter نيز بايد وارد اله در توربو C رعايت مي شود ) .

کيفيت مقاله :
عالی خوب متوسط ضعيف


نوشتن يك كاراكتر در خروجي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۵۴۲ مراجعه امروز
۴۱۳۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نوشتن يك كاراكتر در خروجي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۳۲۲ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

نوشتن يك كاراكتر در خروجي

براي نوشتن يك كاراكتر در خروجي علاوه بر تابع ()printf ، دو تابع ديگر نيز
معمولا" مورد استفاده قرار ميگيرند. قبل از بررسي آنها به مثالي درمورد ()print
كه منجر به چاپ يك كاراكتر در خروجي مي گردد . مي پردازيم . main)(
{
printf("example for character");
printf(": %c"/'a' );
}

خروجي حاصل از اجراي برنامه فوق ، حرف a است . example for character :a

تابع ()putch
اين تابع براي نوشتن يك كاراكتر در صفحه نمايش مورد استفاده قرار گرفته و
بدين صورت استفاده مي شود : ;
( متغير ) putch

مثال 1: main)(
{
char ch ;
printf("\n enter a character: ");
ch=getch )(;
printf("you typed the character:");
putch(ch );
}

خروجي حاصل بصورت زير است : enter a character:
you typed the character : s

براي نوشتن يك كاراكتر توسط تابع ()putch اين تابع را بصورت زير هم مي توان
بكار برد : putch('a');

دستور فوق موجب چاپ كاراكتر a در خروجي مي شود .

تابع ()putchar
اين تابع همانند تابع ()putch براي نوشتن يك كاراكتر در صفحه نمايش به كار
مي رود و بصورت زير استفاده مي شود : ;
( متغير )putchar

مثال 2: #include "stdio.h"
main)(
{
char ch ;
printf("enter a character :" );
ch=getch )(;
printf("\n you typed: " );
putchar(ch );
}

به نمونه اي از خروجي برنامه مثال 2 كه در زير آمده است توجه كنيد : enter a character:
you typed : s
براي نوشتن حرف a در خروجي تابع ()putchar بصورت ;('a')putch بكار مي رود .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ساختارهاي تكرار ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۵۴۵ مراجعه امروز
۴۱۳۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ساختارهاي تكرار
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۴۹۵ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.

ساختارهاي تكرار

ساختارهاي تكرار ، تحت شرايط خاصي امكان اجراي مكرر دستور يا مجموعه اي از
دستورات را فراهم ميكنند. اين ساختارها در زبان هاي برنامه سازي مختلف به اشكال
متفاوتي وجود دارند كه ذيلا" انواع مختلف اين ساختارها در زبان C ، مورد بررسي
قرار مي گيرد .

ساختار تكرار for
ساختار for يكي ازامكانات ايجاد حلقه تكرار ميباشد كه بصورتهاي زير استفاده
مي شود :
(َ1) ;دستور(گام حركت ;شرط حلقه ;مقدار اوليه انديس حلقه ) for
(َ2) (گام حركت ;شرط حلقه ;مقدار اوليه انديس حلقه ) for {

مجموعه دستورات }
for(;;( )3)
{

مجموعه دستورات }

نكاتي كه بايد در مورد نحوه كاربرد ساختار تكرار for در نظر داشت عبارتند
از : 1
دستوري كه بعد از ساختار for آمده است مي تواند در خط ديگري تايپ شود . 2
ساختار forبه ; ختم نمي شود . زيرا در غير اين صوتر مجموعه دستوراتي كه
اجراي آنها بايد تكرار شود ، فقط يك بار اجرا خواهند شد . 3
علامت { در نحوه كاربرد دوم و سوم ، مي توانند در همان خطي كه ساختار for
آمده است قرار گيرند . 4
بعد از اولين مقدار انديس حلقه و شرط حلقه ; قرار مي گيرد .
ساختار for در مواردي مفيد است كه تعداد دفعات تكرار مجموعه اي از دستورات
معلوم باشد ، هر حلقه تكرار داراي يك شمارنده است كه تعداد دفعات تكرار اجراي
دستورات داخل حلقه را مشخص مي كند. اين شمارنده ، انديس حلقه نامگذاري مي شود.
انديس حلقه مي تواند مثبت ، منفي ، صحيح و يا اعشاري باشد . مقدار اوليه انديس
حلقه مشخص مي كند كه شمارنده ، از چه مقداري شروع مي شود. شرط حلقه مشخص ميكند
كه مجموعه دستورات داخل حلقه تكرار ، تحت چه شرايطي اجرا مي شوند . گام حركت
مشخص مي كند كه در هر بار اجراي مجموعه دستورات داخل تكرار ، چه مقداري به
شمارنده حلقه اضافه مي شود . گام حركت مي تواند مثبت منفي ، صحيح و يا اعشاري
باشد . بعنوان مثال در دستور : for( i=0;i<5;i++)
printf("\n the value of i is:%d / i);
i
انديس حلقه تكرار است كه مقدار اوليه آن برابر با صفر است . شرط حلقه
تكرار اين است كه i كوچكتر از 5 باشد و گام حركت نيز 1 است كه با i++ مشخص شده
است . خروجي حاصل از اجراي اين دستور بصورت زير است : 0
1
2
3
4

مثال 1: برنامه اي كه تعداد 10 عدد را از ورودي خوانده ، ميانگين آنها را
محاسبه كرده و به خروجي مي برد : main)(
{
int i / sum=0 / num ;
float ave ;
for(i=1 ; i<=10 ; i++)
{
printf("enter number %d: "/i );
scanf("%d"/&num );
sum+=num ;
printf("\n" );
}
ave-sum/10 ;
printf("\n the average is:%f "/ave);
}

خروجي حاصل از اجراي برنامه مثال 1 : enter number 1 : 12
enter number 2 : 13
enter number 3 : 17
enter number 4 : 18
enter number 5 : 16
enter number 6 : 20
enter number 7 : 23
enter number 8 : 28
enter number 9 : 31
enter number 10 : 14

the average is:19.000000

مثال 2: برنامه زير جدول كدهاي اسكي را در خروجي چاپ مي كند : main)(
{
int i ;
for(i=41 ; i<=120 ; i++)
{
printf("%3d=%c\t"/i/i );
if(i%5==0 )printf("\n" );
}
}

برنامه فوق با چند دستور ساده توانسته است جدول زير را در خروجي چاپ كند . 41= )42=* 43=+ 44=/ 45=-
46= .47=/ 48=0 49=1 50=2
51=3 52=4 53=5 54=6 55=7
56=8 57=9 58= :59=; 60=<
61== 62=> 63=? 64=@ 65=A
66=B 67=C 68=D 69=E 70=F
71=G 72=H 73=I 74=J 75=K
76=L 77=M 78=N 79=O 80=P
81=Q 82=R 83=S 84=T 85=U
86=V 87=W 88=X 89=Y 90=Z
91=[ 92=\ 93=] 94=^ 95=_
96=` 97=a 98=b 99=c 100=d
101=e 102=f 103=g 104=h 105=i
106=j 107=k 108=l 109=m 110=n
111=o 112=p 113=q 114=r 115=s
116=t 117=u 118=v 119=w 120=x

اگر بخواهيم اين برنامه را در زبانهاي ديگر بنويسيم ، برنامه طولاني تري به
دست مي آيد .

مثال 3: برنامه اي كه جدول ضرب اعداد از 1 تا 10 را درصفحه نمايش چاپ ميكند. main)(
{
int i/j ;
for(i=1 ; i<=10 ; i++)
{
for(j=1 ; j<=10 ; j++)
printf("%3d "/i*j );
printf("\n" );
}
}

خروجي حاصل از برنامه فوق : 1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100

مثال 4: برنامه اي كه تعداد حروف يك جمله را شمارش مي كند ( انتهاي جمله با
نقطه مشخص شده است ) . در اين برنامه از دستور # include استفاده شده است . #include "stdio.h"
main)(
{
char ch ;
int count ;
for(count=0;(ch=getchar))(!='.'
; count++ );
printf("\n length of statement");
printf(" is:%d"/count );
}

به نمونه اي از خروجي برنامه مثال 4 توجه نماييد : i like C very much.
length of statement is:18

از نحوه كاربرد سوم for براي ساخت حلقه هاي تكرار بينهايت استفاده مي شود .

ساختار تكرار while while
( يكي از ساختارهاي تكرار در زمان C ) در مواقعي مورد استفاده قرار
مي گيرد كه تعداد دفعات تكرار مجموعه دستورات مورد نظر مشخص نباشد .
ساختار while بصورت هاي زير استفاده مي شود : ;
دستور (شرط) while(1(
(شرط) while(2( {

مجموعه اي از دستورات }

وقتي كه كنترل اجراي برنامه به ساختار while رسيد ، شرطي كه در آن ذكر شده
است تست مي شود . اگر اين شرط داراي ارزش منطقي " درست " باشد ، دستور يا
دستورات داخل حلقه تكرار اجرا ميشوند واجراي اين دستورات تا برقراري شرط مذكور
ادامه مي يابد. لذا بايد توجه داشت كه در داخل بدنه حلقه تكرار ، شرط حلقه نقض
شود ، وگرنه دستورات داخل حلقه ، بينهايت بار اجرا خواهند شد .

مثال 5: برنامه اي كه يك جمله رااز ورودي خوانده و تعداد كاراكترهاي آن جمله
را شمارش مي كند ( انتهاي جمله به كليد enter ختم مي شود ) . main)(
{
int count=0 ;
printf("type a statement and ENTER");
printf(" to end.");
while(getche )(!='\r')
count ++ ;
printf("\n length of statement is:");
printf("%d/count );
}

حلقه هاي تكرار بينهايت
با استفاده از ساختارهاي تكرار forو whileو مي توانيم حلقه هاي تكراري درست
كنيم كه جهت ختم آنها بايد از كليد CTL+BREAK استفاده كرد . به اين حلقه هاي
حلقه هاي بينهايت گفته مي شود . براي ساختن حلقه تكرار از while مي توانيم بجاي
شرط از يك (1) به معني ارزش درستي ، استفاده كنيم .

مثال 6: برنامه اي كه تعداد نامحدودي عدد رااز ورودي خوانده و فاكتوريل آنها
را محاسبه مي كند :
جهت ختم اجراي برنامه بايد از CTL+BREAK استفاده نمود . main)(
{
long int answer ;
int number ;
while(1)
{
printf("\n type number: " );
scanf("%d/&number );
answer=1 ;
while(number>1)
answer*=number --;
printf("\n factorial is: " );
printf("%1d\n"/answer );
}
}

به نمونه اي از خروجي برنامه مثال 6 توجه نماييد : type number: 5
factorial is: 120

type number: 4
factorial is: 24
type number: 6
factorial is: 720

type number: ^c

همانطور كه قبلا" گفته شد براي ساختن حلقه تكرار بينهايت از ساختار for كافي
است كه اين ساختار را بصورت (;;)for بكار ببريم ( مثال 7 ) .

مثال 7: مساله محاسبه فاكتوريل ( مثال 6 ) با استفاده از حلقه for : main)(
{
long int answer ;
int number ;
for(;;)
{
printf("\n type number: " );
scanf("%d/&number );
answer=1 ;
while(number>1)
answer*=number --;
printf("\n factorial is: " );
printf("%1d\n"/answer );
}
}

ساختار تكرار do
ساختار تكرار do مشابه ساختار تكرار while است . با اين تفاوت كه در ساختار while
شرط حلقه در ابتداي حلقه تست ميشود ولي در ساختار do شرط حلقه در انتهاي
حلقه تكرار تست خواهد شد. لذا در ساختار do مجموعه دستورات داخل ساختار، حداقل
يكبار انجام مي شوند . اين ساختار بصورت زير استفاده مي شود : do
{
;
مجموعه دستورات ;
(شرط) } wwhile
وقتي كنترل اجراي برنامه به ساختار do رسيد مجموعه دستورات داخل حلقه تكرار
اجرا مي شوند و سپس شرط ذكر شده در اين ساختار تست مي گردد . چنانچه اين شرط
برقرار باشد مجموعه دستورات داخل حلقه تكرار مجددا" اجرا مي شود ، وگرنه كنترل
اجراي برنامه از حلقه تكرار خارج مي گردد .

مثال 8: برنامه اي كه عددي را از ورودي خوانده و سپس آنرا بصورت معكوس در
خروجي چاپ مي كند .
مثلا" عدد 2153 را بصورت 3512 چاپ مي نمايد . main)(
{
int number / digit ;
printf("enter a number: " );
scanf("%d/&number );
do {
digit=number%10 ;
printf("%d/digit );
number/=10 ;
}while(number!=0 );
}

نمونه اي از خروجي حاصل از اجراي برنامه مثال 8 : enter a number:2153
3512

ساخت حلقه هاي تكرار بينهايت با استفاده از ساختار do نيز امكان پذير است . استفاده گردد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ساختارهاي تصميم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۵۵۱ مراجعه امروز
۴۱۴۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ساختارهاي تصميم
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۳۳۵ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

ساختارهاي تصميم

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

ساختار تصميم if
ساختار if ( كه ساختار انتقال كنترل شرطي نيز نامگذاري ميشود ) موجب ميگردد
تا تحت شرايطي ، مجموعه اي از دستورات اجرا شده و يااز اجراي اين مجموعه دستورات
صرفنظر گردد . اين ساختار بصورت هاي زير مورد استفاده قرار مي گيرد .
(َ1) ;دستور (شرط) if
(َ2) (شرط) if {

مجموعه دستورات 1 }
else
{

مجموعه دستورات 2 }

در روش (1) ، شرط ذكر شده بررسي مي شود و در صورت برقرار بودن ، دستور بعد
از آن اجرا مي شود و در غير اينصورت كنترل اجراي برنامه به دستور بعد از if
منتقل مي گردد .
در روش (2) ، شرط ذكر شده بررسي مي شود و در صورت برقرار بودن ، مجموعه
دستورات (1) اجرا ميشوند و در غير اينصورت مجموعه دستورات (2) اجرا خواهند شد.
لازم به ذكر است كه وجود else در ساختار if اختياري است . يعني ساختار if را
بصورت زير نيز مي توان بكار برد :
(شرط) if {

مجموعه دستورات }

در روش فوق پس از اين كه كنترل اجراي برنامه به if رسيد شرط مورد نظر بررسي
مي شود . چنانچه اين شرط برقرار باشد ، مجموعه دستورات داخل {و }و ( كه يك بلاك
ناميده مي شود ) اجرا مي گردد وگرنه كنترل اجراي برنامه به اولين دستور بعد از
بلاك if منتقل خواهد شد . استفاده از ساختار if بصورت لانه اي ( تو در تو ) نيز
امكان پذير است كه در اينصورت اولين else به آخرين if بر مي گردد .

مثال 1: برنامه اي كه با خواندن يك جمله از ورودي ، تعداد كاراكترها و كلمات
موجود در جمله را محاسبه مي كند . كلمات با فاصله (blank) از يكديگر جدا شده و
انتهاي جمله به كليد enter ختم مي گردد . main)(
{
int charcount=0 ;
int wordcount=0 ;
char ch ;
printf("type a statement:\n" );
while((ch=getche))(!='\r')
{
charcount ++ ;
if(ch==' ')
wordcount ++ ;
}
printf("\n character count is:");
printf("%d"/charcount );
printf("\n word count is:");
printf("%d"/wordcount );
}

به نمونه اي از خروجي برنامه مثال 1 توجه نماييد : type a statement:
this book is my fifth book.
character count is:27
word count is:6

مثال 2: برنامه اي كه بااستفاده از ساختار تصميم if يك شكل گرافيكي را به كمك
كدهاي اسكي DBو BOو رسم مي كند . main)(
{
int x/y ;
for(y=1 ; y<11 ; y++)
{
for(x=1 ; x<11 ; x++)
{
if(x==y)
printf("\xDB" );
else
if(x==11-y)
printf("\xDB" );
else
printf("\xBO" );
}
printf("\n" );
}
}

مثال 3: برنامه اي كه تعداد كل كاراكترهاي يك جمله و همچنين تعداد ارقام
موجود در آن را شمارش مي كند . main)(
{
int charcnt=0 ;
int wordcnt=0 ;
char ch ;
printf("\n enter a statement: \n" );
while((ch=getche))(!='\r')
{
charcnt++ ;
if(ch>=47 && ch<=58)
digthcnt++ ;
}
printf("\n character count is:" );
printf("%d"/charcnt );
printf("\ndigit count is:");
printf("%d"/digtcnt);
}

به نمونه اي از خروجي برنامه مثال 3 توجه نماييد : type a statement:
my telephone number is 817694.
character count is:31
digit count is:6

نكته اي كه بايد در مورد برنامه مثال 3 توضيح داد اين است كه در دستور if
جهت تشخيص اين كه ، آيا كاراكتر وارد شده ، يكي از ارقام 0تا 9ا است يا خير
از اعداد 47 و 58 استفاده شده است . زيرا كدهاي اسكي ارقام 0تا 9ا در بين اين
دو عدد ( از 48 تا 57 ) مي باشند .

ساختار تصميم else if
تاكنون ساختار if را مطالعه نموديم و مثال هايي را در اين زمينه مشاهده
كرديم . نكته اي بايد به آن توجه داشت اين است كه اگر در ساختارif خواسته باشيم
چندين شرط را مورد بررسي قرار دهيم ، بايد ساختار if را به صورت تودرتو بكار
ببريم كه نه تنها موجب طولاني شدن برنامه مي گردد ، بلكه خوانايي آن را نيز
پايين مي آورد . ساختار else if كه يك ساختار انتقال كنترل شرطي است مي تواند
در اين زمينه به ما كمك كرده تا بتوانيم از افزايش بي رويه طول برنامه جلوگيري
كنيم .
جهت روشن شدن مطلب به دو برنامه بعدي ( مثالهاي 4، 5 ) كه يكي با ساختار if
و ديگري با ساختار else if براي حل يك مساله نوشته شده اند توجه كنيد . اين
برنامه ها دو عدد و يكي از عملگرهاي چهار عمل اصلي را از ورودي خوانده و عملگر
را بر روي دو عدد اجرا مي كنند .

مثال 4: main)(
{
int num1 / num2 ;
char op ;
while(1)
{
printf("type number/operator/");
printf("number \n" );
scanf("%d%c%d"/&num1/&op/&num2);
if(op=='+')
printf("\n sum=%d"/num1+num2);
else
if(op=='-')
printf("\nsubtract=%d"/num1-num2);
else
if(op=='*')
printf("\nmultiple=%d"/num1*num2);
else
if(op=='/')
printf("\ndivition=%d"/num1+num2);
else
printf("\n operator is illegal");
printf("\n\n" );
}
}

به نمونه اي از خروجي برنامه مثال 4 توجه نماييد : type number/operator/number
12 + 23
sum=35

type number/operator/number
2*26
multiple=52

type number/operator/number
4%2
operator is illegal

type number/operator/number

^c

مثال 5: main)(
{
int num1 / num2 ;
char op ;
while(1)
{
printf("type number/operator/");
printf("number \n" );
scanf("%d%c%d"/&num1/&op/&num2);
if(op=='+')
printf("\n sum=%d"/num1+num2);
else if(op=='-')
printf("\n subtract=%d"/num1-num2);
else if(op=='*')
printf("\n multiple=%d"/num1*num2);
else if(op=='/')
printf("\n divition=%d"/num1+num2);
else
printf("\n operator is illegal");
printf("\n\n" );
}
}

همانطوركه ملاحظه ميشود برنامه اي كه با ساختار else if نوشته شده است ( مثال 5
) كوتاهتر بوده و از خوانايي بهتري برخوردار است . لذا توصيه مي شود كه در
اين گونه موارد از else if بجاي ساختار if استفاده گردد .

انتقال كنترل غيرشرطي
ساختارهاي ifو else ifو را تحت عنوان انتقال كنترل شرطي مورد بررسي قرار
داده ايم . چند دستور در زبان C وجود دارند كه بدون تست كردن شرطي سبب انتقال
كنترل برنامه ، از جايي به جايي ديگر مي شوند . نام اين دستور انتقال كنترل
غيرشرطي مي باشد كه در ذيل مورد بررسي قرار مي گيرند .

دستور goto
در زبان C علاوه بر ساختارهاي تصميم ، دستوري بنام goto نيز وجود دارد كه سبب
انتقال كنترل اجراي برنامه ، از نقطه اي به نقطه ديگر مي گردد. اين دستور بصورت
زير بكار مي رود : ;
برچسب دستور goto
برچسب دستور ، همانند يك متغير نامگذاري شده و به دو نقطه (:) ختم مي شود .
پيشنهاد مي گردد حتي الامكان از دستور goto كه معمولا" سبب كاهش ميزان خوانايي
برنامه مي شود ، استفاده نگردد .

مثال 6: برنامه اي كه با استفاده از دستور goto يك حلقه تكرار مي سازد . main)(
{
int x=1 ;
loop1:
x++ ;
if(x<100 )goto loop1 ;
printf("\n the maximum value");
printf(" of x is:%d"/x );
}

خروجي حاصل از اجراي برنامه مثال 6 : the maximum value of x is:100

يكي از خواص gotoدر Cر اين است كه از تابعي به تابع ديگر نمي توان انشعاب
كرد و فقط انتقال كنترل در يك تابع امكان پذير است . يعني برچسب goto بايد در
تابعي باشد كه اين دستور در آن تابع بكار رفته است .

دستور break
اين دستور يكي از دستورات انتقال كنترل غير شرطي است و به صورت زير مورد
استفاده قرار مي گيرد :

دستور break به دو منظور استفاده مي شود : الف ) خاتمه داده به case در
ساختار switch ، ب ) خاتمه دادن به حلقه تكرار ( حلقه هاي تكرار ممكن با for do
يا whileا ساخته شوند ) . پس از اجراي دستور break در داخل ساختارهاي تكرار
كنترل اجراي برنامه به اولين دستور پس از حلقه تكرار منتقل مي شود .

مثال 7: main)(
{
int t ;
for(t=0 ; t<100 ; t++)
{
printf("%3d"/t );
if(t==5)
break ;
}
printf("\nmaximum value of t is:");
printf("%d"/t);
}

خروجي حاصل از اجراي برنامه مثال 7: 0 1 2 3 4 5
maximum value of t is:5

همانطور كه از خروجي برنامه پيداست پس از آن كه مقدار tبه 5 رسيد كنترل
اجراي برناه از حلقه تكرار for خارج شده و با اجراي دستور printfعدد 5د را چاپ
مي كند . نكته اي كه در مورد break بايد توجه داشت اين است كه اگر دو يا چند
حلقه تكرار تودرتو داشته باشيم ، دستور break موجود در داخلي ترين حلقه ، فقط
موجب خروج از همين حلقه تكرار مي شود .

مثال 8: main)(
{
int t ;
for(t=0 ; t<100 ; t++)
{
count=1 ;
printf("\n" );
for(;;)
{
printf("%3d"/count );
count ++ ;
if(count==4 )break ;
}
}
}

خروجي حاصل از اجراي برنامه مثال 8: 1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3

در دو مثال 7و8و دوحلقه تكرار وجوددارد كه حلقه داخلي يك حلقه بينهايت است .
در اين حلقه ر گاه مقدار countبه 4 برسد ، كنترل اجراي برنامه از اين حلقه
خارج مي شود .

دستور continue
دستور continue در يك حلقه تكرار ، موجب انتقال كنترل به ابتداي حلقه تكرار
شده ، بصورت زير استفاده مي شود : continue;

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

مثال 9: برنامه اي كه كاراكتري را از ورودي دريافت كرده و اين كاراكتر و
كاراكتر بعد از آن را به خروجي مي برد . main)(
{
char done=0 / ch ;
while(!done)
{
printf("\n type a character / ");
printf("& for exit :");
ch=getch)(;
printf("\n you typed the");
printf("character: %c"/ch);
if(ch=='&')
{
done=1 ;
continue ;
}
printf("\nthe next character is:");
printf("%c"/ch+1 );
}
}

به نمونه اي از خروجي برنامه مثال 9 توجه نماييد : type a character /& for exit:
you typed the character: a
the next character is:b
type a character /& for exit:
you typed the character: b
the next character is:c
type a character /& for exit:
you typed the character: &

ساختار switch
ساختار switch كه يكي از ساختارهاي جالب جهت بالا بردن توانايي برنامه است
بصورت زير استفاده مي شود :
( عبارت ) switch {

:مقدار case 1
مجموعه دستورات 1 break;

:مقدار case 2
مجموعه دستورات 2 break;
.
.
.
default:

مجموعه دستورات }

نحوه عمل ساختار switch بدين صورت است كه : عبارت ذكر شده در switch ارزيابي
مي شود ، سپس نتيجه ارزيابي از بالا به پايين با مقادير ذكر شده ( مقدار 1
مقدار 2 و ... ) مقايسه مي شود ( ابتدا با " مقدار " 1 مقايسه مي گردد ) اگر
نتيجه ارزيابي بااين مقدار برابر باشد مجموعه دستورات داخل آن case اجرا ميشود
و با دستور break كنترل اجراي برنامه از اين ساختار خارج مي شود . اگر نتيجه
ارزيابي با " مقدار " 1 برابر نباشد ، مقايسه با " مقدار " 2 انجام مي شود و
اين روند تا انتهاي اين ساختار ادامه پيدا مي كند . اگر هيچكدام از مقاديري كه
در case ذكر شده اند با نتيجه ارزيابي " عبارت " برابر نباشند ، مجموعه دستورات
پس از defaule اجرا مي شود . defaule اختياري است و ممكن است در ساختار switch
استفاده نگردد. در اين صورت اگر هيچكدام از مقادير 1، 2 و... با نتيجه ارزيابي "
عبارت " برابر نباشند ، كنترل به بعد از ساختار switch برخواهد گشت .
حداكثر تعداد case كه در يك ساختار switch مي تواند قرار گيرد برابر با 257
است .
نكاتي كه در مورد ساختار switch بايد در نظر داشت عبارتند از : 1
اين ساختار با ساختار if از اين جهت متفاوت است كه در ساختار switch فقط
مساله " مساوي بودن "(equality() مطرح است اما در ساختار if مي توان يك عبارت
منطقي و يا رابطه اي را مورد بررسي قرار داد . 2
دو يا چند case در ساختار switch نمي توانند يك مقدار مساوي را مورد تست
قرار دهند . بعضي در نحوه كاربرد ساختار switch ، مقدار 1 ، مقدار 2 و ...
نمي توانند با يكديگر برابر باشند . 3
اگر ثابت هاي كاراكتري در ساختارswitch بكار گرفته شوند، آنها به مقادير "
صحيح " تبديل مي شوند . 4
اگر در يك case از دستور break استفاده نشود پس از اجراي مجموعه دستورات
مربوط بخ اين case مجموعه دستورات موجود در case بعدي نيز اجرا مي شوند . 5
دو يا چند شرط را مي توان در ساختار switch با يكديگر OR نمود كه براي
اين منظور كافي است چند case را با مقاديري كه مي خواهيم با هم OR شوند پشت سر
هم ذكر كنيم ( مثال 11 ) .

مثال 10: برنامه اي كه دو عدد و يكي از عملگرهاي چهار عمل اصلي را از ورودي
خوانده و عملگر را بر روي دو عدد عمل مي كند . main)(
{
int num1 / num2 ;
char op ;
while(1)
{
printf("type number/operator/");
printf("number \n" );
scanf("%d%c%d"/&num1/&op/&num2);
switch(op)
{
case '+':
printf("\nsum=%d"/num1+num2);
break ;
case '-':
printf("\nsubtract=%d"/num1-num2);
break ;
case '*':
printf("\nmultiple=%d"/num1*num2);
break ;
case '/':
printf("\ndivition=%d"/num1+num2);
break ;
default:
printf("\n operator is illegal");
printf("\n\n" );
}
}

به نمونه اي از خروجي حاصل از اجراي برنامه مثال 10 توجه نماييد : type number/operator/number
12 + 23
sum=35

type number/operator/number
2*26
multiple=52

type number/operator/number
4%2
operator is illegal

type number/operator/number

^c

اگر بجاي علامت *از 'x'ز و يا بجاي '/'از '\'ز استفاده گردد، اين برنامه عمل
نخواهد كرد . اما برنامه ذيل ( مثال 11 ) طوري طراحي شده است كه با استفاده از
امكان تركيب شرطهاي مختلف در ساختار switch ، به اين دو مورد نيز پاسخ دهد .

مثال 11: برنامه اي كه دو عدد و يكي از عملگرهاي چهار عمل اصلي را از ورودي
خوانده و آن عملگر را بر روي آن دو عدد عمل مي كند . main)(
{
int num1 / num2 ;
char op ;
while(1)
{
printf("type number/operator/");
printf("number \n" );
scanf("%d%c%d"/&num1/&op/&num2);
switch(op)
{
case '+':
printf("\nsum=%d"/num1+num2);
break ;
case '-':
printf("\nsubtract=%d"/num1-num2);
break ;
case '*':
case 'x':
printf("\nmultiple=%d"/num1*num2);
break ;
case '/':
case '\\':
printf("\ndivition=%d"/num1+num2);
break ;
default:
printf("\noperator is illegal");
}
printf("\n\n" );
}
}

نمونه اي از خروجي حاصل از اجراي برنامه مثال 11 : type number/operator/number
20 x 4
multiple=80

type number/operator/number
60 \ 3
division=2o

type number/operator/number
4%2
operator is illegal

type number/operator/number
12 + 23
sum=35

type number/operator/number
2*26
multiple=52

type number/operator/number

^c

مثال 12: برنامه اي كه اطلاعات تعدادي از ورودي خوانده و سپس معدل هر دانشجو
را محاسبه مي نمايد. پس از محاسبه معدل ، دانشجويان ممتاز ( معدل بيشتر از 17 )
و دانشجويان مشروط ( معدل كمتر از 12 ) را مشخص و در خروجي چاپ مي كند . main)(
{
int sumgrad/sumunit/number ;
int cours/unit/grad/aver/j/n=0 ;
char name[20] ;
printf("enter number of student:\t");
scanf("%d"/&number);
while(n!=number)
{
n++ ;
sumunit=sumgrad=j=0 ;
printf("\n enter name of student ");
printf("%d:"/n );
scanf("%s"/&name );
printf("\n enter number of cours ");
printf("of this st:.");
scanf("%d"/&cours );
while(j!=cours)
{
printf("\n enter unit of cours");
printf(" %d:"/j+1 );
scanf("%d"/&unit );
printf("\n enter grade of cours");
printf(" %d:"/j+1 );
scanf("%d"/&grad );
sumunit=sumunit+unit ;
sumgrad=sumgrad+grad*unit ;
j++ ;
}
aver=sumgrad/sumunit ;
printf("\n average is:\t" );
printf("%d"/aver );
if(aver<12)
{
printf("\n student is probation");
printf("... ");
}
else if(aver>17)
{
printf("\n student is exelent");
printf("... ");
}
}
}

به نمونه اي ازخروجي مثال 12 كه براي دو نفر ازدانشجويان عمل نموده است توجه
نماييد . enter number of students :2
enter name of student 1: ali
enter number of cours of this st:.2
enter unit of cours 1:2
enter grade of cours 1:19
enter unit of cours 2:3
enter grade of cours 2:20
aver is : 19
studnt is exelent...

enter name of student 2: reza

enter number of cours of this st:.3
enter unit of cours 1:2
enter grade of cours 1:12
enter unit of

کيفيت مقاله :
عالی خوب متوسط ضعيف


توابع و كلاسهاي حافظه ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۵۵۴ مراجعه امروز
۴۱۴۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
توابع و كلاسهاي حافظه
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۴۵۷ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.

توابع و كلاسهاي حافظه

در مورد برنامه هاي طولاني و پيچيده كه شامل چندين قسمت منطقي تقريبا" مستقلي
هستند بهتر است براي هر قسمت منطقي ، برنامه اي نوشته و سپس آنها را به يكديگر
متصل (Link) كرد . هر يك از اين قسمتها يك زير برنامه نام دارند . استفاده از
زير برنامه جهت طراحي برنامه ها ، داراي مزاياي زيادي است كه بر اهل كامپيوتر
پوشيده نيست . در زبانهاي برنامه سازي مختلف معمولا"دو نوع زيربرنامه وجود دارند
و عبارتند از : ( الف ) زير برنامه هاي تابع ( ب ) زير برنامه هاي زير روال ، در
زبان C فقط زيربرنامه تابع مورد استفاده قرار ميگيرد. كاري را كه زيربرنامه هاي
زير روال در ساير زبان هاي برنامه سازي انجام مي دهند ، در زبان C توسط زير
برنامه هاي تابع صورت مي گيرد . در اينجا منظور از زير برنامه ، توابع هستند .
توابع در زبان C داراي ساختمان خاصي هستند كه شكل (1) آن را نشان مي دهد .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
<نوع تابع > <نام تابع > ( اسامي پارامترها ) | |
تعريف پارامترها | | { |
|
بدنه تابع | | } |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (1) . ساختمان توابع

در شكل (1) منظور از نوع تابع ، يكي از انواع معتبر در زبان C است كه نوع
مقدار برگردانده شده توسط تابع را مشخص مي كند . تعيين نوع توابع ، اختياري
است . اگر تابعي تعيين نوع نگردد كامپايلر زبان C فرض مي كند مقداري كه توسط
تابع برگردانده مي شود از نوع " صحيح " است . نام تابع از قانون نامگذاري براي
متغيرهاي تبعيت مي كند . اسامي پارامترها شامل متغيرهايي است كه بايد به تابع
منتقل كردند . اگر تعداد پارامترها بيش از يكي باشد يا كاما از يكديگر جدا
مي شوند . تعريف پارامترها مجموعه دستوراتي است كه نوع پارامترها را تعيين
مي نمايد . تعيين نوع پارامترها در حين تعريف تابع نيز امكان پذير است . بدنه
تابع شامل دستورالعمل هايي است كه عمل تابع را مشخص مي كند .
نكاتي را كه بايد در مورد توابع در نظر داشت عبارتند از : 1
كليه توابع فرعي بعد از تابع اصلي (()main) تعريف مي شوند . 2
اگر نوع تابعي غيراز نوع " صحيح " باشد، نوع آن بايد در تابع فراخواننده
به كامپايلر اعلان شود . 3
براي اجراي تابع بايد آنها را فراخواني نمود ( فراخواني توابع توسط نام
آنها انجام مي شود ) . 4
همانطور كه متغيرهاي قابل استفاده در تابع اصلي بايد در ابتداي اين تابع
تعريف شوند ، متغيرهاي مورد نياز هر تابع فرعي نيز بايد در ابتداي آنها تعريف
كردند . 5
تعريف يك تابع در داخل تابع ديگر امكان پذير نيست . ولي فراخواني سطوح
مختلف توابع ، ممكن است . 6
توابع از نظر تعداد مقاديري كه به تابع فراخواننده برمي گردانند ، به سه
دسته تقسيم مي شوند .
الف ) توابعي كه هيچ مقداري را برنمي گردانند .
ب ) توابعي كه فقط يك مقدار را برمي گردانند .
ج ) توابعي كه چند مقدار را به عنوان نتيجه عمل برمي گردانند . 7
درموقع فراخواني توابع بايد دقت داشت كه تعداد و نوع آرگومانها با تعداد
ونوع پارامترها يكسان باشند. براي پي بردن به تفاوت بين آرگومانها و پارامترها
مي توانند به شكل (2) مراجعه نماييد .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|
| { |
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | |
آرگومان ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | |
< فراخواني تابع ؤؤؤؤؤؤ;(a/b)out | | |
| } |
| |
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | |
پارامتر تابع ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | |
(< تعريف تابع ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤk/i)out | | int k/i; |
| { |
| |
| printf("k=%d/i=%d"/k/i); |
| |
| } |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (2) . تفاوت آرگومان و پارامتر

در شكل (2) aو bو را كه در فراخواني تابع out آمده اند ، آرگومان تابع و I و K
را كه در تعريف تابع out آمده اند پارامتر تابع مي گوييم . همانطور كه ملاحظه وانند هم نام نباشند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


توابعي كه هيچ مقداري را برنمي گردانند ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۵۶۳ مراجعه امروز
۴۱۵۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
توابعي كه هيچ مقداري را برنمي گردانند
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۱۶۵ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

توابعي كه هيچ مقداري را برنمي گردانند

خوب است قبل از بحث در مورد اينگونه توابع ، مثالي را متذكر شويم .

مثال 1: برنامه اي كه با استفاده از يك تابع ، زماني كه شامل ساعت ، دقيقه
و ثانيه است را از ورودي خوانده و اين زمان را به ثانيه محاسبه مي نمايد : main)(
{
convert )(;
}

convert)(
{
int hours/minutes/second/time ;
printf("enter time to be convertd");
printf("\n hour/minutes/second : ");
scanf("%d%d"/&hours/&minutes);
printf("%d/&second);
time=(60*hours+minutes)*60+second ;
printf("\ntime is: %d second."/time);
}

به نمونه اي از خروجي برنامه مثال 1 توجه نماييد : enter time to be convertd
hour/minutes/secound : 4 8 30

time is: 14910 second.

در مثال 1 از تابعي به نام convert استفاده شده است كه هيچگونه پارامتري
ندارد . متغيرهاي مورد نياز اين تابع ، تعريف شده ، اطلاعات از ورودي خوانده
مي شوند و پس از انجام محاسبات به خروجي منتقل مي گردند . اين تابع هيچ مقداري
را به تابع فراخوانده ( تابع اصلي ) برنمي گرداند . به چنين توابعي توابع از
نوع void گفته مي شود . اگر بخواهيم برنامه مثال 1 را با استفاده از اين تعريف
( تابع از نوع void ) بنويسيم ، مثال (2) حاصل خواهد شد .

مثال 2: برنامه مثال 1 با استفاده از تعريف نوع void : main)(
{
void convert )(;
convert )(;
}

void convert)(
{
int hours/minutes/second/time ;
printf("enter time to be convertd");
printf("\n hour/minutes/second : ");
scanf("%d%d"/&hours/&minutes);
printf("%d/&second);
time=(60*hours+minutes)*60+second ;
printf("\ntime is: %d second."/time);
}

همانطوريكه در مثال 2 مشاهده ميشود بايد درتابع فراخواننده ( در اينجا تابع
اصلي ) نوع تابع convert را كه از نوع void است به كامپايلر اعلان نمود وسپس در
حين تعريف تابع نوع آن مشخص گردد (()void convert) .
در توابعي مانند convert كه هيچگونه پارامتري ندارند ، براي جلوگيري از
هر گونه اشتباه احتمالي در فراخواني اينگونه توابع ( كه ممكن است اشتباها" با
پارامتر فراخواني گردند ) مي توان بجاي پارامتر و آرگومان از كلمه كليدي void
استفاده نمود. با توجه به اين نكته كه اگر اشتباها" توابع فاقد هرگونه پارامتر
( و آرگومان ) با پارامتر فراخواني گردند . كامپايلر C خطايي را اعلام نمي كند.
در اين حالت ذكر كلمه كليدي void بجاي پارامتر و آرگومان تابع مفيد بنظر ميرسد
( مثال 3 ) .

مثال 3: main)(
{
void convert(void );
convert )(;
}

void convert(void)
{
int hours/minutes/second/time ;
printf("enter time to be convertd");
printf("\n hour/minutes/second : ");
scanf("%d%d"/&hours/&minutes);
printf("%d/&second);
time=(60*hours+minutes)*60+second ;
printf("\ntime is: %d second."/ti

کيفيت مقاله :
عالی خوب متوسط ضعيف


انواع فراخواني و مقاديري كه توابع برمي گردانند ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۵۶۶ مراجعه امروز
۴۱۵۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انواع فراخواني و مقاديري كه توابع برمي گردانند
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۱۱۸ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

انواع فراخواني و مقاديري كه توابع برمي گردانند

همانطوريكه قبلا" گفتيم ، توابع از نظر تعداد مقاديري كه به تابع فراخواننده
برمي گردانند به سه دسته تقسيم مي شوند كه يك دسته از آنها ( توابعي كه هيچ
مقداري را برنمي گردانند ) را مورد بررسي قرار داده ايم .
توابع در زبان C به دو روش فراخواني مي شوند كه عبارتند از : 1
فراخواني توسط ارزش (Call by value). دراين روش مقدار آرگومان تابع ، در
پارامتر متناظر با آن كپي مي شود . لذا هرگونه تغييري در پارامترها هيچگونه
تاثيري در مقدار آرگومان ها نخواهد داشت . بنابراين در روش فراخواني توسط ارزش
هيچ مقداري توسط پارامترها وآرگومانها به تابع فراخواننده ، برگردانده نميشوند.
ولي مي توان فقط يك مقدار را با استفاده از دستور return به تابع فراخواننده
برگرداند . مقداري كه توسط اين دستور به تابع فراخواننده برگردانده مي شود، در
نام تابع فراخوانده شده قرار ميگيرد. دستور return به دو صورت زير بكار ميرود: return( 1)

(َ2) (مقدار) return
دستور return در حالت (1) صرفا" خاتمه اجراي تابع را مشخص مي كند و هيچگونه
مقداري را به تابع فراخواننده برنمي گرداند. در حالت (2) ضمن اعلام خاتمه اجراي
تابع ، مقداري را نيز به تابع فراخواننده برمي گرداند ( مثال 1 ) .

مثال 1: main)(
{
int t=10 ;
printf("\n t=%d/square is:"/t);
printf("%d"/aqr(t ));
}
eqr(int x)
{
int y ;
y=x*x;
return(y );
}

خروجي حاصل از اجراي برنامه مثال 1 به صورت زير است : t=10/aqurare is:100

در مثال 1 تابع sqr براي انجام عمل توان نوشته شده است كه پارامتر آن x بوده
و از نوع "صحيح " است ( به چگونگي تعريف نوع پارامتر دقت شود ). پس از فراخواني
تابع sqr مقدار آرگومان t (10) در پارامتر x كپي مي شود و از اين لحظه به بعد
هيچ كاري با t نيست . در اين تابع ، نتيجه عمل در متغير y قرار مي گيرد و سپس
توسط دستور return مقدار متغير y به تابع فراخواننده برگردانده مي شود . اين
مقدار در نام تابع ((t)sqr) قرار مي گيرد .
2
فراخواني توسط ارجاع (Call by reference) . در اين روش ، آدرس آرگومان
در پارامتر كپي مي شود . لذا در داخل تابع فراخوانده شده ، آدرس آرگومان براي
دسترسي به آرگومان مورداستفاده قرار ميگيرد و اين بدان معني است كه درفراخواني
توسط ارجاع ، پارامترها حاوي آدرس هاي آرگومان ها هستند. لذا در فراخواني توسط
ارجاع بايد آدرس آرگومان بجاي مقدار آرگومان به تابع فراخواننده منتقل گردد .
بحث بيشتر در اين مورد را به مطالعه اشاره گرها (pointer) موكول مي كنيم .

مثال 2: برنامه اي كه كاراكترهايي را از ورودي خوانده و تشخيص مي دهد آيا
كاراكتر وارد شده a، b، و يا غير از اين دو حرف بوده است . ضمنا" اين برنامه
قبل از انجام عمل مقايسه ، با استفاده از يك تابع كاراكترهاي خوانده شده را به
حروف كوچك تبديل مي كند ( كد اسكي حروف بزرگ درباره 65 و 91 است كه اگر به اين
بازه 32 واحد اضافه شود كد اسكي حروف كوچك حاصل خواهد شد ) . main)(
{
char ch ;
printf("\n type a character: " );
ch=getcha )(;
switch(ch)
{
case 'a':
printf("\n you typed the");
printf(" character 'a'" );
break ;
case 'b':
printf("\n you typed the");
printf(" character 'b'" );
break ;
default:
printf("\n you typed no 'a'");
printf(" and no 'b'" );
}
}

getcha)(
{
char cl ;
cl=getch )(;
if(cl>64 && cl<91)
cl+=32 ;
return(cl );
}

نمونه اي از خروجي حاصل از اجراي برنامه مثال 2 : type a character: s
you typed no 'a' and no 'b'

تعريف توابع در داخل يكديگر امكان پذيرنيست ، اما فراخواني سطوح مختلف تابع
ممكن است . اين مطلب در مثال 3 مشاهده مي شود .

مثال 3: برنامه اي كه با استفاده از چند تابع ، دو عدد را از ورودي خوانده و
با محاسبه مجموع مربعات آن دو ، آنها را به خروجي منتقل مي كند . main)(
{
int num1/num2 ;
printf("\n type two number:" );
scanf(%d%d"/&num1/&num2 );
printf("\nsum of square is:");
printf("%d/sumsqr(num1/num2));
}

sumsqr(j/k)
int j /k ;
{
return(sum(sqr(j)/sqr(k )));
}
sqr(z)
int z ;
{
return(z*z);
}

sum(x/y)
int x/y ;
{
return(x+y);
}

نمونه اي از خروجي حاصل از اجراي برنامه مثال 3 : type two number : 12 9
sum of square is:225

در مثال 3از 3ز تابع به نامهاي sumsqr، sqr،و sumو استفاده شده است . وظيفه
تابع sumsqr محاسبه مجموع مربعات دو عدد num1و num2و است كه براي اين كار ، دو
تابع sumو sqrو را فراخواني مي كند . تابع sqr در دو بار فراخواني ، مربع دو
عدد num1و num2و را محاسبه كرده و تحويل تابع sum مي دهد . اين تابع مجموع دو
پارامتر خود را كه همان مربعات دو عدد num1و num2و هستند ، محاسبه مي كند و به گرداند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


تعيين نوع تابع ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۵۶۹ مراجعه امروز
۴۱۶۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تعيين نوع تابع
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۰۲۷ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

تعيين نوع تابع

همانطور كه قبلا" گفته شد اگر در حين تعريف تابع از ذكر نوع آن خودداري شود
كامپايلر فرض مي كند مقداري كه توسط اين تابع برگردانده مي شود ( توسط دستور return
) يك مقدار " صحيح " است . به اينگونه توابع ، توابع نوع صحيح گفته
مي شود . اگر بخواهيم توابعي غير از نوع " صحيح " داشته باشيم بايد: الف ) نوع
تابع ار در تابع فراخواننده به كامپايلر اعلان كنيم . ب ) نوع تابع را در حين
تعريف تابع مشخص كنيم ( مثال ) .

مثال : برنامه اي كه شعاع دايره اي را از ورودي خوانده و با محاسبه مساحت آن
را به خروجي مي برد . main)(
{
float area(float );
float radius ;
printf("\n entera radius : " );
scanf("%f"/&radius );
printf("area of circle is:");
printf("%.2f"/area(radius ));
}
float area(float rad)
{
return(3.13*rad*rad );
}

به نمونه اي از خروجي برنامه مثال توجه نماييد : enter radius: 4
area of circle is: 50.08

همانطوري كه در مثال بالا مشاهده مي گردد ، مقداري كه توسط تابع ()area
برگردانده ميشود از نوع اعشاري است ، لذا در اولين دستور تابع ()main نوع تابع
()area را به كامپايلر اعلان كرده و در حين تعريف اين تابع ، نوع آن را نيز مشخص
نموده ايم . در بسياري از گونه هاي زبان C ذكر نوع نتيجه تابع ، در آرگومان آن
الزامي نيست و درمثال بالا اولين دستور تابع ()main را نيز مي توان به صورت زير
نوشت . f

کيفيت مقاله :
عالی خوب متوسط ضعيف


كلاسهاي حافظه ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۵۷۲ مراجعه امروز
۴۱۶۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كلاسهاي حافظه
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۱۶۸ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

كلاسهاي حافظه

تاكنون برنامه هايي را نوشته ايم كه در بعضي از آنها از چند تابع نيز استفاده
شده است . در اين برنامه ها متغيرهاي مورد نياز هر تابع را در همان تابع تعريف
كرده ايم . متغيرهايي كه در يك تابع تعريف مي شوند در موقع انتقال كنترل اجراي
برنامه به آن تابع ايجاد شده ( حافظه به آنها تخصيص داده مي شود ) و در موقع
برگشت كنترل اجراي برنامه از آن تابع ، حافظه تخصيص يافته به متغيرهاي آن تابع
از آنها اخذ ميشود و به سيستم عامل برگردانده خواهد شد. يعني اين گونه متغيرها
فقط در همان تابعي كه تعريف يم شوند اعتبار دارند و در تابع ديگر قابل استفاده
نيستند . اين مساله حتي در مورد متغيرهاي همنام نيز صادق است . بدين معني كه
اگر به عنوان مثال متغيري به نام I در تابع اصلي (()main) وجود داشته باشد و
متغيري تحت همين نام در تابع فرعي ديگري كه توسط تابع ()main فراخواني مي شود
تعريف گردد اين دو متغير كاملا" از يكديگر مجزا خواهند بود و در حافظه ، دو محل
جداگانه براي آنها در نظر گرفته مي شود و هرگونه تغيير در يكي از آنها ، در
ديگري تاثيري نخواهد داشت .

مثال 1: برنامه اي كه چگونگي استفاده از متغيرهاي همنام را در توابع مختلف
نشان مي دهد . main)(
{
int i ;
printf("enter the value of i:" );
scanf("%d"/&i );
input )(;
printf("\nvalue of i in main is:");
print("%d"/i );
}

input)(
{
int i ;
printf("enter value of i");
printf("(in function:)");
scanf("%d"/&i );
printf("\nvalue of i in function is:");
printf("%d"/i);
}

به نمونه اي از خروجي حاصل از اجراي برنامه مثال 1 كه درپاسخ به اولين دستور scanf
عدد 10 و در پاسخ به دومين دستورscanf عدد 40 وارد شده است توجه نماييد: enter the value of i:10
enter vale of i(in function:)40
vale of i in function is: 40
value of i in main is : 10

با مطالبي كه تاكنون گفته شد روشن گرديد كه متغيرهايي كه در يك تابع تعريف
ميشوند فقط درهمان تابع قابل استفاده هستند و به محض برگشت كنترل اجراي برنامه
از آن تابع ، اين متغيرها عملا" وجود ندارند. به چنين متغيرهايي كه محدوده حضور
آنها فقط در تابعي است كه در آن تابع تعريف شده اند متغيرهاي محلي گفته مي شود.
همه متغيرها در زبان C داراي چنين خصيصه اي نيستند. بلكه انواع ديگري ازمتغيرها
نيز وجود دارند كه براي معرفي آنها لازم است به تشريح كلاس حافظه بپردازيم .
كلاس حافظه هر متغير دو چيز را براي آن متغير مشخص مي كند : 1
مدت حضور آن در برنامه يا طول عمر (life time) متغير . 2
محدوده حضور آن در برنامه (scope vvisibility) .
يكي از علل مطالعه كلاس هاي حافظه اين است كه با داشتن اطلاعاتي در مورد مدت
حضور متغيرها در برنامه و همچنين محدوده حضور آنها ، مي توانيم برنامه هايي
بنويسيم كه : 1
از حافظه كامپيوتر به نحو خوبي استفاده گردد . 2
سرعت اجراي آنها بالا باشد . 3
برنامه ها كمتر با خطا مواجه شوند و عيب يابي سهل تر گردد .

كلاس هاي حافظه اي كه در زبان C از آنها استفاده مي شود عبارتند از :
1
كلاس حافظه اتوماتيك (automatic) . 2
كلاس حافظه استاتيك (static) . 3
كلاس حافظه ثبات (register) . 4
كلاس حافظه خارجي (extern) .
كلمات كليدي auto، static،، register،و externو بترتيب مشخص كننده كلاس هاي
حافظه اتوماتيك ، استاتيك ، ثبات و خارجي هستند. اين كلمات قبل از كلمات كليدي
تعيين نوع متغير بكار مي روند .
شكل كلي تعيين كلاس هاي حافظه بصورت زير است : ;
<كلاس حافظه > <نوع متغير> <اسامي متغيرها>
بعنوان مثال دستور auto int i/y ; متغيرهاي iو yو را از نوع " صحيح " و با
كلاس حافظه اتوماتيك تعريف مي نمايد .

كلاس حافظه اتوماتيك
متغيرهايي با كلاس حافظه اتوماتيك ، بيشتر ازساير انواع متغيرها مورداستفاده
قرار مي گيرند . متغيرهايي كه تاكنون در برنامه ها استفاده شده اند ، داراي كلاس
حافظه اتوماتيك بوده اند. يعني در زبان C متغيرها در حالت عادي داراي كلاس حافظه
اتوماتيك هستند . متغيرهاي با كلاس حافظه اتوماتيك داراي خصوصيات زير مي باشند: 1
وقتي در يك تابع و يا يك بلاك تعريف مي شوند فقط درآن تابع و يا بلاك قابل
دسترسي اند ( " محلي " آن تابع و يا بلاك محسوب مي شوند ) . 2
در موقع ورود به تابع و يا بلاك به آنها حافظه اختصاص مي يابد . 3
در هنگام خروج از تابع و يا بلاك ، حافظه اختصاص يافته به آنها، پس گرفته
مي شود .

مثال 2: برنامه اي كه تعريف متغيرهاي اتوماتيك در بلاك را نشان مي دهد . main)(
{
int sum=10 ;
{
float sum=3.1416;
printf("\n sum in block is:");
printf(%6.4f\n"/sum );
}
printf("\n sum out of block is:");
printf("%2d\n/sum );
}

نمونه اي از خروجي حاصل از اجراي برنامه مثال 2 در ذيل آمده است : sum in block is:3.1416
sum out of block is:10

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

مثال 3: استفاده از متغيرهاي با كلاس حافظه اتوماتيك كه داراي ارزش اوليه
مي باشند . main)(
{
auto int k ;
void aquare )(;
for(k=1;k<5;k++)
aquare(k);
}

void square(d)
int d;
{
int squared=d^d ;
printf("\n%2d squared is" );
printf(" %3d\n"/d/squared);
}

خروجي حاصل از اجراي برنامه مثال 3 : 1 squared is 1
2 squared is 4
3 squared is 9
4 squared is 16

متغيرهاي عمومي و كلاس حافظه خارجي
همانطور كه قبلا" گفته شد متغيرهاي تعريف شده در يك تابع و يا يك بلاك فقط در
همان تابع و يا بلاك اعتبار دارند . اينگونه متغيرها را متغيرهاي محلي نامگذاري
كرديم . نوع ديگري از متغيرها در زبان C قابل استفاده هستند كه در كليه توابع
موجود در برنامه قابل دسترسي اند. به اين متغيرها، متغيرهاي عمومي گفته ميشود.
متغيرهاي عمومي در خارج از تابع اصلي تعريف مي شوند .

مثال 4: برنامه اي كه نحوه استفاده از متغيرهاي عمومي را نشان مي دهد . اين
برنامه تعداد 5 عدد رااز ورودي خوانده و مجموع مربعات آنهارا محاسبه مي نمايد. int k/sq ;
int sum=0 ;
main)(
{
auto j/i=5 ;
printf("\n enter five number:" );
for(j=0 ;j input )(;
printf("\n sum of square is:%d"/sum);
}

input)(
{
scanf("%d"/&k );
square )(;
sum+=sq ;
}

square)(
{
sq=k*k ;
}

نمونه اي از خروجي حاصل از اجراي برنامه مثال 4 : enter five number: 10 12 4 7 20
sum of square is:709

در مثال 4 متغيرهاي sq، k،و sumو در خارج از تابع ()main تعريف شده اند و در
توابع ()square و ()input بدون تعريف اين متغيرها از آنها استفاده شده است .
اگر توابع تعريف شده در يك برنامه علاوه بر متغيرهاي عمومي از متغيرهاي محلي
نيز استفاده نمايند و يك يا چند متغير محلي توابع ، با يك يا چند متغير عمومي
مراجعه داشته باشد ( مقدار آنرا تغيير دهد و يا مقدار آن متغير را مورداستفاده
قرار دهد ) تاثيري در متغير عمومي همنام با اين متغير محلي نخواهد داشت .

مثال 5: برنامه اي كه توابع موجود در آن علاوه بر استفاده از متغيرهاي عمومي
از متغيرهاي محلي همنام با متغيرهاي عمومي نيز استفاده مي كنند . int count ;
main)(
{
count=100 ;
func1 )(;
}

func1)(
{
int temp ;
temp=count ;
func2 )(;
printf("\n count is:%d"/count );
}

func2)(
{
int count ;
for(count=1/count<6;count++)
printf(" %c "/'*'
}

خروجي حاصل از اجراي برنامه مثال 5 : * * * * *
count is :100

در مثال 5 متغير count كه قبل از تابع ()main تعريف شد، يك متغير عمومي است
و متغير count كه در تابع ()func1 بكار رفته است ، همين متغير ميباشد. در تابع
()func2 متغيري به نام count تعريف شد كه محلي اين تابع مي باشد . لذا در اين
تابع هر مراجعه به متغير count مراجعه به متغيري است كه در اين تابع تعريف شده
است .
درشروع اجراي برنامه براي متغيرهاي عمومي ، حافظه اختصاص مي يابد و درپايان
اجراي برنامه ، اين حافظه از متغيرها اخذ مي گردد. بنابراين اگر تعداد متغيرهاي
عمومي زياد باشد تاثير بسزايي در ميزان حافظه مصرفي دارد . بهر حال در مواقعي
كه توابع موجود در برنامه به متغيرهاي مشتركي نياز داشته باشند ، خوب است از
متغيرهاي عمومي استفاده گردد. ولي بايد توجه داشت متغيرهايي كه بندرت در سراسر
برنامه مورد استفاده قرار مي گيرند ، بصورت متغيرهاي عمومي تعريف نگردند .
اگر برنامه هايي كه به زبان C نوشته مي شود طولاني باشد ، مي توان آن برنامه
را به قسمت هاي منطقي كوچكتري تقسيم كرده ، سپس هر قسمت را در يك فايل قرار
داده و پس از كامپايل كردن آنها به طور مجزا ، همه قسمت ها را با يكديگر اجرا
نمود . به هر يك از اين قسمت هاي مجزا ، يك واحد (unit) گفته مي شود . اگر
متغيرهايي در واحد اصلي تعريف شوند و بخواهيم از آنها در واحدهاي فرعي ديگر
استفاده كنيم ( بدون اين كه در واحدهاي فرعي به آنها حافظه اي اختصاص يابد )
بايد در واحدهاي فرعي توسط كلمه كليدي extern به كامپايلر گفته شود كه اين
متغيرها در جاي ديگري ( در واحد اصلي ) تعريف شده اند. در غير اين صورت استفاده
از متغيرهاي مورد نظر در واحدهاي ديگر ممكن نيست ( جدول 1 ) .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | file1 file2 |
| int s/y; extern int x/ y; |
| char ch; extern char ch; |
| main )(func 22 )(|
| { { |
| x=y/10; |
| } } |
| func 1 )(func 23 )(|
| { { |
| x=123; y=10; |
| } } |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
جدول (1) . كاربرد extern در واحدهاي مختلف يك برنامه

در جدول 1 كلمه كليدي extern به كامپايلر مي گويد كه متغيرهاي x، y،و chو
قبلا" در جاي ديگري تعريف شده اند ، لذا در برنامه file2 حافظه جديدي به آنها
اختصاص نمي يابد .
استفاده از كلمه كليدي extern درتوابع موجود در يك فايل نيز امكان پذير است
كه البته نيازي به آن نيست ( كاربرد extern در اين گونه موارد اختياري است ) .

مثال 6: برنامه اي كه كاربرد كلمه كليدي extern را در يك فايل نشان مي دهد . int first/second ;
main)(
{
extern int first/second ;
printf("\n enter two number: " );
scanf("%d%d"/&first/&second );
printf("\nsum is :%d"/first+second);
}

به نمونه اي از خروجي برنامه مثال 6 توجه نماييد : enter two number: 15 30
sum is:45

در برنامه مثال 6 دو متغير firstو secondو در خارج از تابع ()main تعريف
شده اند . دستور extern در تابع ()main به كامپايلر مي گويد كه اين متغيرها در
جاي ديگري ( در خارج از تابع اصلي ) تعريف شده اند . البته همانطور كه گفته شد
توابعي كه در يك فايل وجود دارند مي توانند از متغيرهاي عمومي استفاده كنند و
نياز به معرفي آنها توسط extern نيست .
متغيرهاي عمومي ، داراي كلاس حافظه خارجي (extern) هستند و داراي دو خصيصه
زير مي باشند : 1
طول عمر اين متغيرها ، از بدو اجراي برنامه تا خاتمه اجراي آن است . 2
محدوده حضور آنها در سراسر يك برنامه است .

كلاس حافظه استاتيك
متغيرهايي كه داراي كلاس حافظه استاتيك هستند مي توانند به دو دسته تقسيم
شوند :
الف ) متغيرهاي استاتيك محلي
ب ) متغيرهاي استاتيك عمومي

متغيرهاي استاتيك محلي داراي خواص زير هستند : 1
فقط در همان تابعي كه تعريف شده اند قابل دسترسي اند ( حضور دارند ) . 2
در هنگام خروج از تابع ، مقادير متغيرها آخرين مقداري خواهد بود كه در
تابع به آنها اختصاص يافته است . 3
مي توانند مقدار اوليه بگيرند . 4
اگر متغير استاتيك محلي مقدار اوليه بگيرد ، اين ارزش دهي اوليه ، فقط
يكبار صورت مي گيرد ( اين مطلب را از مورد 2 نيز مي توان نتيجه گرفت ) .

مثال 7: main)(
{
int i ;
void subroutine )(;
for(i=0 ; i<5 ; i++)
subroutine )(;
}

void subroutine)(
{
static int static_var=0 ;
int auto_var=0 ;
printf("\nautomatic=%d/"/auto_var);
printf("static=%d"'static_var );
auto_var ++;
static_var ++ ;
}

خروجي حاصل از اجراي برنامه مثال 7 : automatic=0/static=0
automatic=0/static=1
automatic=0/static=2
automatic=0/static=3
automatic=0/static=4

متغيرهاي استاتيك عمومي فقط در يك فايل ( در يك واحد ) از برنامه ، از جايي
كه تعريف مي شوند به بعد قابل دسترسي اند ( برخلاف متغيرهاي عمومي غير استاتيك
كه در همه واحدهاي يك برنامه قابل دسترسي اند ) . مثال هاي 8و 9و .

مثال 8: static int i/j ;
main)(
{
.
.
.
}

f1)(
{
.
.
.
}

f2)(
{
.
.
.
}

در مثال 8 متغيرهاي xو yو در تابع ()main و كليه توابعي كه بعد از آن تعريف
مي شوند قابل استفاده اند .

مثال 9: main)(
{
.
.
.
}

f1)(
{
.
.
.
}

static x/y ;
f2)(
{
.
.
.
}

f3)(
{
.
.
.
}

در مثال 9 ، متغيرهاي xو yو در توابع ()main و ()f1 قابل دسترسي نيستند ولي
در دو تابع ()f2 و ()f3 و كليه توابعي كه بعداز آن تعريف ميشوند، قابل استفاده
هستند .
استفاده كلاس حافظه استاتيك درپنهان سازي اطلاعات (information hide) ميباشد.

كلاس حافظه ثبات
ذخيره هايي كه داراي كلاس حافظه هستند در صورت امكان در يكي از ثبات هاي CPU
قرار مي گيرند . لذا سرعت انجام عمليات با آنها بسيار بالا است و موجب افزايش
سرعت اجراي برنامه مي شود . كليه متغيرهاي اتوماتيك و آرگومان هاي توابع
مي توانند داراي كلاس حافظه ثبات باشند .
در مورد كلاس حافظه ثبات محدوديتهاي زير را داريم : 1
از آنجايي كه تعداد ثباتهاي CPU محدود است ، تعداد كمي از متغيرها را
مي توان با كلاس حافظه ثبات تعريف كرد . اگر تعداد متغيرهاي با كلاس حافظه ثبات
زياد باشد كامپايلر كلاس حافظه ثبات را از متغيرها حذف مي كند . 2
انواع متغيرهايي كه ميتوانند داراي كلاس حافظه ثبات باشند، دركامپيوترهاي
مختلف متفاوت است و معمولا" نوع هاي int، char،و pointerو مي توانند داراي كلاس
حافظه ثبات باشند . 3
آدرس متغيري كه داراي كلاس حافظه ثبات باشد، عملا" مفهوم نخواهد داشت و يا
به عبارت ديگر، عملگر & را نميتوان براي متغيرهاي با كلاس حافظه ثبات بكار گرفت
( چون اين متغيرها در ثبات CPU قرار دارند ) .

مثال 10: int n/fact=1 ;
main)(
{
printf("\n enter a number(1-9: )");
scanf("%d/&n );
factolial )(;
printf("\nfactolial of number:%d"/n);
printf(" is :%d"/fact );
}

factorial)(
{
register int i ;
for(i=2 ; i<=n ; i++)
fact *=i ;
}
.

کيفيت مقاله :
عالی خوب متوسط ضعيف


آرايه ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۵۷۵ مراجعه امروز
۴۱۶۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آرايه ها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۲۵۷ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

آرايه ها

آرايه ، اسمي براي چند متغير همنوع است و يا بعبارت ديگر مجموعه اي است از
چند كميت كه داراي يك اسم باشند . به هر يك از اين كميت ها يك عنصر آرايه گفته
مي شود . دسترسي به هر يك از عناصر آرايه توسط نام آرايه و محل قرار گرفتن اين
عنصر در آرايه مشخص مي شود . نامگذاري براي آرايه ها از قانون نامگذاري براي
متغيرها تبعيت مي كند. بعنوان مثال ك مجموعه اي از دانشجويان يك كلاس مي توانند
تشكيل يك آرايه بدهند . اگر نام اين آرايه را Y انتخاب كنيم ، آنگاه (1)Y اولين
عنصر آرايه ، (2)Y دومين عنصر آرايه و بالاخره (n)Y، n امين عنصر آرايه را مشخص
مي كند . به هر يك از اعداد 1، 2، و ... و n كه محل قرار گرفتن يك عنصر را در
آرايه مشخص مي كنند ، انديس آرايه گفته مي شود . انديس آرايه ارتباط بين عناصر
آرايه را مشخص مي كند مثلا"(َ2)Y در آرايه قبل از (3)Y و بعد از (1)Y قرار دارد.
چون دسترسي به عناصر آرايه از طريق انديس امكان پذير است ، آرايه را متغير
انديس دار نيز مي گويند .
آرايه هاي داراي يك انديس را آرايه هاي يك بعدي ، آرايه هاي داراي دو انديس را
آرايه هاي دو بعدي و به طور كلي آرايه هاي داراي n انديس را آرايه هاي n بعدي
مي گويند .
آرايه ها و رشته ها دو قسمت مجزا نيستند زيرا : " رشته آرايه اي از كاراكترها
است " .

آرايه هاي يك بعدي
آرايه يك بعدي كه نام ديگر آن ليست است ، بصورت زير تعريف مي شود : ]
طول آرايه [ <نوع آرايه > <اسم آرايه >
نوع ، يكي از نوع هاي معتبر در زبان C مثل intو floatو است كه مشخص مي كند
هر يك از عناصر آرايه از چه نوعي هستند . طول آرايه ، عددي صحيح است كه تعداد
عناصر آرايه را مشخص مي كند . با استفاده از طول آرايه و نوع آن مي توان مشخص
كرد كه آرايه چند بايت از حافظه را اشغال مي كند :
طول آرايه * ( نوع آرايه ) = sizeof مقدار حافظه مورد نياز آرايه
انديس آرايه ها در زبان C از صفر شروع مي شود . بعنوان مثال اگر آرايه اي به
طول 5 داشته باشيم ، اولين متغير آن داراي انديس صفر و آخرين عنصر داراي انديس 4
خواهد بود .

مثال 1: int temp [5];

دستور فوق آرايه اي بنام temp و به طول 5 را تعريف ميكند كه همه عناصر آن از
نوع int هستند . شكل 1 نشان مي دهد كه چگونه مي توان به هر يك از عناصر آرايه temp
دسترسي پيدا كرد .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ temp | | | | | |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ temp [0] temp [1] temp [2] temp [3] temp [4]

شكل (1) . نحوه دسترسي به عناصر آرايه

نكته اي كه در مورد آرايه ها در زبان C بايد توجه داشت اين است كه در آن bounds checking
وجود ندارد. بعنوان مثال ، اگر آرايه اي بنام x و به طول 10 را
تعريف كرده باشيم ( با توجه به اين كه بزرگترين انديس آن 9 است ) ، مي توانيم
اين آرايه را با انديس هاي بزرگتر از 9 ( بدون اينكه از طرف كامپايلر C جلوي
آن گرفته شود ) مورد استفاده قرار دهيم . در اين مورد دستوراتي مثل y = x[10]
و k = x[n] ازنظر كامپايلر با اشكالي مواجه نخواهد شد. ولي بديهي است كه نتيجه
مطلوبي حاصل نخواهد شد. لذا برنامه نويس بايد مطلب فوق را در نظر داشته باشد تا
در نتيجه اجراي برنامه اشكالي پيش نيايد .

مثال 2: برنامه اي كه با تعريف يك آرايه به طول 10 ، مقدار هر عنصر آن را
برابر با انديس آن قرار داده و سپس با محاسبه مجموع مربعات عناصر آرايه ، آنها
را در خروجي چاپ مي كند . main)(
{
float list[20]/max ;
int i / j ;
for(i=0 ; i<20/i++)
{
printf("\n enter moadel %d :"/i+1);
scanf("%f"/&list[i] );
}
max=list[0] ;
j=1 ;
for(i=1 ;i<20 ; i++)
{
if(list[i]>max)
{
max=list[i] ;
j=i+1 ;
}
}
printf("\nmax=%f/position=%d"/max/j);
}

خروجي حاصل از برنامه مثال 2 : enter moadel 1 :12
enter moadel 2 :12.5
enter moadel 3 :10.75
enter moadel 4 :14
enter moadel 5 :13
enter moadel 6 :16
enter moadel 7 :17.25
enter moadel 8 :18.5
enter moadel 9 :17.5
enter moadel 10 :18.25
enter moadel 11 :19.5
enter moadel 12 :15.75
enter moadel 13 :16.25
enter moadel 14 :17.5
enter moadel 15 :18.5
enter moadel 16 :19.25
enter moadel 17 :20
enter moadel 18 :11.5
enter moadel 19 :10.5
enter moadel 20 :10.75

max=20.000000/position=17

مثال 3: برنامه اي كه با خواندن تعدادي عدد از ورودي ، آنها را در آرايه اي
قرار مي دهد . سپس اين آرايه را به طريق حبابي (bubble sort) مرتب مي كند . main)(
{
counst int k=7 ;
int temp[7]/i/j/item ;
for(i=0 ; i {
printf("\n enter number %d:"/i+1);
scanf("%d"/&temp[i] );
}
printf("\n\t\t the intitial");
printf(" data are: " );
printf("\n\n\t\t" );
for(i=0 ;i printf(" %3d"/temp[i] );
for(i=k-1 ;i>0;i)--
for(j=0;j if(temp[j]>temp[j+1])
{
item=temp[j] ;
temp[j]=temp[j+1];
temp[j+1]=item ;
}

printf("\n\t\t the sorted data");
printf(" are: " );
printf("\n\n\t\t" );
for(i=0 ;i printf(" %3d"/temp[i] );
}

نمونه اي از خروجي برنامه مثال 3 : enter number 1:10
enter number 2:1
enter number 3:20
enter number 4:6
enter number 5:45
enter number 6:34
enter number 7:47
the initial data are:
10 1 20 6 45 34 47
the sorted data are:
1 6 10 20 34 45 47

مثال 4: برنامه اي كه با خواندن تعدادي عدد از ورودي آنها را در يك آرايه
قرار داده ، سپس كليه عناصر آرايه را بر عنصر وسط تقسيم مي كند . اگر عنصر وسط
صفر باشد ، بر عنصر بعد از عنصر وسط و اگر اين عنصر نيز صفر باشد بر عنصر قبل
از عنصر وسط تقسيم مي كند . اگر اين عناصر صفر باشند براي پيدا كردن عنصري غير
صفر و انجام عمل تقسيم به ترتيبي كه در بالا گفته شد عمل مي كند و اگر چنانچه
كليه عناصر آرايه برابر با صفر باشند پيام مناسبي صادر مي شود ( تعداد عناصر
آرايه فرد است ) . main)(
{
int i/j/m/k/sign/y ;
const int n=9 ;
int list[9] ;
printf("\nenter 9 number and press");
printf(" enter\n");
for(i=0;i scanf("%d"/&list[i] );
m=(n+1)/2-1 ;
k=list[m] ;
if(k==0)
{
j=1 ;
sign=1 ;
while(j {
y=0 ;
while(y<2)
{
k=list[m+j*sign] ;
sign=-sign ;
if(k==0)
y++ ;
else
{
action(list/k/n );
break ;
}
}
j++ ;
}
printf("\nall elemens are zero.");
}
else
action(list/k/n );
}

action(int arr[]/int gol/int length)
{
int i ;
printf("\n\t\t the intitial list:");
printf("\n\n\t\t" );
for(i=0 ; i printf(" %3d"/arr[i] );
for(i=0 ; i arr[i]=arr[i]/gol ;
printf("\n\t\t the final list: ");
printf("\n\n\t\t" );
for(i=0 ; i printf(" %3d"/arr[i] );
}

دو نمونه از خروجي برنامه مثال 4 :
( الف ) enter 9 number and press enter.
10 12 14 16 2 18 20 22 24
the initial list:
10 12 14 16 2 18 20 22 24
the final list:
5 6 7 8 1 9 10 11 12

( ب ) enter 9 number and press enter.

0 0 0 0 0 0 0 0 0
all elements are zero.

آرايه هاي چند بعدي
تاكنون نحوه تعريف و استفاده از آرايه هاي يك بعدي را مورد بررسي قرار
داده ايم . اكنون مي خواهيم ببينيم كه " چگونه مي توان آرايه بيش از يك بعدي را
تعريف كرده و به عناصر آن دسترسي پيدا كرد " . در تعريف آرايه دو بعدي بايد 2
انديس و در تعريف آرايه سه بعدي بايد 3 انديس و در تعريف آرايه n بعدي بايد n
انديس را ذكر كرد . بعنوان مثال ، دستور : int table [10] [10];

يك آرايه دو بعدي بنام table را تعريف ميكند كه داراي 10 سطر و 10 ستون است
و نوع عناصر آن int است . دستور : int k[5] [10] [15];

آرايه اي سه بعدي بنام k را تعريف مي كند كه داراي 5 سطر ، 10 ستون و 15
ارتفاع است و نوع عناصر آن int مي باشد .
به دو نكته در مورد آرايه توجه كنيد : 1
عناصر آرايه در محل هاي متوالي حافظه ذخيره مي شوند . 2
عناصر آرايه به صورت سطر ذخيره مي شوند . بعنوان مثال اگر آرايه اي بصورت [4]
table [3] داشته باشيم مشابه شكل (2) در حافظه ذخيره مي شوند .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | table [0] [0] |
| table [0] [0] |
| table [0] [1] |
| table [0] [2] |
| table [0] [3] |
| table [1] [0] |
| table [1] [1] |
| table [1] [2] |
| table [1] [3] |
| table [2] [0] |
| table [2] [1] |
| table [2] [2] |
| table [2] [3] |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (2) . نحوه ذخيره شدن آرايه در حافظه

مثال 5: برنامه اي كه با محاسبه جدول ضرب اعداد 1 تا 10، ضمن قرار دادن آنها
در يك آرايه به خروجي نيز منتقل مي كند . main)(
{
int table[10] [10] ;
int i / j ;
for(i=0;i<10 ; i++)
for(i=0;i<10;i++)
table[i][j]=(i+1)*(j+1 );
for(i=0;i<10;i++)
{
for(i=0;i<10;i++)
printf("%4d"/table[i] [j] );
printf("\n" );
}
}

خروجي حاصل از مثال 5 : 1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100

مثال 6: برنامه اي كه دو ماتريس را از ورودي خوانده و با حاصل ضرب آنها ، به
خروجي منتقل مي كند . main)(
{
int mat1[2][3]/mat2[3][4] ;
static int mat3[2][4]={0} ;
int i/j/k/l ;
for(i=0 ; i<2 ; i++)
{
for(i=0 ; i<3 ; i++)
{
printf("\n\tenter");
printf(" mat1[%d][%d] :"/i/j);
scanf("%d"/&mat1[i][j] );
}
for(i=0 ; i<3 ; i++)
{
for(i=0 ; i<4 ; i++)
{
printf("\n\tenter");
printf(" mat2[%d][%d] :"/i/j);
scanf("%d"/&mat2[i][j] );
}
}
for(i=0 ; i<2 ; i++)
{
for(i=0 ; i<4 ; i++)
{
mat3[i][j]=0 ;
for(k=0 ;k<3 ; k++)
mat3[i][j]=mat3[i][j]+mat1[i][k]*
mat2[k][j];
}
}
printf("\nthe product of mat1 & ");
printf("mat2 is: \n\n" );
for(i=0 ;i<2 ;i++)
{
for(i=0 ; i<4 ; i++)
printf("%5d"/mat3[i][j] );
printf("\n\n" );
}
}

نمونه اي از خروجي برنامه مثال 6 : enter mat1[0][0]:1
enter mat1[0][1]:2
enter mat1[0][2]:3
enter mat1[1][0]:5
enter mat1[1][1]:4
enter mat1[1][2]:7
enter mat2[0][0]:8
enter mat2[0][1]:9
enter mat2[0][2]:5
enter mat2[0][3]:8
enter mat2[1][0]:10
enter mat2[1][1]:0
enter mat2[1][2]:12
enter mat2[1][3]:21
enter mat2[2][0]:0
enter mat2[2][1]:5
enter mat2[2][2]:9
enter mat2[2][3]:12

the product of mat1

کيفيت مقاله :
عالی خوب متوسط ضعيف


ارزش دهي اوليه به آرايه ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۵۸۱ مراجعه امروز
۴۱۷۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ارزش دهي اوليه به آرايه ها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۹۹۰ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

ارزش دهي اوليه به آرايه ها

گاهي ممكن است در هنگام تعريف آرايه ها خواسته باشيم مقاديري را نيز به آنها
نسبت بدهيم . به اين مقادير ارزش هاي اوليه آرايه مي گوييم . بايد توجه داشت
كه فقط آرايه هاي داراي كلاس هاي حافظه staticو externو مي توانند مقادير اوليه
را بپذيرند . براي ارزش دهي اوليه به آرايه ها از روش كلي زير مي توان استفاده
كرد : }
مقادير]={طول بعدnام [..].طول بعد دوم ][طول بعداول [ <كلاس حافظه ><نوع><اسم آرايه >

در روش كلي فوق ، كلاس حافظه ، يكي از كلاس هاي static و يا extern است و
مقادير كه در داخل {} قرار مي گيرند بترتيب به عناصر آرايه نسبت داده مي شوند.
يعني اولين مقدار به اولين عنصر ، دومين مقدار به دومين عنصر و n امين مقدار
به n امين عنصر آرايه نسبت داده مي شوند .
در مورد ارزش دهي اوليه به آرايه ها ، بايد دو نكته زير را در نظر گرفت : 1
اگر طول آرايه مشخص شود و تعداد مقاديري كه به آرايه نسبت داده مي شوند
كمتر از تعداد عناصر آرايه باشند ، بقيه عناصر صفر فرض خواهند شد . 2
اگر طول آرايه مشخص نشود ، به تعداد مقاديري كه به آرايه نسبت داده
مي شوند ، منظور خواهد شد .

مثال 1: نمونه اي از ارزش دهي اوليه به آرايه هاي يك بعدي . main)(
{
int i ;
static int array[5]={10/5/15/20/25};
static int table[]={5/6/8/9/11} ;
static int mix[5]={0} ;
printf("\n\t tehe result of " );
printf("operation is:\n\n\t" );
for(i=0 ; i<4 ; i++)
{
mix[i]=array[i]+table[i] ;
printf("%d\t"/mix[i] );
}
printf("%d\t"/mix[4] );
}

خروجي برنامه مثال 1 : the result of operation is:
15 11 23 29 0

در مثال 1 اولين دستور ، آرايه اي از نوع صحيح با كلاس حافظه static را تعريف
مي كند كه طول آن 5 بوده و مقادير 25 ، 20 ، 15، 5، و 10 را به عناصر آن نسبت
مي دهد . دومين دستور ، آرايه اي بنام table را با طول نامشخص تعريف مي كند و
و پنج مقدار 5، 6،، 8،، 9، و 11 را به آن نسبت مي دهد ، لذا كامپايلر طول اين
را 5 فرض خواهد كرد . سومين دستور آرايه اي بنام mix را با طول 5 تعريف مي كند
و به كليه عناصر آن مقدار صفر را نسبت مي دهد .
براي ارزش دهي اوليه آرايه دو بعدي و يا چند بعدي به دو روش مي توان عمل
كرد . اين دو روش با ذكر مثالي تشريح مي شود .

مثال 2: دستوراتي كه به دو روش ، آرايه دو بعدي را ارزش اوليه مي دهد : static int array[2][3]={1/2/3/4/5/6} ;
static int table[2][3]={3/4} ;
static int mix[2][3]={{1/2/3}/{4/5/6}};

اولين دستور، آرايه دو بعدي به ابعاد 2 x 3 را تعريف كرده و مقادير 1، 2، و 3
به سطر اول و مقادير 4، 5،و 6و به سطر دوم نسبت داده مي شوند . دومين دستور
مثال 2 آرايه اي دو بعدي با ابعاد 2 x 3 را تعريف مي كند و دو مقدار3و 4و را به
آن نسبت مي دهد كه 3 در محل table[1][1]و 4و در محل table[1][2] قرار مي گيرد
و بقيه عناصر آن صفر خواهند بود .
دستور سوم روش ديگري براي دستور اول است .

مثال 3: نمونه اي از ارزش دهي اوليه به آرايه سه بعدي . static intthreed[3][2][4]=
{{{1.2.3.4}/
{5/6/7/8}/}/
{{7/9/3/2}/
{4/6/8/3}/}/
{{7/2/6/3}/

کيفيت مقاله :
عالی خوب متوسط ضعيف


رشته ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۵۹۰ مراجعه امروز
۴۱۸۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
رشته ها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۰۴۹ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

رشته ها

رشته ها معمولا" نوعي داده هستند كه در زبانهاي برنامه سازي به اشكال متفاوتي
مورد استفاده قرار گرفته و براي ذخيره كردن و دستكاري متن ها ، ( مثل كلمات
اسامي افراد ، جملات و غيره ) به كار مي روند . اما در زبان C رشته ها نوعي داده
نيستند بلكه به صورت آرايه اي از كاراكترها ( از نوع char ) هستند كه به NULL
( رشته تهي ) كه داراي ارزش عددي صفر است ختم ميشوند. براي نمايش NULL از '\0'
استفاده مي شود . بنابراين طول رشته ها را كه بصورت آرايه تعريف مي شوند ، بايد
به اندازه يك واحد بيش از مقدار لازم در نظر بگيريم . مثلا" اگر بخواهيم رشته اي
را كه طولاني ترين اسم آن داراي 30 حرف باشد ، براي ذخيره كردن اسامي افراد
تعريف كنيم بايد آرايه اي به طول 31 را در نظر بگيريم . كامپايلر زبان C كاراكتر NULL
را به انتهاي رشته ها اضافه مي كند و نيازي نيست كه برنامه نويس آن را در
انتهاي رشته ها قرار دهد .

مثال 1: main)(
{
char fname[21] ;
printf("enter your name: " );
scanf("%d"/fname );
printf("\nyour name is : %s"/fname);
}

نمونه اي از خروجي برنامه مثال 1 : enter your name : ali
your name is : ali

رشته Ali در متغير fname بصورت زير قرار مي گيرد :
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | a | l | i |\0 | | | | | | | | | | | | | | |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

نكته اي كه در مورد مثال 1 بايد روشن شود اين است كه تاكنون براي خواندن
مقادير متغيرها از ورودي توسط تابع ()scanf ، اسم متغير را با & ذكر مي كرديم .
اما دليلي كه در اين مثال براي خواندن محتويات رشته fnameاز &ز استفاده نشده
اين است كه fname نام يك آرايه است و نام آرايه بعنوان يك آدرس به اولين عنصر

کيفيت مقاله :
عالی خوب متوسط ضعيف


توابع ورودي خروجي رشته ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۵۹۶ مراجعه امروز
۴۱۸۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
توابع ورودي خروجي رشته ها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۸۳۲ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

توابع ورودي خروجي رشته ها

در زبان C توابع متعددي وجود دارند كه در مورد رشته ها استفاده مي شوند .
اكثر اين توابع براي خواندن رشته ها از صفحه كليد و يا چاپ آنها در صفحه نمايش
بكار مي روند .

تابع ()gets
تابع ()gets براي خواندن رشته هااز صفحه كليد بكارميرود و بصورت زير استفاده
مي شود :
(متغير رشته اي )gets

مثال 1: main)(
{
char fname[21] ;
printf("enter your name: " );
gets(fname );
printf("\nyour name is : %s"/fname);
}

نمونه اي از خروجي برنامه مثال 1 : enter your name : bahrami
your name is : bahrami

شايد اين پرسش مطرح شود " با وجود تابع ()scanf كه مي تواند براي رشته ها و
متغيرهاي عددي استفاده شود چه لزومي دارد از تابع ()gets استفاده گردد " ? در
پاسخ به اين پرسش بايد گفت كه تابع ()scanf رشته ها را پيوسته در نظر مي گيرد .
يعني اگر در بين يك رشته ، از فاصله (blank) و يا tab استفاده شود ، از اين
كاراكترها ( فاصله و يا tab ) به بعد ، بعنوان رشته ديگري منظور ميشوند ( مثال 2
) . براي رفع اين اشكال مي توان از تابع ()gets استفاده نمود .

مثال 2: main)(
{
char name[21] ;
printf("enter your name family:");
scanf("%s"/gets(name );
printf("\n your name is : %s"/name );
}

نمونه اي از خروجي برنامه مثال 2 : enter your name : einollah jafarnezhad
your name is : einollah

همانطوري كه از خروجي برنامه پيداست ، در پاسخ به درخواست برنامه نام و نام
خانوادگي Einollah jafarnezhad را وارد نموده ايم كه چون بين نام و نام خانوادگي
فاصله افتاده است فقط نام (Einollah) در متغير name قرار گرفته و در خروجي چاپ
شده است ولي نام خانوادگي از دست رفته است . اگر بجاي scanf از تابع gets
استفاده شود اين مشكل پيش نخواهد آمد ، زيرا در ()gets فقط كليد enter ، جدا
كننده است .

تابع ()puts
اين تابع براي انتقال يك رشته به خروجي بكار مي رود و بصورت زير استفاده
مي شود .
(عبارت رشته اي )puts
هنگام استفاده از تابع puts، مي توان از يك متغير رشته اي و يا يك رشته ( كه
در داخل نقل قول (") باشد ) بجاي عبارت رشته اي استفاده كرد .

مثال 3: برنامه اي كه دو رشته را از ورودي خوانده و سپس محتويات يك رشته را
به رشته ديگر منتقل مي كند . طول هاي دو رشته ورودي مي توانند با يكديگر برابر
نباشند .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ main)(
{
char s1[81]/ s2[81] ;
int i / j ;
char temp ;
puts("enter string : " );
gets(s1 );
puts("enter string : " );
gets(s2 );
for(i=0 ; s1[i] && s2[i] ; i++)
{
temp=s1[i] ;
s1[i]=s2[i] ;
s2[i]=temp ;
}
if(s1[i])
{
j=i ;
while(s1[i])
s2[i]=s1[i++] ;
s2[i]\'\0' ;
s1[i]\'\0' ;
}
else if( s2[i])
{
j=i ;
while(s2[i])
s1[i]=s2[i++] ;
s2[i]\'\0' ;
s1[i]\'\0' ;
}

puts("new content of s1 is:" );
puts(s1 );
puts("new content of s2 is:" );
puts(s2 );
}

نمونه اي از خروجي برنامه مثال 3 : enter string :
first string
enter string :
second string
new content of s1 is:
second string
new content of s2 is:
first string

مثال 4: برنامه اي كه با خواندن يك رشته و دو كاراكتر از ورودي ، كاراكتر اول
را با كاراكتر دوم در سرتاسر رشته جايگزين مي كند . main)(
{
char string[50] ;
char source_letter/target_letter ;
int i ;
printf("\n enter the string :" );
gets(string );
printf("\n enter source character:" );
source_lette=getche )(;
printf("\n enter target character:" );
target_letter=getche )(;
if(source_letter != target_letter)
for(i=0 ; string[i] ; i++)
if(string[i]==source_letter)
string[i]=target_letter ;
printf("\n result string is:\n");
puts(string );
}

نمونه اي از خروجي برنامه مثال 4 : enter the string : in the name of allah.

enter source character: a
enter target character: A

result string is:in th

کيفيت مقاله :
عالی خوب متوسط ضعيف


آرايه اي از رشته ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۵۹۹ مراجعه امروز
۴۱۹۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آرايه اي از رشته ها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۸۶۷ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

آرايه اي از رشته ها

گاهي ممكن است ، به عنوان مثال بخواهيم تعدادي از نام افراد را در آرايه اي
نگهداري كنيم : ولي با اطلاعاتي كه تاكنون از رشته ها داريم شايد نتوانيم چنين
كاري را انجام دهيم . براي اين كار بايد آرايه اي از رشته ها داشته باشيم . چون
رشته ها خود ازنوع آرايه هستند بايد آرايه اي ازآرايه ها را تعريف كنيم ( آرايه اي
از آرايه ها همان آرايه دوبعدي است ). براي توضيح بيشتر به مثال 1 توجه نماييد.

مثال : برنامه اي كه با تعريف آرايه اي از رشته ها ، 5 نام را در آن قرار
مي دهد و سپس با خواندن نامي از ورودي آنرا در آرايه جستجو مي كند . main)(
{
int dex/exist ;
int k ;
char name[21] ;
static char list [5][21]=
{ "ali" /
"ahmad" /
"alireza" /
"jalal" /
"mohammad"
} ;
printf("\nenter one name for");
printf(" search:");
gets(name );
for(dex=0 ; dex<5;dex++)
if(strcmp(list[dex]/name)==0)
{
exist=1 ;
break ;
}
if( exist==1)
{
printf("\nname ");
printf("<%s> exist in table."/name);
}
else
{
printf("\nname ");
printf("<%s> not exist. "/name);
}
}

دو نمونه از خروجي برنامه مثال بالا :
( الف ) enter one name for search:reza
name not exist.

( ب ) enter one name for search:ali
name exist in table.
ال بالا از تابع ()strcmp استفاده شده كه كارش مقايسه دو رشته مي باشد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


بعضي از توابع رشته اي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۶۰۵ مراجعه امروز
۴۱۹۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بعضي از توابع رشته اي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۸۲۸ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

بعضي از توابع رشته اي

بعضي از توابع بر روي رشته ها عمل كرده و دستكاري رشته ها را آسان مي كنند .
كه مي توان از مقايسه رشته ها ، تعيين طول رشته ها، الحاق كردن رشته ها به يكديگر
و ... نام برد .

تابع ()strcpy
تابع ()strcpy براي قرار دادن رشته اي در رشته ديگر مورد استفاده قرار گرفته
و بصورت زير استفاده مي شود : ;
("رشته " و متغير رشته اي )strcpy
اهميت اين تابع وقتي مشخص مي شود كه بدانيم ، مقدار دادن به متغير رشته اي
بطور مستقيم امكان پذير نيست بلكه فقط از طريق اين تابع صورت پذيرد . مثلا" اگر
داشته باشيم : char name[11];

دستور انتساب زير غلط خواهد بود : name="ALI";

با استفاده از تابع ()strcpy عمل فوق را مي توان بصورت زير انجام داد : strcpy(name/"ALI");

اين مساله بدين علت است : " همانطور كه در C نمي توان دو آرايه را با حكم
انتساب (=) به يكديگر نسبت داد ، دو رشته نيز نمي توانند با حكم انتساب ، به
يكديگر نسبت داده شوند .

مثال 1: برنامه اي كه يك رشته و يك عدد( كه بيانگر موقعيتي ازاين رشته است )
را از ورودي خوانده و موجب حذف كاراكتر موجود در آن محل مي شود . main)(
{
char string[81] ;
int position ;
printf("\n type a string: " );
gets(string );
printf("\n enter position for " );
printf("delete character: " );
scanf("%d"/&position );
strcpy(&string[position]/
&string[position+1] );
puts(" the result string is :" );
puts(string );
}

نمونه اي از خروجي برنامه مثال 1: type a string: in thee name of allah.
enter position for delete character:5
the result string is:
in the name of allah.

در مثال 1 متغير position به موقعيتي از رشته اشاره ميكند كه كاراكتر موجود
در آن بايد حذف شود . با استفاده از تابع ()strcpy قسمتي از رشته string را با
شروع از position + 1 ، در همين رشته با شروع از موقعيت position كپي كرده ايم .
اين عمل موجب حذف كاراكتري كه در موقعيت position قرار داشته است مي گردد . با
فرض اين كه رشته ورودي برابر با "cart" و موقعيت كاراكتري كه بايد حذف شود 2
فرض گردد خروجي حاصل از اجراي برنامه مثال 1 بصورت زير خواهد بود : type a string: cart.
enter position for delete character:2
the result string is:cat

تابع ()strcat
اين تابع براي الحاق كردن ( به دنبال هم قرار دادن ) دو رشته استفاده ميشود
و بصورت زير به كار مي رود : strcat(s1/s2)
s1
و s2و دو رشته اي هستند كه بايد با هم الحاق شوند . s2 در انتهاي رشته s1
قرار خواهد گرفت .

مثال 2: main)(
{
char s1[21] / s2[21] ;
puts("enter string : " );
gets(s1 );
puts("enter string : " );
gets(s2 );
strcat(s1/s2 );
puts("result string is: " );
puts(s1 );
}

درپاسخ به درخواست برنامه ، اگر بجاي s1 عبارت good وبجاي s2 عبارت moorning
را وارد كنيم ، خروجي بدين صورت است : enter string :
good

enter string :
moorning.

result string is:
goodmoorning.

براي تمرين ميتوانيد برنامه را طوري تغيير دهيد كه بين دو عبارت ، يك فاصله
(blank) باشد .

تابع ()strlen
تابع ()strlen براي تعيين طول يك رشته مورد استفاده قرار گرفته و بصورت زير
به كار مي رود : strlen(s)
s
رشته اي است كه طول آن بايد تعيين شود .

مثال 3: main)(
{
char name[31] ;
puts(" enter a string: " );
gets(name );
printf("\n string length is:");
printf("%d"/strlen(name ));
}

نمونه اي از خروجي برنامه مثال 3 : enter a string:
the c language is very quick.

string length is:29

روش ديگر براي پيدا كردن طول يك رشته ، استفاده از تابع ()scanf با پارامتر
كنترلي %n است . با استفاده از تابع ()scanf و پارامتر %n ، مثال 3 را مي توان
بصورت زير نوشت : main)(
{
char name[31] ;
int count ;
scanf("%s%n"/name/&count);
printf("\n string length is:");
printf("%d"/count );
}

تابع ()strcmp
تابع ()strcmp براي مقايسه كاراكتري دو رشته مورد استفاده قرار ميگيرد و به
اين صورت بكار مي رود : strcmp(s1/s2)
s2
و s1و دو رشته اي هستند كه بايد با يكديگر مقايسه شوند . اين تابع نتيجه
مقايسه دو رشته را بصورت صفر ، منفي و يا مثبت مشخص مي كند :
نتيجه |(s1/s2()strcmp
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ s1=s2 | 0

منفي | s2 <َs1
مثبت | s2 >َs1

تابع ()strchr
تابع ()strchr براي جستجوي يك كاراكتر در يك رشته بكار مي رود و محل وجود
اولين وقوع آن را مشخص مي كند. اگر كاراكتر مورد نظر در رشته وجود نداشته باشد
مقداري كه توسط اين تابع برگردانده مي شود برابر با صفر است . اين تابع بصورت
زير استفاده مي شود : strchr(s/ ch)
ch
كاراكتري است كه بايد در رشته s جستجو شود. بعنوان مثال ، بااجراي دستور: if( strchr( "hello"/'e'))printf( "e is in hello");

چون حرف e در عبارت hello وجود دارد پيام مناسبي چاپ مي شود .

تابع ()strstr
تابع ()strstr براي جستجو زير رشته اي در يك رشته مورد استفاده قرار گرفته و
بصورت زير بكار مي رود : strstr(s1/s2)
s2
رشته اي است كه بايد در رشته s1 جستجو شود . اگر s2در s1ر پيدا شود محل
اولين وقوع آن توسط تابع برگردانده مي شود ولي اگر s2در s1ر وجود نداشته باشد
مقدار صفر برگردانده خواهد شد . بعنوان مثال ، با اجراي دستور : if( strstr( "this is"/"hi"))printf( "hi found");

بعلت وجود رشته hi در رشته this is ، پيام مناسبي صادر مي شود .

مثال 4: main)(
{
char s1[80] / s2[80] ;
char ch ;
puts(" enter string : " );
gets(s1 );
puts(" enter string : " );
gets(s2 );
puts("enter character for search");
printf(" in s1: " );
ch=getche )(;
printf("\n length of s1 is:");
printf("%d"/strlen(s1 ));
printf("\n length of s2 is:");
printf("%d" /strlen(s2 ));
if(!strcmp(s1/s2))
printf("\n string are equal. ");
if(strstr(s1/s2))
printf("\n is in . " );
else
printf("\n is not in .");
if(strstr(s1/ch))
printf("\ncharacter<%c>is in.");
else
{
printf("\ncharacter<%c>is");
printf(" not in .");
}
}

نمونه اي از خروجي برنامه مثال 4 : enter string :
this is a sample statement.
enter string :
sample
enter character for search in : m
length of is:28
length of is:6
is in .
character is

کيفيت مقاله :
عالی خوب متوسط ضعيف


اشاره گرها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۶۰۸ مراجعه امروز
۴۲۰۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اشاره گرها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۲۰۵۵ بار مطالعه شده است
۱۲ نفر تا به حال به اين مقاله رای داده اند.

اشاره گرها

درك صحيح مفهوم اشاره گرها در زبان C بزرگترين موفقيت يك برنامه نويس است .
زيرا استفاده از اشاره گرها ويژگيهاي زير را دارد : 1
عمل تخصيص حافظه پويا امكان پذير است . 2
موجب بهبود كارآيي بسياري از توابع مي شود . 3
كار با رشته ها و آرايه ها را آسانتر مي كند . 4
فراخواني با ارجاع در توابع ، از طريق اشاره گرها امكان پذير است .
كليه متغيرهايي كه در برنامه ها مورداستفاده قرار ميگيرند در حافظه كامپيوتر
ذخيره مي شوند ( محل هايي از حافظه هستند ) . بنابراين هر متغير داراي يك آدرس
منحصر بفردي است كه توسط آن مي توان به متغير دسترسي پيدا كرد. اشاره گرها حاوي
آدرس متغيرهاي حافظه هستند. بعبارت ديگر اگر متغيري آدرس متغير ديگر را در خود
نگهداري كند به متغير اول يك اشاره گر گفته مي شود . بعنوان مثال ، اگر محتويات
متغيري كه در محل 1000 حافظه قرار دارد برابر با 1004 باشد ، اين متغير به محل 1004
حافظه اشاره خواهد كرد ( شكل 1 ) .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
محتويات حافظه | آدرس حافظه
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤ 1004 | 1000 |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1001 | | |
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1002 | | |
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1003 | | |
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
<ؤؤؤؤ| | 1004
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1005 | |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (1) . مفهوم اشاره گر

براي تعريف متغيرهاي اشاره گر از روش كلي زير استفاده مي شود :
نام متغير اشاره گر * نوع
نوع ، يكي از انواع معتبر در زبان C است . نوع اشاره گر مشخص مي كند كه اين
اشاره گر بايد به چه نوع داده اي اشاره كند ( سر و كارش با چه نوع داده اي است ).
در زبان C برخلاف زبان هايي مثل PL/I اشاره گرها داراي نوع هستند. لذا دراستفاده
از اشاره گرها بايد دقت كافي بخرج داد تا نتيجه نادرستي از برنامه حاصل نگردد .
بعنوان مثال ، دستور int *p; متغير p را از نوع اشاره گر تعريف مي كند كه فقط
بايد به متغيرهاي از نوع "صحيح " اشاره نمايد. البته اگر اشاره گرp به متغيرهايي
از انواع ديگر اشاره نمايد ، كامپايلر زبان C خطايي را به برنامه نويس اعلام
نمي كند ولي برنامه نويس بايد بداند كه اين امر يقينا" در نتيجه اجراي برنامه
اثر گذاشته و موجب عدم صحت اجراي برنامه گشته و به نتايج حاصل از برنامه
اطميناني نيست . بعنوان مثال در حين اجراي برنامه زير از طرف كامپايلر خطايي
گزارش نخواهد شد ولي مي دانيم كه اين برنامه نتيجه مطلوبي نخواهد داشت . main)(
{
float x/y ;
int *p ;
p=&x ;
y=*p ;
}

در برنامه فوق ، چون p به متغير x اشاره ميكند و p از نوع " صحيح " است ، x
را بصورت عدد " صحيح " در نظر ميگيرد و در دستور بعدي كه محتويات محلي كه p به را به y منتقل مي كند، عمل انتقال به درستي انجام نميشود.

کيفيت مقاله :
عالی خوب متوسط ضعيف


عملگرهاي اشاره گر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۱۴ مراجعه امروز
۴۲۰۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
عملگرهاي اشاره گر
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۷۶۶ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

عملگرهاي اشاره گر

دو عملگر در مورد اشاره گرها مورد استفاده قرار مي گيرند كه عبارتند از : *
و & . عملگر & يك عملگر يكاني است كه آدرس عملوند خود را مشخص مي كند . بعنوان
مثال دستور m = &name موجب مي شود تا آدرس متغير name در متغير m قرار گيرد .
عملگر * همانند عملگر & يك عملگر يكاني است ، محتويات يك آدرس حافظه را مشخص
مي كند . بعنوان مثال دستور p = m; موجب مي شود تا محتويات محلي كه آدرس آن در m
است به p منتقل گردد . بنابراين مجموعه دستورات (1) و (2) كه در ذيل آمده اند
معادل يكديگرند .
ؤ m= &name;
(َ1) ؤ
ؤ p= *m;
p= nam;( 2)

کيفيت مقاله :
عالی خوب متوسط ضعيف


اعمال روي اشاره گرها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۱۷ مراجعه امروز
۴۲۰۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اعمال روي اشاره گرها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۷۳۷ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

اعمال روي اشاره گرها

اعمالي كه بر روي اشاره گرها فايل انجام است به وسعت اعمالي كه بر روي ساير
متغيرهاي حافظه انجام پذير است ، نيست . اعمالي كه بر روي اشاره گرها انجام
پذيرند عبارتند از : 1
عمل انتساب : همچون ساير انواع متغيرها، ميتوان مقداري را به يك اشاره گر
نسبت داد ( مثال 1 ) . 2
اعمال محاسباتي : دو نوع اعمال محاسباتي مي توان بر روي اشاره گرها انجام
داد كه عبارتند از :
الف ) عمل جمع .
ب ) عمل تفريق .

مثال 1: main)(
{
int x ;
int *p1 / *p2 ;
p1=&x ;
p2=p1 ;
printf("\n the address of x is: ");
printf("%p"/p2 );
}

نمونه اي از خروجي برنامه مثال 1 : the address of x is:692B:0fDC

براي پي بردن به چگونگي عمل جمع و تفريق روي اشاره گرها فرض كنيد كه p
اشاره گري از نوع " صحيح " است و به ملح 2000 حافظه اشاره مي كند . اكنون دستور p + +;
را اجرا كنيم محتويات جديد اشاره گر p ، برابر با 2002 خواهد بود . زيرا
طول نوع " صحيح " برابر با 2 بايت است و با افزايش يك واحد به اشاره گر ، به
اندازه طول نوع اشاره گر به آن افزوده خواهد شد و نه به اندازه يك واحد . اگر
دستور ; - p- را صادر كنيم ، اشاره گر P مجددا" به محل 2000 حافظه اشاره خواهد
كرد . اگر باز هم دستور ; - p- را صادر كنيم اين بار به محل 1988 اشاره خواهد
كرد ( شكل 1 ) . char *ch= 2000;
int *i=2000;

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch | 2000 | i

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+1 | 2001 |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+2 | 2002 | i+1

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+3 | 2003 |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+4 | 2004 | i+2

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+5 | 2005 |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
حافظه
شكل (1) . انجام اعمال محاسباتي روي اشاره گر
3
مقايسه اشاره گرها : بااستفاده از عملگرهاي رابطه اي مي توان اشاره گرها را
با يكديگر مقايسه نمود. بعنوان مثال ، اگر pو qو از نوع اشاره گر باشند ، دستور
زير معتبر است : if(p < q )print f("p points to lower memory than q");

مقايسه اشاره گرها معمولا" در مواردي استفاده مي شود كه دو يا چند اشاره گر به اشاره مي كنند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اشاره گر و آرايه ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۲۰ مراجعه امروز
۴۲۱۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اشاره گر و آرايه
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۸۰۵ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

اشاره گر و آرايه

در زبان C بين آرايه ها و اشاره گرها ارتباط نزديكي وجود دارد ( اشاره گرها
حاوي يك آدرس و اسم آرايه نيز يك آدرس است ). اسم آرايه آدرس اوليه عنصر آرايه
را مشخص مي كند . بعبارت ديگر اسم آرايه آدرس اولين محلي را كه عناصر آرايه از
آنجا به بعد در حافظه قرار مي گيرند در خود نگهداري مي كند . بعنوان مثال اگر
آرايه اي بصورت table[8] تعريف كرده باشيم و اولين عنصر آرايه در محل 400 حافظه
قرار داشته باشد و اشاره گري بنام ptr بصورت زير تعريف كرده باشيم ، int * ptr;

دستور ptr = & table[0] آدرس شروع آرايه يعني 400 را در اشاره گر ptr قرار
مي دهد ( اين دستور معادل دستور ptr = table; است ) و دستور t = * ptr محتويات
اولين محل آرايه ( اولين عنصر آرايه ) يعني (table[0]) را در متغيرt قرار داده
دستور * ptr = 0 محتويات اولين محل آرايه table را برابر با صفر قرار مي دهد .
با مطالبي كه تاكنون گفته شد براي دسترسي به عناصر آرايه علاوه بر انديس ، از
اشاره گرها نيز مي توان استفاده كرد :
آدرس آرايه را در اشاره گر ptr قرار مي دهد ptr= table;
به دومين عنصر آرايه اشاره مي كند (table[1]);(َptr+ 1) *
به i+1 امين عنصر آرايه اشاره مي كند ;(ptr+i) *

مثال : برنامه اي كه 5 مقدار را از ورودي خوانده و در آرايه اي قرار مي دهد .
سپس آنها را از آخرين مقدار به اولين مقدار به خروجي منتقل مي كند . main)(
{
int arr[5] /i ;
printf("\n enter five value: " );
for(i=0 ; i<5 ; i++)
scanf("%d"/&arr[i] );
printf("\n the reverse output is: ");
for(i=4 ; i>=0 ; i) --
printf("%4d"/*(arr+i ));
}

نمونه اي از خروجي برنامه مثال بالا : enter five value: 10 20 30 40 50
the reverse output is:50 40 30 20

کيفيت مقاله :
عالی خوب متوسط ضعيف


اشاره گرها و رشته ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۳۲ مراجعه امروز
۴۲۲۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اشاره گرها و رشته ها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۷۰۴ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

اشاره گرها و رشته ها

چون رشته ها در زبان C بصورت آرايه تعريف مي شوند بين آنها و اشاره گرها نيز
ارتباط نزديكي وجود دارد . بطوري كه بسياري از توابع كتابخانه اي كه با رشته ها
سر و كار دارند ، ارتباط نزديكي با اشاره گرها پيدا مي كنند . بعنوان مثال تابع
()strchr كه محل اولين وقوع كاراكتري را در رشته اي پيدا مي كند بصورت زير
استفاده مي شود :
) <رشته > و <كاراكتر مورد جستجو>(= strchr اشاره گر

مثال 1: برنامه اي كه يك رشته و كاراكتري را از ورودي خوانده و محل اولين
وقوع اين كاراكتر را در رشته پيدا مي كند . main)(
{
char ch/line[81]/*ptr/*strchr )(;
printf("\nenter string to search:\n");
gets(line );
printf("\n enter a character: " );
ch=getche )(;
ptr=strchr(line/ch );
printf("\n the string start at " );
printf("address:%u/line" );
printf("\n first occurence of" );
printf(" <%c> is address:%u"/ch/ptr);
printf("\n this is position:" );
printf("%d( start from 0)"/ptr-line);
}

نمونه اي از خروجي برنامه مثال 1 : enter string to search:
c has no bound checking.
enter a character: k
the string start at address:3984

first occurence of is address:8291
this is position:20(start from 0 );

همانطوريكه ازخروجي برنامه مثال 1 پيداست تابع strchr با جستجوي يك كاراكتر
در يك رشته ، آدرس اين كاراكتر را بعنوان نتيجه عمل مشخص ميكند و در يك اشاره گر
قرار مي دهد . همانطور كه قبلا" گفته شد ، اگر تابعي داراي نوعي غير از "صحيح "
باشد بايد در تابع فراخواننده ، نوع آن به كامپايلر اعلام گردد . لذا در مثال
(َ1) نوع تابع ()strchr بصورت اشاره گر به كاراكتر تعريف شده است . البته اگر با
استفاده از دستور پيش پردازنده # include فايل "string" به برنامه معرفي گردد
نيازي به تعريف اين تابع بصورت اشاره گر نيست .

مثال 2: برنامه اي كه رشته اي را از ورودي دريافت كرده و كليه حروف كوچك اين
رشته را به حروف بزرگ تبديل مي كند . main)(
{
char s[50] ;
printf("enter a string in");
printf(" lowercase:\n");
gets(s );
upper(s );
printf("\n uppercase of");
printf(" string is:\n");
puts(s );
}

upper(char *string)
{
while(*string)
{
if(*string>='a' && *string<='z')
*string=*string-32 ;
string++ ;
}
}

نمونه اي از خروجي برنامه مثال 2 : enter a string in lowercase:
in c all keyword are lowercase.
uppercase of string is:
IN C ALL KEYWORD ARE LOWERCASE.

مثال 3: برنامه اي كه رشته اي را از ورودي خوانده و كليه حروف بزرگ موجود در
رشته را به حروف كوچك تبديل مي كند : main)(
{
char s[50] ;
printf("enter a string in");
printf(" uppercase:\n");
gets(s );
upper(s );
printf("\n lowercase of string");
printf(" is:\n");
puts(s );
}

upper(char *string)
{
while(*string)
{
if(*string>='A' && *string<='Z')
*string+=32 ;
string++ ;
}
}

نمونه اي از خروجي برنامه مثال 3 : enter a string in uppercase:
THIS IS A TEST FOR CONVERT TO LOWER.
lowercase of string is:
this is a test for convert to lower.

مثال 4: برنامه اي كه يك رشته و كاراكتري را از ورودي خوانده و تعداد دفعات
تكرار اين كاراكتر را رشته مشخص مي كند . main)(
{
char string[40] / ch ;
int count ;
printf("enter string for search:\n");
gets(string );
printf("\n enter a character:" );
ch=getche )(;
count=char_count(string/ch );
printf("\n number of occurs of " );
printf("char <%c> is:%d"/ch/count );
}

char_count(char *s/char letter)
{
int count=0 ;
while(*s)
if(*s++==letter)
count ++ ;
return(count );
}

نمونه اي از خروجي برنامه مثال 4 : enter string for search:
this is a simple test.
enter a character:
number of occurs of char is:3

مثال 5: برنامه اي كه رشته عددي را از ورودي خوانده و سپس آن را به مقدار
عددي تبديل مي كند . main)(
{
int number ;
char s[10] ;
printf("\n string representation");
printf(" of numeric:" );
gets(s );
ascii_to_int(&number/s );
printf("\n numeric value of ");
printf("string is:%d"/number );
}

ascii_to_int(int *value/char *str)
{
int sign=1 ;
*value=0 ;
while(*str==' ' )str++ ;
if(*str=='-' || *str=='+')
sign=(*str++=='-' )?- 1:1;
while(*str)
if((*str>='0' )&&( *str<='9'))
*value=(*value*10)+(*str++- 48 );
else
{
printf("Watning: the<%c> is:"/*str);
printf(" invalid character." );
exit(0 );
}
*value *=sign ;
}

خروجي هاي حاصل از 4 بار اجراي برنامه مثال 5 : string representation of a numeric-:342( 1)
numeric value of string is-:342

string representation of a numeric:+2341( 2)
numeric value of string is:+2341

string representation of a numeric:543( 3)
numeric value of string is:543

string representation of a numeric:45y4( 4)
Watning: the is invalid character.

مثال 6: برنامه اي كه عددي را از ورودي خوانده و سپس آن را به رشته تبديل
مي كند . main)(
{
int number ;
char s[10] ;
printf("\n enter a number: " );
scanf("%d"/&number );
int_to_ascii(number/s );
printf("\n the string value is:%s"/s);
}

int_to_ascii(int*value/char *str)
{
int sign=value ;
char temp / *savestr=str ;
if(value<0)
value*=-1 ;
do{
*str++=(value % 10)+48 ;
value=value/10 ;
} while(value>0 );
if( sign<0)
*str++='-' ;
*str-- ='\0' ;
while(savestr {
temp=*str ;
*str--=*savestr ;
*savestr++=temp ;
}
}

نمونه اي از خروجي برنامه مثال 6 : enter a number:2341
the st

کيفيت مقاله :
عالی خوب متوسط ضعيف


ارزش دهي اوليه رشته ها به عنوان اشاره گر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۳۵ مراجعه امروز
۴۲۲۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ارزش دهي اوليه رشته ها به عنوان اشاره گر
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۷۲۲ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

ارزش دهي اوليه رشته ها به عنوان اشاره گر

در اين قسمت مي خواهيم مشخص كنيم كه چگونه ميتوان رشته ها را بعنوان اشاره گر
مقدار اوليه داد . براي روشن شدن موضوع ، به مثال 1 توجه نماييد .

مثال 1: main)(
{
char *text="your name is:";
char name[41] ;
printf("\n enter your name: " );
gets(name );
printf("\n\n %s text" );
puts(name );
}

نمونه اي از خروجي برنامه مثال 1 : enter your name:mohammad
your name is:mohammad

اولين دستور مثال 1 را بصورت زير نيز مي توان نوشت : static char text[] = "your name is:";

اين دو دستور از نظر اثري كه در حافظه مي گذارند تفاوتي با يكديگر ندارند .
ولي چون دستوري كه در برنامه آمده است متغير text را بصورت اشاره گر تعريف كرده
است ، قابليت انعطاف بيشتري به اين متغير داده است . اين امر باعث شده است كه
با دستور ساده ;(text++)puts رشته text كاراكتر به كاراكتر به خروجي منتقل گردد
كه نتيجه زير حاصل خواهد شد : your name is:

وقتي كه رشته ها به صورت اشاره گر تعريف مي شوند ، بخصوص در مواقعي كه طول
عناصر مختلف آن ، متفاوت باشند موجب صرفه جويي در ميزان حافظه مي گردند ( مثال ( . 2

مثال 2: برنامه اي كه براي ذخيره كردن نام هاي تعدادي از افراد ، از آرايه اي
از اشاره گرها استفاده مي كند. اين برنامه با خواندن نام 5 نفر از ورودي ، آنها
را در آرايه اي قرار داده ، سپس نامي را از ورودي دريافت مي كند و تشخيص مي دهد
كه آيا اين نام در ليست وجود دارد يا خير . main)(
{
int dex / exist=0 /k ;
char name[21] ;
static char *list[5]=
{"ali"/
"ahmad"/
"alireza"/
"jalal"/
"mohammad"
} ;
printf("enter a name for search:");
gets(name);
for(dex=0;dex<5;dex++)
{
if(strcmp(list[dex]/name)==0)
{
exist=1 ;
break ;
}
}
if(exist==1)
printf("\n name <%s> exist."/name);
else
printf("\n name " );
printf("<%s> not exist."/name);
}

نمونه اي از خروجي برنامه مثال 2 : enter a name for search: ali
name exist.

اگر در مثال 2 فرض شود كه اولين عنصر آرايه list ( كه حاوي 5 نام است ) در
محل 1000 حافظه قرار داشته باشد . اين آرايه بصورتي كه در شكل (1) آمده است در
حافظه قرار مي گيرد .
اگر درمثال 2 بجاي تعريف آرايه اي از اشاره گرها، آرايه اي از رشته ها را تعريف
ميكرديم آنگاه مي بايست آرايه list بصورت آرايه اي دو بعدي تعريف ميشد كه تعداد
سطرهاي آن برابر با تعداد افراد ( تعداد عناصر آرايه ) و تعداد ستون هاي آن
برابر با طول طولاني ترين نام موجود بود ( شكل 2 و مثال 3 ) .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ |A |h |m |a |d |\0|
1000ؤؤ > | 1000 List [0]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ |A |l |i |\0|
1006ؤؤ > | 1006 List [1]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ |A |m |i |n |\0|
1010ؤؤ > | 1010 List [2]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ |y |a |f |a |r |n |e |z |h |a |d |\0|
1015ؤؤ > | 1015 List [3]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ |B |a |h |r |a |m |i |\0|
1027ؤؤ > | 1027 List [4]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ
شكل (1) . نحوه قرار گرفتن آرايه اي از اشاره گرها در حافظه ، شامل 5 نام

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | | | |
|
|A hh |m |a |d |\0| 1000ؤؤؤؤؤؤؤؤؤ > List [0]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | | | | | |
|
|A ll |i |\0| 1012ؤؤؤؤؤؤؤؤؤ > List [1]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | | | | |
|
|A mm |i |n |\0| 1023ؤؤؤؤؤؤؤؤؤ > List [2]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |y aa |f |a |r |n |e |z |h |a |d |\0|
1035ؤؤؤؤؤؤؤؤؤ > List [3]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | |
|
|B aa |h |r |a |m |i |\0| 1047ؤؤؤؤؤؤؤؤؤ > List [4]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (2) . نحوه قرار گرفتن آرايه اي از رشته ها در حافظه ، شامل 5 نام

با توجه به نحوه ذخيره شدن اطلاعات در اشكال 1و 2و ذخيره كردن رشته ها بصورت
آرايه اي از اشاره گرها در صرفه جويي ميزان حافظه بسيار موثر است ولي در همه حالات
اينطور نيست . بعنوان مثال اگر طول همه رشته ها 12 باشد ( به اندازه بزرگترين
طول رشته در مثال 2 )، حافظه تخصيص يافته در روش اول ( آرايه اي از اشاره گرها )
داراي 5 اشاره گر اضافي خواهدبود كه حافظه بيشتري را نسبت به روش دوم ( آرايه اي
از رشته ها ) اشغال مي كند . مزيت عمده بيان رشته ها بصورت آرايه اي از اشاره گرها
سرعت بالاتر و سهولت دسترسي به عناصر آنها است . زيرا نيازي به انجام محاسبات
جهت دسترسي به عناصر آرايه نيست .

مثال 3: برنامه اي كه نام تعدادي از افراد را از ورودي خوانده و در يك آرايه
قرار مي دهد . سپس با استفاده از آرايه اي از اشاره گرها ، آن را مرتب مي كند و
نتيجه را به خروجي مي برد . main)(
{
char name[30][81] ;
char *ptr[30]/*temp ;
const int k=30 ;
int in / out / count=0 ;
while(count {
printf("\n enter name of number");
printf(" %d:"/count+1 );
gets(name[count] );
if(strlen(name[count])==0)
break ;
ptr[count++]=name[count] ;
}
for(out=0 ; out for(in=out+1 ; in if(strcmp(ptr[out]/ptr[in])>0)
{
temp=ptr[in] ;
ptr[in]=ptr[out] ;
ptr[out]=temp ;
}
printf("<< the sorted list is:>>");
for(out=0 ; out printf("\n name %d is:"/out+1);
printf("%s"/ptr[out]);
}

نمونه اي از خروجي برنامه مثال 3 : enter name of number 1:bahrami
enter name of number 2:amin
enter name of number 3:jafar
enter name of number 4:sadeghi
enter name of number 5:
<< the sorted list is:>>

name 1 is:amin
name 1 is:bahrami
name 1 is:jafar
name 1 is:sadeghi

براي توضيح بيشتر در مورد چگونگي مرتب كردن رشته ها از طريق آرايه اي از
اشاره گرها ، به شكل هاي 3و 4و كه بيانگر نحوه قرار گرفتن عناصر آرايه در حافظه
قبل و بعد از مرتب شدن هستند توجه نماييد .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ |B |a |h |r |a |m |i |\0|
ؤؤؤؤؤؤؤؤؤ > | ptr[0]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ | |
|
|A |m |i |n |\0|ؤؤؤؤؤؤؤؤؤ > | ptr[1]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ |
|
|y |a |f |a |r |\0|ؤؤؤؤؤؤؤؤؤ > | ptr[2]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ |s |a |d |e |g |h |i |\0|
ؤؤؤؤؤؤؤؤؤ > | ptr[3]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (3) . وضعيت اشاره گرها قبل از مرتب شدن

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ |B |a |h |r |a |m |i |\0|
ؤؤؤ ؤؤؤؤؤ > | ptr[0]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ |
| | |A |m |i |n |\0|ؤؤؤؤؤؤؤؤؤ > | ptr[1]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ |
| |y |a |f |a |r |\0|ؤؤؤؤؤؤؤؤؤ > | ptr[2]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ |s |a |d |e |g |h |i |\0|
ؤؤؤؤؤؤؤؤؤ > | ptr[3]
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (4) . وضعيت اشاره گرها بعد از مرتب شدن

نكته اي كه در مورد مثال 3 بايد مورد توجه قرار گيرد اين است كه آرايه name
بصورت دو بعدي تعريف شده است ولي در حين دسترسي به عناصر آن ، بصورت يك بعدي
مورد استفاده قرار گرفته است . اين مساله بدين دليل است كه در زبان C قسمتي از
آرايه را مي توان بصورت يك آرايه فرض كرد . بعبارت ديگر ، در يك آرايه دو بعدي
هر سطر را مي توان بصورت يك آرايه يك بعدي در نظر گرفت . لذا مي توان گفت كه
آرايه دو بعدي ، آرايه اي از آرايه هاي يك بعدي است . بعنوان مثال در دستور : static char name[30][81];

آرايه name يك آرايه دو بعدي تعريف شده است كه ميتوان آن را بصورت يك آرايه
يك بعدي با تعداد 30 عنصر در نظر گرفت كه هر عنصر آن نيز يك آرايه يك بعدي به

کيفيت مقاله :
عالی خوب متوسط ضعيف


اشاره گر به اشاره گر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۳۸ مراجعه امروز
۴۲۳۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اشاره گر به اشاره گر
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۶۷۶ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

اشاره گر به اشاره گر

اگر متغيري آدرس متغير ديگر را در خود نگهداري كند ، متغير اول يك اشاره گر
است . اگر متغير دوم ، از نوع اشاره گر باشد در اينصورت متغير اول يك اشاره گر
به اشاره گر است ( شكل 1 ) . يادآوري مي شود كه آرايه اي از اشاره گرها ، نوعي
اشاره گر به اشاره گر است .
متغير اشاره گر
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ |
مقدار |ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ آدرس >|
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ |
مقدار |ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ آدرس >|ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ آدرس >|
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ
شكل (1) . اشاره گر به اشاره گر

براي تعريف متغيرهاي اشاره گر به اشاره گر ، از دو علامت * استفاده مي شود .

مثال : برنامه اي شامل اشاره گر به اشاره گر . main)(
{
int x / *p /**q ;
x=10 ;
p=&x ;
q=&p ;
printf("\n the points to value:");
printf("%d"/**q );
}

خروجي حاصل از اجراي برنامه مثال بالا : the points to value:1

کيفيت مقاله :
عالی خوب متوسط ضعيف


نكاتي در مورد اشاره گرها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۴۷ مراجعه امروز
۴۲۳۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نكاتي در مورد اشاره گرها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۶۹۰ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

نكاتي در مورد اشاره گرها

عليرغم قدرت زيادي كه استفاده از اشاره گرها در زبان به برنامه نويس مي دهد
اشكالاتي را نيز مي تواند بوجود آورد كه برنامه نويس بايد آنها را در نظر داشته
باشد .
اشكال اول ) استفاده از اشاره گرهايي كه قبلا" مقدار نگرفته اند .

مثال 1: main)(
{
int x/*p ;
x=10 ;
*p=x ;
}

دربرنامه مثال 1 عدد 10 به متغير x نسبت داده ميشود و دستور *p=x; به ماشين
مي گويد " محتويات متغير x را در آدرسي كه اشاره گر p به آن اشاره مي كند قرار
بده " . چون اشاره گر p بجايي در حافظه اشاره نميكند ( قبلا" مقدار نگرفته است )
عمل مورد نظر انجام نخواهد شد. براي رفع اين مشكل كافي است در اشاره گر p مقدار
معتبري قرار گيرد .

اشكال دوم ) عدم استفاده صحيح از اشاره گرها

مثال 2: main)(
{
int x / *p ;
x=10 ;
p=x ;
printf("\n %d"/*p );
}

هدف برنامه مثال 2 اين بود كه مقدار متغيرx را كه برابر با 10 است در خروجي
چاپ نمايد ولي به دليل نادرست بودن دستور p=x; ( با توجه به اشاره گر بودن p )
نتيجه مطلوب حاصل نخواهد شد . اين دستور موجب مي شود تا عدد 10 ، نه بعنوان يك
مقدار بلكه بعنوان يك آدرس به اشاره گر p منتقل گردد . براي رفع اين مشكل كافي
است اين دستور را بصورت p=&x; نوشت تا آدرس متغير x به اشاره گر p منتقل شود .

اشكال سوم ) فرض هايي كه برنامه نويس در مورد محل قرار گرفتن متغيرها در حافظه
دارد .

وقتي كه متغيرها در حافظه قرار مي گيرند ، جاي آنها براي ما مشخص نيست و در
هر جايي كه فضايي كافي وجود داشته باشد اين متغيرها در آنجا ذخيره مي شوند .
به همين دليل مقايسه اشاره گرهايي كه به عناصري از يك نوع اشاره نمي كنند صحيح
نبوده و با مشكل مواجه مي گردد ( مثال هاي 3و 4و ) .

مثال 3: main)(
{
char s[80]/y[80] ;
char *p1 / *p2 ;
p1=s ;
p2=y ;
if(p1 printf("p1 points to lower addree.");
}

در مثال 3 مقايسه p1و p2و با يكديگر صحيح نيست ، زيرا محل قرار گرفتن
رشته هاي sو yو براي ما مشخص نيست .

مثال 4: main)(
{
int first[10]/second[10] ;
int *p / t ;
p=first ;
for(t=0 ; t<20 ; t++)
*p++=t ;
}

در مثال 4 سعي شده كه به عناصر آرايه هاي firstو secondو اعداد 0 تا 19 نسبت
داده شود. اگر چه ممكن است اين عمل در بعضي از كامپايلرها به درستي انجام گيرد
ولي در حالت كلي اين طور نيست ، زيرا ممكن است عناصر آرايه هاي firstو secondو
در محل هاي متوالي حافظه قرار نگيرند .
با اشكالاتي كه تاكنون درمورد اشاره گرها گفته شد برنامه نويس بايد در استفاده ا دقت كافي بخرج دهد تا با مشكل مواجه نگردد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


آرگومانهاي تابع اصلي (()main) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۵۰ مراجعه امروز
۴۲۴۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آرگومانهاي تابع اصلي (()main)
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۷۶۵ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

آرگومانهاي تابع اصلي (()main)

اولين تابع يك برنامه كه اجرا مي شود ، تابع ()main است . اين تابع همانند
توابع ديگر مي تواند داراي آرگومان باشد. آرگومان هاي تابع اصلي را آرگومان هاي
خط فرمان نيز مي گويند . اين نامگذاري بدين دليل است كه :
وقتي برنامه زبان C توسط كامپايلر زبان ترجمه شد ، اين برنامه در خارج از
محيط C و در سطح سيستم عامل قابل اجرا است و در حين اجراي اين برنامه اسامي
آرگومان ها نيز جهت انتقال به تابع اصلي ذكر مي شوند . بعنوان مثال ، فرض كنيد
برنامه اي بنام test.c نوشته ، توسط كامپايلر C آن را ترجمه كرده و برنامه اي به
نام test.exe از آن ساخته ايم . براي اجراي اين برنامه كافي است در سطح سيستم
عامل بصورت زير عمل كنيم (با فرض اين كه اين برنامه در درايو جاري وجود دارد): A>test

اگر فرض شود كه اين برنامه داراي دو پارامتر باشد ، براي اجراي آن در سطح
سيستم عامل ، بايد اسامي آرگومان ها را با يك فاصله بصورت زير تايپ كنيم : A>test par1 par2
par1
و par2و اسامي آرگومان هايي هستند كه به تابع اصلي منتقل مي شوند .
تابع اصلي داراي دو پارامتر بنام هاي argcو argvو است . پارامتر argc از نوع
صحيح بوده و مشخص كننده تعداد آرگومان هاي خط فرمان است . چون نام برنامه به
عنوان يك آرگومان محسوب مي شود لذا حداقل مقدارargc برابر با 1 است . بنابراين
اگر برنامه اي مانند test داراي دو آرگومان باشد، عددي كه در پارامتر argv قرار
مي گيرد برابر با 3 خواهد بود. پارامتر argv به آرايه اي رشته اي اشاره ميكند كه
عناصر آن ، به آرگومان هاي خط فرمان اشاره مي كند . لذا كليه آرگومان هاي تابع
اصلي بصورت رشته هاي فرض مي شوند . بنابراين اگر خواسته باشيم از اعدادي كه به
عنوان آرگومان به تابع اصلي منتقل مي شوند استفاده كنيم ، بايد به طريق مقتضي
( با استفاده از توابع كتابخانه اي و يا توابعي كه خودمان مي نويسيم ) آنها را
از رشته اي ، به عددي تبديل كنيم .

مثال 1: برنامه اي كه نامي را به عنوان آرگومان پذيرفته و عبارت hello را در
جلوي آن نام قرار مي دهد . main(argc/argv)
int argc ;
char *argv[] ;
{
if(argc!=2)
{
printf("\n number of parameter ");
printf("is wrong ." );
exit(0 );
}
printdf("\n\n hello %s"/argv[1] );
}

فرض كنيد نام برنامه مثال 1را name.cا انتخاب كرده ، سپس توسط كامپايلر زبان C
از آن ، برنامه name.exe را ساخته باشيم . براي اجراي اين برنامه كافيست به
صورت زير عمل شود : A>name Ali

پس از اجراي برنامه name ، نتيجه زير حاصل خواهد شد : hello Ali

در مورد ترتيب دسترسي به آرگومان هاي تابع اصلي بايد دقت داشت كه : argv[0]
بنام برنامه ، argv[1] به اولين آرگومان ، argv[2] به دومين آرگومان
و argv[n]به n امين آرگومان اشاره مي كنند .

مثال 2: برنامه اي كه يك عدد را بعنوان آرگومان پذيرفته ، عمل شمارش معكوس از
آن عدد به صفر را انجام مي دهد . اين برنامه مي تواند آرگومان دوم نيز داشته
باشد . اگر آرگومان دوم برابر با "display" باشد ، نتيجه شمارش معكوس در صفحه
نمايش چاپ خواهد شد . main(argc/argv)
int argc ;
char *argv[] ;
{
int disp/count ;
if(argc<=2)
{
printf("\n number of parameter ");
printf("is wrong ." );
exit(0 );
}
if(argc==3 && !strcmp[argv[2]/
"display"))
disp=1 ;
else
disp=0 ;
for(count=atoi(argv[1]);count
;-- count)
if(disp)
printf("\n %d "/count );
printf("%c"/7 );
}

نمونه اي از خروجي برنامه مثال 2 : C:\TC>6-23 5 display
5
4
3
2
1

در خروجي فوق ، 5 عددي است كه بايد بطور معكوس شمارش شود و 6-23 نام برنامه
است .
در مورد مثال 2 بايد دو مطلب زير را بخاطر داشت : 1
تابع ()atoi يكي از توابع كتابخانه اي است كه مقدار عددي رشته اي را به
مقدار عددي صحيح تبديل مي كند. بكار گرفتن اين تابع بدين دليل بود كه عدد وارد
شده بعنوان آرگومان تابع كه شمارش معكوس آن بايد انجام شود ، بصورت رشته اي به
تابع اصلي منتقل خواهد شد كه براي استفاده از آن ، بايد بصورت عددي تبديل شود. 2
آخرين دستور ()printf پس از عمل شمارش معكوس جهت بصدا درآوردن زنگ سيستم
بكار گرفته شده است .
اگر آرايه argv با دو انديس به كار گرفته شود ، موجب دسترسي به هر يك از
از كاراكترهاي آرگومان تابع ( بطور جداگانه ) مي گردد . ( مثال 3 ) .

مثال 3: برنامه اي كه چگونگي دسترسي به هر يك از كاراكترهاي آرگومان تابع
اصلي را نشان مي دهد . main(int argc/char *argv[])
{
int t / i ;
if(argc<2)
{
printf("number of parameters");
printf("is wrong." );
exit(0 );
}
for(t=0 ; t {
i=0 ;
while(argv[t][i])
{
printf("\n %c "/argv[t][i] );
i++ ;
}
}
}

نمونه اي از خروجي برنامه مثال 3 : C:\TC>6-24 allah
a

l
l
a
h

در مثال 3 بايد دقت داشت كه اولين انديس آرايه argv[] يعني t به آرگومان
تابع اصلي ( مشخص كننده شماره آرگومان ) كه يك رشته است اشاره مي كند، و دومين
انديس اين آرايه به كاراكتري از اين آرگومان اشاره مي كند كه شماره آن كاراكتر
با اين انديس مشخص مي شود . بعنوان مثال ، منظور از argv[2][3] كاراكتر سوم از
آرگومان دوم مي باشد .
از نظر تئوري مي توان حداكثر از 32767 عدد آرگومان استفاده نمود كه معمولا" تعداد را اجازه مي دهد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستورات پيش پردازنده ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۶۵۶ مراجعه امروز
۴۲۴۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستورات پيش پردازنده
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۶۸۱ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

دستورات پيش پردازنده

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


تعريف ماكرو ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۶۵۹ مراجعه امروز
۴۲۵۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تعريف ماكرو
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۶۴۶ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

تعريف ماكرو

ماكرو، نامي براي يك رشته است كه اين رشته مي تواند تركيبي از خروف ، ارقام
مقادير ثابت ، توابع و غيره باشد . دستور پيش پردازنده # define براي تعريف
ماكرو استفاده مي شود . اين دستور قبل از تابع ()main به دو صورت بكار مي رود
كه يك روش آن بصورت زير است :
<نام ماكرو> <رشته ># define
نام ماكرو همانند نام يك متغير در C است كه حداقل بايد با رشته تعريف كننده
ماكرو ، يك فاصله داشته باشد و بهتر است جهت مشخص بودن در برنامه با حروف بزرگ
انتخاب شود . بعنوان مثال ، دستور # define MAX 20

موجب مي شود تا مقدار ماكروي MAX در سرتاسر برنامه برابر با 20 فرض شود .
يعني در هر جاي برنامه از ماكروي MAX استفاده شود مثل اين است كه از عدد 20
استفاده شده است .
در مورد دستورات پيش پردازنده در زبان C ، بايد اين نكته را در نظر داشت كه
آنها عليرغم ساير دستورات زبان C ، به ; ختم نمي شوند .

مثال 1: برنامه اي كه چگونگي استفاده از ماكروها را نشان مي دهد. اين برنامه
تعدادي عدد را از ورودي خوانده و مجموع آنها را محاسبه مي كند ( اگر عددي كه
وارد مي شود ، منفي باشد ، برنامه متوقف مي شود ) . #define program main)(
#define FLOAT float
#define WHILE while(
#define DO)
#define BEGIN {
#define end }
#define formatout "the sum is %8.2f\n"
PROGRAM
BEGIN
FLOAT data/sum=0.0;
scanf(FORMATIN/& data);
WHILE data>=0.0 DO
BEGIN
sum+=data;
scanf(FORMATIN/&data);
END
printf(FORMAOUT/SUM);
END

نمونه اي از خروجي برنامه مثال 1 : enter a numbet: 12
enter a numbet: 45
enter a numbet: 83
enter a numbet-: 1
the sum is 140.00

در مثال 1 بجاي تابع اصلي ()mainاز PROGRAMز ، بجاي {از BEGINز ، بجاي } از END
و... استفاده شده است . بديهي است كه انتخاب اين نام ها به نظر برنامه نويس
بستيگ دارد كه مي تواند هر چيز ديگري را بجاي آنها انتخاب نمايد .

مثال 2: برنامه اي كه با استفاده از علامت * ، مثلثي را در صفحه نمايش رسم
مي كند . #define NUMLINE 5
#define BLANK ' '
#define ASTRISK '*'
#define NEWLINE '\n'
main)(
{
int l/le/s ;
1=1;
while( l<=NUMLINE)
{
le=1 ;
while( le++<=NUMLINE-1)
printf("%c"/BLANK);
s=1;
while(s++<=2*1-1)
printf("%c"/ASTRISK);
printf("%c"/NEWLINE);
l++;
}
}

خروجي برنامه مثال 2 : *
* * *
* * * * *
* * * * * * *
* * * * * * * * *

كاربرد ديگر دستور# define در تعريف ماكروهايي است كه داراي پارامتر باشند.
در اين مورد از دستور # define بصورت زير استفاده مي شود . # define READINT(I )scanf("%d/&I)

تعريف ماكرو ، مشخص مي كند كه چه عملي بايد توسط ماكرو انجام گيرد . اسامي
پارامترها متغيرهايي هستند كه در حين اجراي ماكرو به آن منتقل مي شوند . اگر
تعداد آنها بيش از يكي باشد ، با كاما از يكديگر جدا مي گردند . برخلاف توابع
در ماكروها نيازي به تعريف نوع پارامترها نيست . بعنوان مثال دستور # define READINT(I )scanf("%d/&I)

ماكرويي بنام READINT تعريف ميكند كه داراي پارامترI است ، درهنگام فراخواني
اين ماكرو ( كه توسط نام آن انجام مي شود ) بايد آرگوماني را ذكر كنيم . اين
آرگومان در عبارت ("%d"/&I)scanf بجاي متغير I منظور شده و تابع scanf عددي را
از ورودي خوانده و در متغيري كه بعنوان آرگومان ذكر شده است قرار مي دهد . به
عنوان مثال اگر بخواهيم متغيري مثل distance رااز ورودي بخوانيم كافيست ماكروي
فوق را بصورت زير فراخواني كنيم : READINT( distance);

اگر تعريف ماكرو شامل عبارتي طولاني باشد ( به طوري كه در يك خط قابل بيان
نباشد ) مي توان آن را در دو يا چند خط ادامه داد . بدين منظور بايد در انتهاي
هر خط ناتمام ، از كاراكتر \(back slash() استفاده نمود . دستور زير را در نظر
بگيريد : # define IS_EQU( y )y% 4==0 && y %100 != 0 || \
y%400=0

همانطور كه در دستور فوق مشاهده مي گردد در انتهاي اولين خط ، از كاراكتر \
استفاده شد تا بتوان بقيه عبارت ماكرو را در خط بعدي تايپ نمود .
اگر ماكروي IS_EQU با پارامتري بنام year فراخواني گردد ، اين متغير بجاي y
قرار خواهد گرفت . يعني فراخواني : if( IS_EQU( year))

معادل دستور زير است : if( year %4= 0 && year %100 != 0 || year %400 == 0)

در فراخواني ماكروها بايد دقت كافي بخرج داد تا از اجراي آنها نتيجه مطلوبي
بدست آيد . بعنوان مثال ماكروي نوشته شده براي انجام عمل توان يك عدد را درنظر
بگيريد : # define SQURE( x )x*x

اكنون به دو فراخواني ماكرو SQURE توجه نماييد : S= SQURE(b( )1)

( با فراخواني فوق ، حاصل b*b در متغيري s قرار مي گيرد كه منظور برنامه نويس
برآورده مي شود ) . S= SQURE(x+1( )2)

در اثر اين فراخواني ، عبارت x+1 * x+1 ارزيابي شده و نتيجه آن در s قرار
مي گيرد كه با توجه به تقدم عملگرها ( كه تفدم عمل ضرب (*) بيشتر از تقدم عمل
جمع (+) است ) . نتيجه ارزيابي ، با توان عدد x+1 برابر نيست . براي رفع اين
مشكل دو راه حل وجود دارد : راه حل اول x+1 را در يك متغير قرار داده و سپس
آن متغير را بعنوان پارامتر به ماكرو منتقل كرد . راه حل دوم ماكرو را طوري
تعريف نمود كه از ايجاد اين اشتباه جلوگيري شود : # define SQURE(( x )*( x))

اكنون اگر ماكروي فوق با x+1 فراخواني گردد عبارت زير حاصل مي شود كه نتيجه
ارزيابي آن ، صحيح است . S=(( x+1 )*( x+1))

مثال 3: برنامه اي كه با استفاده از يك ماكرو ، مساحت دايره اي را محاسبه
مي نمايد . # define PI 3.14159
# define AREA(X( )PI*X*X)
main)(
{
float radius ;
printf("\n enter radius: " );
scanf("%f"/&radius );
printf("\n area is:" );
printf("%.2f "/AREA(radius ));
}

نمونه اي از خروجي برنامه مثال 3 : en

کيفيت مقاله :
عالی خوب متوسط ضعيف


ضميمه كردن فايل ها (file inclusion) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۶۶۲ مراجعه امروز
۴۲۵۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ضميمه كردن فايل ها (file inclusion)
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۷۰۸ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

ضميمه كردن فايل ها (file inclusion)

در زبان C مي توان در حين ترجمه (compile) برنامه ، يك يا چند فايل را به آن
ضميمه كرده و مورد پردازش قرار داد. به فايلهايي كه بدين طريق به برنامه ضميمه
ميشوند، header file گفته ميشود. ضميمه كردن فايل ها، توسط دستور پيش پردازنده #include
انجام مي شود . اين دستور بصورت هاي زير مورد استفاده قرار مي گيرد : "
اسم فايل #include "
<اسم فايل >#include
فايلهاي header مي توانند به دو دسته تقسيم شوند :
الف ) فايلهايي هستند كه همراه كامپايلر C وجود دارند و انشعاب همه آنها h.
است .
ب ) فايلهايي هستند كه توسط استفاده كننده نوشته مي شوند .
از روش اول استفاده دستور # include براي ضميمه فايلهايي استفاده مي شود كه
توسط استفاده كننده نوشته شده اند و از روش دوم ، براي ضميمه فايل هايي به كار
گرفته مي شود كه همراه كامپايلر C وجود داشته و معمولا" در فهرستي بنام include
قرار دارند .
فايلهاي header از اهميت ويژه اي برخوردارند زيرا : 1
بسياري از توابع مثل ()getchar و ()putchar در فايل هاي header مربوط به
سيستم ، بصورت ماكرو تعريف شده اند . 2
با فايل هاي header معمولي ( مربوط به استفاده كننده ) علاوه بر تعريف
ماكروها ، مي توان از بسياري از تعاريف تكراري جلوگيري كرد .

مثال 1: دستور زير ، موجب ضميمه شدن فايل stdio.h به برنامه مي گردد . # include

فرض كنيد كار ما طوري است كه همواره برنامه هايي مينويسيم كه نياز به محاسبه
مساحت هاي اشكال مختلفي مثل دايره ، بيضي و غيره دارد . بهتر است براي سهولت
كار ، مساحت كليه اشكال را بصورت ماكرو تعريف كرده و در يك فايل header قرار
دهيم . سپس در ابتداي برنامه مورد نظر، آن را توسط دستور # include معرفي كنيم
تا به برنامه ضميمه شود . نام فايل header را كه براي اين منظور نوشته مي شود h
.ar انتخاب كرده ، محتويات آن را مي توان بصورت زير نوشت : #define PI #.14159
#define AREA_CITCLE(radius )\
( PI*radius*radius)
#define AREA_SQUARE(length/width )\
( length*width)
#define AREA_TRIANGLE(base/height )\
( base*height/2)
#define AREA_ELLIPS(radius1/radius2 )\
( PI*radius1*radius2)
#define AREA_TRAPEZOID(heigth/side1/ \
side2( )heigth*(side1+side2)/2)

پس از تشكيل فايل ar.h مي توان با ضميمه نمودن اين فايل به هر برنامه اي كه
نياز به محاسبه مساحت اشكال هندسي ذكر شده در اين فايل را دارد ، از ماكروهاي
تعريف شده در اين فايل استفاده كرد .

مثال 2: برنامه اي كه با استفاده از فايل ar.h مساحت مثلثي را محاسبه ميكند. #include
#include
main)(
{
int bas/height/s;
float s;
base=10;
height=15;
s=AREA-TRIANGLE(base/hight);
printf("%f"/s);
}

نمونه اي از خروجي برنامه مثال 2 : the area of triangle

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستورات پيش پردازنده شرطي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۶۶۵ مراجعه امروز
۴۲۵۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستورات پيش پردازنده شرطي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۵۴۰ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

دستورات پيش پردازنده شرطي

در حالت معمولي ، دستورif براي تصميم گيري در نقاط مختلف برنامه بكار ميرود.
شرطهايي كه در دستور if ذكر مي شوند در حين اجراي برنامه ارزشيابي مي شوند .
يعني اگر شرط ذكر شده در دستور if چه درست باشد يا نادرست ، اين دستور و كليه
دستورات ديگر كه در بلاك if قرار دارند ترجمه مي شوند . ولي در دستورات پيش
پردازنده شرطي ، شرطي كه در آن ذكر مي شود در حين ترجمه ارزشيابي مي شود .
دستورات پيش پردازنده شرطي عبارتند از : # if/ # else/ # endif/ # ifdef/ # ifnder

دستور #if بصورت زير بكار مي رود :
عبارت شرطي # if
مجموعه دستورات # endif

عبارت شرطي كه در دستور # if ذكر مي شود ، عبارتي است كه مقدار آن در زمان
ترجمه معلوم است . اين عبارت در حين ترجمه ارزيابي مي شود . چنانچه داراي ارزش "
درستي " باشد مجموعه دستورات موجود در بين # if ( ابتداي بلاك ) و # endif
( انتهاي بلاك ) ترجمه خواهد شد وگرنه اين مجموعه دستورات ترجمه نمي گردد .

مثال 1: #include "stdio.h"
#define max 100
main)(
{
#if max>90
printf("compiled for array" );
printf(" qreater than 90\n");
#endif
}

خروجي برنامه مثال 1 : compiled for array greater than 90

وقتي برنامه مثال 1 ترجمه ميگردد شرط 90>MAX تست ميشود، چون اين شرط برقرار
است ، دستور بعدي ترجمه شده و آماده اجرا مي گردد كه نتيجه اجراي آن را نيز
مشاهده نموديد .
نحوه عمل #else همانند else در دستور if است ( مثال 2 ) .

مثال 2: #include "stdio.h"
#define max 10
main)(
{
#if max>99
printf("compiled for array...\n" );
#else
printf("compiled for small array" );
#endif
}

خروجي برنامه مثال 2 : compiled for small array

در برنامه مثال 2 چون شرط 99>MAX برقرار نيست ، لذا دستور بعد از آن ترجمه
نميشود. اما دستور بعداز #else ترجمه شده و پس از اجرا نتيجه زير حاصل ميگردد: "Compiled for small array"
#elif
مشابه دستور else if رفتار مي كند و بصورت زير استفاده مي شود :
عبارت شرطي 1 # if
مجموعه دستورات 1
عبارت شرطي # elif 2
مجموعه دستورات 2
عبارت شرطي # elif 3
مجموعه دستورات 3 .
.
.

عبارت شرطي # elif n
مجموعه دستورات n # endif

همانطور كه ملاحظه مي شود ، هر # elif به همراه يك عبارت شرطي است كه اگر
نتيجه ارزيابي آن ارزش " درستي " داشته باشد مجموعه دستورات مربوط به آن ترجمه
شده و كنترل به دستور بعداز# endif برمي گردد، وگرنه شرطهاي موجود در#elif هاي
بعدي مورد بررسي قرار مي گيرند ، اگر هيچكدام از عبارات شرطي ذكر شده در اين
ساختار داراي ارزش " درستي " نباشند ، هيچيك از مجموعه دستورات 1تا nا ترجمه
نخواهد شد .

مثال 3: #define US 0
#define ENGLAND 1
#define IRAN g
#define ACTIVE_COUNTRY US
main)(
{
#if ACTIVE_COUNTRY==US
char currency[]="dolar";
#elif ACTIVE_COUNTRY==ENGLAND
char curreney[]="pound";
#else
char curreney[]="rials";
#endif
printf("\n currency is:");
printf("%s"/currency);
}

خروجي برنامه مثال 3 : currency is:dolar

استفاده از #ifdefو #ifndefو روش ديگري براي پياده سازي ترجمه شرطي دستورات
است ( #ifdef يعني "if defined"و #ifndefو يعني "if not defined" ) .
دستور #ifdef بصورت زير بكار مي رود :
نام ماكرو #ifdef
مجموعه دستورات #endif

اگر ماكرويي كه نام آن در جلوي #ifndef ذكر شده است در يك دستور #define
تعريف شده باشد در اين صورت مجموعه دستورات ذكر شده ، ترجمه خواهند شد وگرنه
اين دستورات ترجمه نمي گردند .
دستور # ifndef كه عكس دستور #ifedf عمل مي كند بصورت زير استفاده مي شود :
نام ماكرو #ifndef
مجموعه دستورات #endif

اگر ماكرويي كه نام آن در جلوي # ifndef ذكر شده است در يك دستور # define
تعريف نشده باشد مجموعه دستورات ذكر شده ، ترجمه مي گردند وگرنه ترجمه نخواهند
شد .

مثال 4: #include "stdio.h"
#define TEN 10
main)(
{
#ifdef TEN
printf("\n TEN defined.");
#else
printf("\n TEN not defined.");
#endif
#ifndef ALPHA
printf("\n ALPHA is not defined.");
#endif
}

در برنامه مثال 4 دستور# ifedf تست مي كند كه آيا ماكروي TEN تعريف شده است
يا خير . چون اين ماكرو در اين برنامه تعريف شده است ، دستور بعد از آن ترجمه
شده و پس از اجراي نتيجه زير حاصل مي شود : TEN defined

دستور #ifndef تعريف يا عدم تعريف ماكروي ALPHA را تست مي كند كه چون اين كرو تعريف نشده است موجب خروجي زير مي شود :

کيفيت مقاله :
عالی خوب متوسط ضعيف


حذف ماكروهاي تعريف شده ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۶۶۸ مراجعه امروز
۴۲۶۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
حذف ماكروهاي تعريف شده
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۴۸۲ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

حذف ماكروهاي تعريف شده

اگر در برنامه ، ماكرويي توسط دستور # define تعريف گردد ، دستور # undef
مي تواند از يك نقطه دلخواه برنامه ( از نقطه اي كه اين دستور قرار مي گيرد )
به بعد ، تعريف ماكرو را بي اثر سازد . اين دستور بصورت زير بكار مي رود :
<نام ماكرو># undef
تعريف ماكرويي كه نام آن در دستور # undef آمده است از جايي كه اين دستور
در برنامه ظاهر مي گردد به بعد ، منتفي مي شود .

مثال : #define LEN 100
#define WIDTH 100
main)(
{
char array[LEN][WIDTH];
#undef LEN
#undef WIDTH
.
.
.

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسامي ماكروهاي از پيش تعريف شده ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۶۷۷ مراجعه امروز
۴۲۶۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسامي ماكروهاي از پيش تعريف شده
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۵۰۰ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

اسامي ماكروهاي از پيش تعريف شده

اسامي تعداد 5 ماكرو ( قبلا"تعريف شده است ) كه به همراه كامپايلر استاندارد
زبان C وجود دارند ، عبارتند از : - LINE( -1
- FILE( -2
- DATE( -3
- TIME( -4
- STDC( -5

ماكروي -LINE- حاوي شماره دستوري از فايل برنامه است كه در حال ترجمه شدن
مي باشد .
ماكروي -FILE- حاوي نام فايلي است كه اكنون در حال ترجمه شدن مي باشد .
ماكروي -DATE- حاوي رشته اي بصورت mm/dd/yy است و حاوي تاريخي است كه فايل
برنامه ، ترجمه شده است ( mm براي بيان ماه ، dd براي بيان روز و yy براي بيان
سال است ) .
ماكروي -TIME- حاوي رشته اي بصورت hh:mm:ss است و شامل زماني است كه فايل
برنامه ، ترجمه شده است ( hh براي بيان ساعت ، mm براي بيان دقيقه و ss براي
بيان ثانيه است ) .
ماكروي -STDC- مشخص مي كند كه كامپايلر مورد استفاده استاندارد است يا خير.
اگر محتويات اين ماكرو برابر با يك (1) باشد ، كامپايلر استاندارد و در غير د استاندارد نيست .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور پيش پردازنده #line ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۶۸۳ مراجعه امروز
۴۲۷۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور پيش پردازنده #line
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۵۰۴ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

دستور پيش پردازنده #line

دستور # line محتويات دو ماكروي -LINE و -FILE - را تغيير مي دهد . دستور # line
به صورت زير بكار مي رود : "
نام فايل " <شماره > # line
شماره ، يك عدد صحيح مثبت است كه مقدار جديد ماكروي -LINE- را مشخص مي كند
و " نام فايل " كه اختياري نيز هست ، محتويات جديد ماكروي -FILE- را تعيين
مي كند . ماكروي # line براي اشكال زدايي برنامه مفيد است .

مثال : #include "stdio.h"
#line 100
main)(
{
printf("\nprintf start at address:");
printf("%d\n"/_LINE)_;
}

در مثال بالا مقدار اوليه اي كه در ماكروي -LINE- قرار مي گيرد برابر با 100
است . لذا شماره دومين دستورprintf برابر با 105 خواهد بود. اين مطلب از خروجي امه كه چاپ محتويات ماكروي -LINE- است مشخص مي گردد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور پيش پردازنده # error ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۶۸۶ مراجعه امروز
۴۲۷۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور پيش پردازنده # error
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۴۵۵ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور پيش پردازنده # error

دستور # error موجب جلوگيري از ادامه ترجمه برنامه توسط كامپايلر شده و به
زير بكار مي رود :
پيام خطا # error
پيام خطا ، جمله اي است كه كامپايلر پس از رسيدن به اين دستور ، آن را بصورت
زير در صفحه نمايش ظاهر مي كند :
پيام خطا:Error directive شماره خط نام فايل :Error

مثال : main)(
{
int arr[4] / i ;
for( i=0 ; i < 100 ; i++)
{
if ( i > 4)
#error enter less than 20 ;
else
scanf("%d"/&arr[i] );
}

در حين ترجمه برنامه مثال بالا پيام زير صادر مي شود : Error directive : enter less than 20

کيفيت مقاله :
عالی خوب متوسط ضعيف


ساختمان ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۶۸۹ مراجعه امروز
۴۲۸۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ساختمان ها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۶۱۶ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

ساختمان ها

قبلا" مشاهده كرديم كه چگونه يك متغير ، يك قلم از داده را در خود نگهداري
مي كند و همچنين ديديم كه چگونه مي توان چند عنصر همنوع را در يك آرايه ذخيره
كرد . گاهي لازم است ، چند عنصر غير همنوع را تحت يك نام در حافظه ذخيره نمود .
ولي با مطالبي كه تاكنون گفته شد انجام اين كار ممكن نيست . بعنوان مثال ، اگر
بخواهيم اطلاعات مربوط به كارمندان موسسه اي را كه شامل نام كارمند ( از نوع
كاراكتري ) ، شماره كارمندي ( از نوع عدد صحيح ) ، حقوق ( از نوع عددي صحيح )
غيره است ، تحت يك نام ذخيره كنيم . در اين صورت متغير معمولي و آرايه جوابگوي
نياز ما نيستند . براي رفع اين مشكل در زبان C ، از نوعي داده به نام ساختمان
استفاده مي شود . بنابراين مي توان گفت كه : " ساختمان " در زبان C نامي براي ه اي از متغيرها است كه اين متغيرها مي توانند همنوع نباشند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


تعريف نوع ساختمان ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۶۹۵ مراجعه امروز
۴۲۸۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تعريف نوع ساختمان
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۵۸۱ بار مطالعه شده است
۱۳ نفر تا به حال به اين مقاله رای داده اند.

تعريف نوع ساختمان

براي تعريف نوع ساختمان ، از دستور struct بصورت زير استفاده مي شود : {
<نام ساختمان > struct
اجزاي ساختمان };

نام ساختمان ، از قانون نامگذاري براي متغيرها تبعيت مي كند. اجزاي ساختمان
متغيرهايي هستند كه قسمتي از ساختمان مي باشند و همانند يك متغير معمولي و يا
آرايه بايد اسم و نوع هر كدام مشخص باشد. به يك ساختمان نمونه كه براي نگهداري
اسم ، شماره كارمندي و حقوق كارمندان نوشته شده است توجه نماييد : struct personel {
char name [31];
int person;
int salary;
};

در تعريف نوع ساختمان بايد موارد زير را در نظر داشت : 1
حرف { مي تواند در همان خطي كه دستور struct آمده است نباشد . 2
دستور structبه ; ختم مي شود .
با مطالبي كه تاكنون گفته شد، روش تعريف نوع ساختمان مشخص گرديد. ولي تعريف
ساختمان براي استفاده از آن كافي نيست . بلكه پس از تعريف نوع ساختمان بايد
متغيرهايي از اين نوع را تعريف كرده وسپس اين متغيرها را در برنامه بكارگرفت .
براي روشن شدن موضوع ، يادآوري مي كنيم كه intو floatو دو نوع تعريف شده براي
كامپيوتر هستند كه بايد متغيرهايي از اين نوع ها تعريف و سپس از آنها استفاده
گردد . تعريف متغيرهايي از نوع ساختمان به دو روش امكان پذير است :
روش اول ) پس از تعريف نوع ساختمان ، متغيرهاي از نوع ساختمان با دستور struct
تعريف مي شوند .
در اين روش از شكل كلي زير استفاده مي شود : ;
نوع ساختمان <اسامي متغيرهاي ساختمان >struct "
نوع ساختمان " ، اسمي است كه قبلا" در دستور struct ساختار آن مشخص شده
است . " اسامي متغيرهاي ساختمان " ، متغيرهايي را مشخص مي كند كه بايد از نوع
ساختماني كه اسم آن در نوع ساختمان مشخص شده است باشد . اگر تعداد اين متغيرها
بيش از يكي باشد با كاما از يكديگر جدا مي شوند . بعنوان مثال ، دستور struct personel p1/p2;

دو متغير ساختمان به اسامي p1و p2و را تعريف مي كند كه از نوع ساختمان personel
هستند .
روش دوم ) در حين تعريف نوع ساختمان ( بلافاصله پس از تعريف نوع ) اسامي
متغيرهاي ساختمان مشخص مي گردند .
در اين روش از شكل كلي زير استفاده مي شود . {
اسم ساختمان struct
اجزاي ساختمان ;
اسامي متغيرهاي ساختمان }
در اين روش ، ذكر اسم ساختمان اجباري نيست . در دستور زير دقت كنيد : struct {
char name [31];
int persno;
int salary;
} p1/p2;

دستور فوق دو متغير ساختمان به اسامي p1و p2و را تعريف مي كند كه ساختار خص شده است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دسترسي به اجزاي ساختمان ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۶۹۸ مراجعه امروز
۴۲۹۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دسترسي به اجزاي ساختمان
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۵۶۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دسترسي به اجزاي ساختمان

همانطوركه مشاهده شد هر ساختمان داراي چند جزئ است كه براي دسترسي به هر يك
از اجزاي آن از روش كلي زير استفاده مي شود :
<اسم متغير از نوع ساختمان >.<نام جزئ>
بعنوان مثال ، با فرض اين كه p1و p2و دو متغير از نوع ساختمان بوده و داراي 3
جزئ به اسامي name، person،و salaryو باشند ، دستورات زير موجب دسترسي به هر
يك از اجزاي متغير p1 مي شوند كه در مورد p2 نيز ميتوان به همين طريق عمل كرد: p1.name
p1.persno
p1.salary

اگر اجزاي ساختمان ، از نوع آرايه باشند ، ذكر انديس آرايه جهت دسترسي به
عناصر آن الزامي است . بعنوان مثال ، دستور زير را در نظر مي گيريم : struct student {
char name [31];
int cours [10];
int unit [10];
int grade [10];
int persno;
} st1.st2;

در دستور فوق بعضي از اجزاي ساختمان student بصورت آرايه اي تعريف شده اند .
دستورات زير موجب دسترسي به اجزاي متغير ساختمان st1 مي شوند : st1.cours [1]
st1.cours [i]
st1.name

همانطوركه مشاهده شد اگر اجزاي ساختمان رشته اي باشند ميتوان به تك تك عناصر
آن نيز دسترسي پيدا كرد (st1.name[i])
در مورد مقدار دادن به اجزاي ساختمان مي توان همانند يك متغير معمولي عمل
كرد . لذا با فرض اين كه st1 متغير ساختماني باشد كه قبلا" تعريف شده است
دستورات زير معتبر مي باشند : st1.persno=1243;( 1)
printf("\n %d"/st1.persno);( 2)
gets(st1.name);( 3)
for( i=0;i<10;i++( )4)
scanf("%d"/&st1.unit[i]);

مثال : برنامه اي كه دو عدد موهومي را از ورودي خوانده و مجموع آنها را
محاسبه مي كند و به خروجي مي برد . main)(
{
struct complex
{
int real ;
int unreal ;
} comp1 / comp2 /result ;
printf("\n enter the real part");
printf(" for number %d:"/1);
scanf("%d"/&comp1.real );
printf("\n enter the unreal part");
printf(" for number %d:"/1 );
scanf("%d"/&comp1.unreal );
printf("\n enter the real part ");
printf(" for number %d:"/2 );
scanf("%d"/&comp2.real );
printf("\n enter the unreal part");
printf(" for number %d:"/2 );
scanf("%d"/&comp2.unreal );
result.real=comp1.real+comp2.real;
result.unreal=
comp1.unreal+comp2.unreal;
printf("\nthe result of sum is:");
printf("\nreal part=" );
printf("%d"/result.real);
printf("\n unreal part" );
printf("=%d"/result.unreal);
}

نمونه اي از خروجي برنامه مثال بالا : enter the real part for number 1:12
enter the unreal part for number 1:25
enter the real part for number 2:5
enter the unreal part for number 2:19

the result of sum is:

real part=17

un

کيفيت مقاله :
عالی خوب متوسط ضعيف


ارزش دهي اوليه به ساختمان ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۷۰۱ مراجعه امروز
۴۲۹۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ارزش دهي اوليه به ساختمان
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۴۷۴ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

ارزش دهي اوليه به ساختمان

مي توان به متغيرهاي از نوع ساختمان كه داراي كلاس حافظه استاتيك و خارجي
باشند ، همانند آرايه ها مقدار اوليه داد . براي اين منظور مقادير اوليه در بين {
و} قرار گرفته و با كاما از يكديگر جدا ميشوند. مقاديري كه به متغير ساختمان
قرار مي گيرند : اولين مقدار به اولين جزئ، دومين مقدار به دومين جزئ و n امين
مقدار به n امين جزئ نسبت داده مي شود . اگر تعداد مقادير ، از تعداد اجزاي
متغير ساختمان كمتر باشند ، مقدار بقيه اجزاي عددي برابر با صفر و مقدار بقيه
اجزاي رشته اي برابر با NULL ( كاراكتر تهي ) خواهد شد .

مثال : ساختمان student را كه در زير آمده است در نظر بگيريد : struct student {
char name[21] ;
char address[30] ;
int grade[10] ;
int stno ;
} s1/ s2 ;

اكنون مجموعه دستورات زير را ملاحظه نماييد : struct student st1={( 1)
"ali"/"mohammad"/
"{0}/15} ;

struct student st2={0} ;( 2)

struct student st3={( 3)
"ahmad"/
'\0'/{15/20}/0} ;

struct student st4={"reza"} ;( 4)

دستور (1) ، مقدار "ali"در nameر، "mohammad"،در addressر ، صفر در كليه
عناصر آرايه grade و 15در stnoر از متغير st1 قرار مي گيرد . در دستور (2)
كليه اجزاي عددي متغير st2 ، مقدار صفر و اجزاي كاراكتري ، مقدار تهي را
مي پذيرند ، در دستور (3) ، مقدار "ahmad"در nameر ، رشته تهي در address ، 15
و 20 بترتيب در محل هاي اول و دوم آرايه grade و صفر در stno متغير st3 قرار
مي گيرد . در دستور (4) ، مقدار "reza" در جزئ name از متغير st4 قرار گرفته و ن متغير مقدار صفر و اجزاي غيرعددي مقدار تهي را مي پذيرند.

کيفيت مقاله :
عالی خوب متوسط ضعيف


انتساب ساختمانها به يكديگر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۷۰۴ مراجعه امروز
۴۲۹۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انتساب ساختمانها به يكديگر
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۴۳۹ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

انتساب ساختمانها به يكديگر

در گونه هاي اوليه زبان C ، انتساب يك ساختمان به ساختمان ديگر امكان پذير
نبود ولي در گونه هاي جديد C و همچنين در توربو C انتساب متغيرهاي ساختمان كه
از يك نوع باشند امكان پذير است .

مثال : برنامه اي كه مشخصات چند دانشجو را بهمراه معدل آنها از ورودي خوانده
و سپس دانشجويي را كه دومين معدل را از نظر بزرگي دارد پيدا مي كند . struct student {
char name[30] ;
float grade ;
} ;
main)(
{
int i / n ;
float y ;
struct student st1={0} ;
struct student st1={0}/ st ;
printf("\n enter the number " );
printf(" of student :" );
scanf("%d"/&n );
for( i=1 ; i <= n ; i++)
{
printf("\nenter name of student");
printf(" %d: "/i );
scanf("%s"/st.name );
printf("\nenter grade of student");
printf(" %d: "/i );
scanf("%f"/&y );
st.grade=y ;
if( st.grade > st1.grade)
{
st2=st1 ;
st1=st ;
}
else if( st.grade > st2.grade)
st2=st ;
}
printf("\nthe name of second ");
printf("student is: %s"/st2.name );
printf("\n\nthe grade of second" );
printf(" student is:" );
printf("%.2f"/st2.grade );
}

نمونه اي از خروجي برنامه مثال بالا : enter the number of student:5
enter name of student 1:ali
enter grade of student 1:12.6
enter name of student 1:sadegh
enter grade of student 2:18.2
enter name of student 3:reza
enter grade of student 3:14.5
enter name of student 4:mohammad
enter grade of student 4:12
enter name of student 5:ahmad
enter grade of student 5:15
the name of second student is:ahmad
the grade of second student is:15.00

کيفيت مقاله :
عالی خوب متوسط ضعيف


آرايه اي از ساختمانها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۷۰۷ مراجعه امروز
۴۲۹۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آرايه اي از ساختمانها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۸/۱۳۸۱ اين مقاله ۱۴۵۰ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

آرايه اي از ساختمانها

يكي از بيشترين موارد كاربرد ساختمانها ، تعريف شدن بصورت آرايه مي باشد .
براي تعريف آرايه اي از ساختمان ، ابتدا بايد نوع ساختمان را تعريف كرده وهمانند
تعريف متغيرهاي معمولي ، آرايه اي از آن نوع را تعريف نمود . بعنوان مثال دستور struct personel st[100];

آرايه 100 عنصري st را كه هر عنصر آن از نوع ساختمان هستند تعريف مي كند .
اگر فرض شود كه persno يكي از اجزاي ساختمان personal باشد به طريق زير ميتوان
به اين جزئ دسترسي پيدا كرد و مقداري را به آن نسبت داد : st [i] .persno= 100;

دستور فوق موجب مي شود تا مقدار جزئ persno از عنصر i ام آرايه st برابر با 100
گردد .

مثال : برنامه اي كه مشخصات تعدادي از افراد را كه شامل نام و آدرس ( شامل :
خيابان ، شهر و ... ) است ، از ورودي خوانده و در آرايه اي از ساختمان ها قرار
مي دهد . اين برنامه قادر است : فردي را از آرايه حذف كند ، فرد جديدي را به
آرايه اضافه نمايد و محتويات كل آرايه را چاپ كند . قبل از نوشتن اين برنامه
جهت درك صحيح آن ، ساختار سلسله مراتبي و وظايف هر يك از توابع شكل ( الف ) را
بيان مي كنيم :
ؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|

ؤؤؤؤؤؤؤؤؤؤؤؤ |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |menu_seletc)(| | enter )(| | delete )(| | list )(| |init_list )(|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |find_free )(|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل ( الف ) . نمودار سلسله مراتبي برنامه مثال

وظيفه تابع ()main : تعريف ساختمان ها ، توابع و فراخواني توابع مطابق شكل
( الف ) .
وظيفه تابع ()menu-slselect : ظاهر نمودن منويي در صفحه نمايش جهت انتخاب
نوع عمل برنامه .
وظيفه تابع ()enter : فراخواني تابع ()find-fefree جهت پيدا كردن جاي خالي
در آرايه ، خواندن اطلاعات از صفحه كليد و وارد كردن آنها در جاي پيدا شده در
آرايه .
وظيفه تابع ()delete : حذف افراد از آرايه ( براي اين منظور اولين محل از
جزئ name را برابر با '\0' قرار مي دهد ) .
وظيفه تابع ()list : نمايش محتويات كامل آرايه .
وظيفه تابع ()init-lslist : ارزش دهي به عناصر آرايه ( اولين محل از جزئname
را برابر با '\0' قرار مي دهد ) .
وظيفه تابع ()find-fefree : پيدا كردن جاي خالي در آرايه جهت قرار دادن
اطلاعات جديد در آن محل . /* program example 8 - 4 */

#include "stdio.h"
#include "stdlib.h"
#define MAX 100
struct addr{
char name[10] ;
char street[15] ;
char city[10] ;
char state[3] ;
unsigned long int zip;
} addr_info[MAX] ;
void init_list(void)/enter(void );
void delete(void)/list(void );
int menu_select(void)/find_free(void);
main(void)
{
char choice / ch ;
init_list )(;
for(;;){
choice=menu_select )(;
switch(choice)
{
case 1;
enter{} ;
break ;
case 2;
delete )(;
break ;
case 3;
list )(;
break ;
case 4;
exit(0 );
}
}
}
void init_list(void)
{
register int t ;
for(t=0 ; t addr_info[t].name[0]='\0' ;
}
menu_select(void)
{
char s[10] ;
int c ;
clrscr )(;
gotoxy(29.6 );
printf("1 )<< enter a name >>");
gotoxy(29.8 );
printf("2 )<< delete a name >>");
gotoxy(29.10 );
printf("3 )<< list the file >>");
gotoxy(29.12 );
printf("4 )<< Quit >>");
do {
gotoxy(24/15 );
printf(" Please enter your" );
printf(" choice(1-4:)");
gets(s );
c=atoi(s );
} while(c < 0 || c > 4 );
return( c );
}
void enter(void)
{
int slot ;
char s[80] ;
slot=find_free )(;
if(slot==-1)
{
printf("\n list full");
return ;
}
gotoxy(5/17 );
printf("enter name:" );
gets(addr_info[slot].name);

gotoxy(40/17 );
printf("enter street:" );
gets(addr_info[slot].street);

gotoxy(5/19 );
printf("enter city:" );
gets(addr_info[slot].city);

gotoxy(40/19 );
printf("enter state:" );
gets(addr_info[slot].state);

gotoxy(22/21 );
printf("enter zip:" );
gets(s );

addr_info[slot].zip=
strtoul(s/'\0'/10 );
}
find_free(void)
{
register int t ;
for(t=0 ; addr_info[t].name[0]
&& t < MAX ; ++t );
if(t==MAX )return- 1 ;
return t ;
}
void delete(void)
{
int slot ;
gotoxy(28/19 );
printf("enter record #(0-99:)");
scanf("%d"/&slot );
if(slot>=0 && slot addr info[slot].name[0]='\0';
}
void list(void)
{
register int t ;
int r=0 ;
char ch ;
clrscr )(;
gotoxy(25/2 );
printf(" << all information in");
printf(" list are:>>" );
gotoxy(13/3 );
printf("**********************");
printf("*******************" );
printf("********************" );
gotoxy(10/4 );
printf(" name street");
printf(" city " );
printf(" state zip");
printf(" " );
gotoxy(10/5);
;
("ؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ ")printf ;
(" ؤؤؤؤؤؤ ")printf ;
("ؤؤؤؤ ؤؤؤؤؤؤؤ ")printf printf(" " );
for(t=0;t {
if(addr_info[t].name[0])
{
gotoxy(14/6+r );
printf("%s "/addr_info[t].name);
gotoxy(26/6+r );
printf("%s "/addr_info[t].street);
gotoxy(40/6+r );
printf("%s "/addr_info[t].city);
gotoxy(54/6+r );
printf("%s "/addr_info[t].state);
gotoxy(70/6+r );
printf("%1u "/addr_info[t].zip);
r++ ;
}
}
gotoxy(13/6+r );
printf("********************");
printf("*********************" );
printf("********************" );
gotoxy(27/7+r );
printf("press any key to continue");
ch=getch )(;
}

نكته اي كه در مورد برنامه مثال بالا بايد در نظر داشت اين است كه در اين
برنامه از توابع كتابخانه اي ()gotoxy ، ()atoi و ()strtoul استفاده شده است .
نمونه اي از خروجي برنامه مثال بالا : 1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< Quit >>

Please enter your choice(1-4:)1

enter name:mohammad
enter street:daneshgah
enter city:mashhad
enter state:23
enter zip:123

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< Quit >>

Please enter your choice(1-4:)2

enter name:naser
enter street:asrar
enter city:mashhad
enter state:34
enter zip:432

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< Quit >>

Please enter your choice(1-4:)3

***************************************
name street city state zip
--- ------ ------ ------- --------
mohammad daneshgah mashhad 23 123
naser asrar mashhad 34 432
***************************************
press

کيفيت مقاله :
عالی خوب متوسط ضعيف


تعريف ساختمان ها به صورت لانه اي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۷۱۰ مراجعه امروز
۴۳۰۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تعريف ساختمان ها به صورت لانه اي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۰/۸/۱۳۸۱ اين مقاله ۱۴۴۵ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

اجزاي يك ساختمان ميتوانند يك متغير معمولي ، آرايه و يا يك ساختمان باشند.
دو مورد اول را قبلا" مشاهده كرديم . در اين قسمت به بررسي مورد سوم مي پردازيم .
وقتي كه اجزاي يك ساختمان از نوع ساختمان باشند براي دسترسي به اجزاي آن بايد
اسامي متغيرهاي ساختمان را از بالاترين ساختمان به داخلي ترين ساختمان ذكر كرد.

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

#define MAX 100
main)(
{
int i / n /sumage=0 / maxold=0 ;
struct data {
int day ;
int month ;
int year ;
} today ;
struct employee {
char name [30];
int persno ;
struct data workdate ;
int age ;
int old ;
} emp[MAX] ;
struct employee maxemp={0} ;
printf("\n enter the number of");
printf(" employee: " );
scanf("%d"/&n );
printf("\n enter date" );
printf("(day month year:)" );
scanf("%d"/&today.day );
scanf("%d"/&today.month );
scanf("%d"/&today.year );
for( i=0 ; i < n ; i++)
{
printf("\n enter name:" );
scanf("%s"/emp[i].name );
printf("\n enter personel " );
printf("number: " );
scanf("%d"/&emp[i].persno );
printf("\n enter today date" );
pintf("(day month year:)" );
scanf("%d"/&emp[i].workdate.day );
scanf("%d"/&emp[i].workdate.month );
scanf("%d"/&emp[i].workdate.year );
printf("\n enter age: ");
scanf("%d"/&emp[i].age );
if( today.month <
emp[i].worldate.month ||
( today.month ==
emp[i].workdate.month &&
today.day >=
emp[i].workdate.day))
emp[i].old=today.year-
emp[i].workdate.year ;
else
emp[i].old=today.year-
emp[i].workdate.year - 1 ;
if( emp[i].old > maxold)
{
maxold=emp[i].old ;
maxemp=emp[i] ;
}
sumage+=emp[i].age ;
}
printf("\n the average of age");
printf(" is: %d"/sumage/n );
printf("\n the specification ");
printf("of a older person:" );
printf("\n the name is : ");
printf("%s"/maxemp.name );
printf("\n the persno is:");
printf("%d"/maxemp.persno );
printf("\n the age is :");
printf(": %d"/maxemp.age );
printf("\n the old is:");
printf("%d"/maxemp.old );
}

نمونه اي از خروجي برنامه مثال بالا : enter the number of employee:2
enter today date(day month year:)25 12 70
enter name:ahmad
enter personel number:1231
enter date(day month year:)12 2 60
enter age: 30
enter name:mohammad
enter personel number:4323
enter date(day month year:)2 12 55
enter age: 40

the average of age is:35
the specification of a older person:
the name is : mohammad
the persno is:4323
the age is :40
the old is:

کيفيت مقاله :
عالی خوب متوسط ضعيف


انتقال ساختمان ها به توابع ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۷۱۹ مراجعه امروز
۴۳۱۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انتقال ساختمان ها به توابع
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۰/۸/۱۳۸۱ اين مقاله ۱۴۶۳ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

ساختمانها و يا آرايه اي ازساختمان كه تاكنون در برنامه ها بكار گرفته شده اند
يا بصورت عمومي تعريف شدند و يا درتابعي كه مورداستفاده قرار مي گرفتند، تعريف
شدند . ساختمانها و يا اجزاي آنها مي توانند به عنوان آرگومان ، به تابع منتقل
شده و يا اطلاعاتي را به تابع فراخواننده برگردانند .
براي انتقال اجزاي ساختمان به تابع ، همانند يك متغير معمولي عمل مي شود .
با اين تفاوت كه نام متغير ساختمان را بايد به همراه جزئ مورد نظر، در آرگومان
تابع ذكر كرد و بايد توجه داشت كه پارامتر تابع نيز بايد همنوع با آرگومان
متناظر با آن تعريف گردد . بعنوان مثال ، ساختمان زير را در نظر بگيريد : struct student {
char x;
int ston;
char name[31];
} st1;

هر يك از دستورات زير موجب انتقال مقادير اجزاي متغير ساختمان st1 به تابعي
بنام ()func مي شوند . func( st1.x);
func( st1.ston);
func( st1.name[5]);

براي انتقال آدرس هاي اجزاي متغير ساختمان به توابع بايد از عملگر& استفاده
نمود . براي توضيح بيشتر به مجموعه زير توجه نماييد : func( &st1.x);
func( &st1.ston);
func( &st1.name[5]);
func( st1.name);

همانطور كه در مجموعه دستورات فوق مشاهده مي گردد عملگر & بايد قبل از نام
متغير ساختمان ظاهر گردد ولي در آخرين دستور ، چون name يك آرايه است ، براي
انتقال آن نيازي به عملگر & نيست .

مثال 1:

#include "stdio.h"
main)(
{
struct ss{
char name[20] ;
int x ;
} s ;
scanf("%s"/s.name );
scanf("%d"/&s.x );
test(s.name );
}
test(char *s)
{
while(*s)
{
printf("%c"/*s );
s++ ;
}
}

براي انتقال كامل متغيرهاي ساختمان به توابع بايد توجه داشت كه اين انتقال
از طريق فراخواني با ارزش ، صورت مي گيرد .
به هنگام انتقال كامل متغيرهاي ساختمان ، همنوع بودن آرگومان و پارامتر مهم
است و برنامه نويس بايد اين مطلب را در نظر داشته باشد ( مثال 2 ) .

مثال 2: برنامه اي كه چگونگي تعريف پارامتر و آرگومان هاي ساختمان را نشان
مي دهد .

main)(
{
struct {
int a/b ;
char ch ;
} arg ;
arg.a=1000 ;
func(arg );
}
func(parm)
struct {
int x/y ;
char ch ;
} parm ;
{
printf("%d"/parm.x );
}

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

مثال 3: struct struct_type {
int a/b ;
char ch ;
} ;
main)(
{
struct struct_type arg ;
arg.a=1000 ;
func(arg );
}
func(parm)
struct struct_type parm ;
{
printf("\n %d"/parm.a );
}

پارامتر parm را در تابع ()func علاوه بر آنچه كه در مثال 3 آمده است ، به
طريق زير نيز مي توان تعريف كرد : func( struct struct_type parm)

مثال 4: برنامه اي كه چگونگي انتقال كامل يك ساختمان را به تابع و انتقال
اطلاعات از طريق ساختمان به تابع فراخواننده را نشان مي دهد .

struct personel
{
char name[30] ;
int agnumb ;
} ;
main)(
{
struct personel agent1 / agent2 ;
struct personel newname )(;
agent1=newname )(;
agent2=newname )(;
list(agent1 );
list(agent2 );
}
struct personel newname)(
{
char numstr[80] ;
struct personel agent ;
printf("\n\t << New agent >> \n");
printf("Enter name: " );
gets(agent.name );
printf("\n agent number(3 digit)");
gets(numstr );
agent.agnumb=atoi(numstr );
return(agent );
}
list(age)
struct personel age ;
{
printf("\n\t<< agent: >>\n" );
printf("\n Name : %s \n"/age.name);
printf("\n agent number: ");
printf(" %3d\n"/age.agnumb );
}

نمونه اي از خروجي برنامه مثال 4 :

<< New agent >>
Enter name:reza

agent number(3 digit )213

<< New agent >>
Enter name:mohammad

agent number(3 digit )123

<< agent : >>

Name:reza

agent number: 213

<< agent : >>

Name:mohammad

a

کيفيت مقاله :
عالی خوب متوسط ضعيف


اشاره گرهاي ساختمان ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۷۲۲ مراجعه امروز
۴۳۱۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اشاره گرهاي ساختمان
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۰/۸/۱۳۸۱ اين مقاله ۱۵۴۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

در زبان C تعريف اشاره گر از نوع ساختمان ، همانند تعريف ساير انواع اشاره گرها
امكان پذير است . اشاره گر ساختمان به دو منظور استفاده مي شود : 1
امكان فراخواني به روش ارجاع در توابعي كه داراي آرگومان از نوع ساختمان
هستند را فراهم مي كند . 2
براي ايجاد ليست هاي پيوندي و ساير ساختمان داده هايي كه با تخصيص حافظه
پويا سر و كار دارند بكار مي رود .
وقتي كه ساختمان ها از طريق فراخواني به روش ارجاع به توابع منتقل مي شوند
سرعت انجام عمليات بر روي آنها بيشتر مي گردد. لذا در حين فراخواني توابع بهتر
است بجاي ساختمان ، آدرس آن را منتقل نمود. عملگر& براي مشخص كردن آدرس ساختمان
( همانند ساير متغيرها ) مورد استفاده قرار مي گيرد .
تعريف اشاره گرهاي ساختمان همانند تعريف متغيرهاي ساختمان است . بااين تفاوت
كه در جلوي اسم متغير ، علامت * قرار مي گيرد. بعنوان مثال ، ساختمان زير را در
نظر بگيريد : struct bal {
float balance ;
char name[80] ;
} person ;
struct bal *p;

در مجموعه دستورات فوق ، person يك متغير ساختمان وp يك اشاره گر به ساختمان
تعريف شده است . لذا دستور p= &person;

آدرس متغير ساختمان person را در اشاره گر p قرار مي دهد . براي دسترسي به
محتويات اجزاي ساختمان از طريق اشاره گر، بايد اشاره گر را در داخل پرانتز محصور
نمود . بعنوان مثال دستور ( *p.)balance

موجب دسترسي به عنصر balance از ساختمان person ميشود. علت قرار دادن متغير
اشاره گر ساختمان در پرانتز ، اين است كه تقدم عملگر نقطه (.) از عملگر * بالاتر
است .
بطور كلي براي دسترسي به اجزاي ساختماني كه يك اشاره گر به آن اشاره مي كند
به دو روش مي توان عمل كرد : 1
ذكر نام اشاره گر در داخل پرانتز و سپس نام عنصر مورد نظر كه با نقطه از
هم جدا مي شوند ( مثل دسترسي به عنصر balance از ساختمان person توسط اشاره گر ( . p
2
ؤؤ كه روش مناسب تري است . اگر بخواهيم با استفاده از > استفاده از عملگر
ؤؤ به عنصر >عملگر balance از ساختمان person دسترسي داشته باشيم بايد به طريق
زير عمل كنيم : balance
ؤؤ > p

مثال 1: برنامه اي كه با استفاده از اشاره گرهاي ساختمان ، يك timer را شبيه
سازي مي كند .

struct tm
{
int hours ;
int minutes ;
int second ;
} ;
main)(
{
struct tm time ={0} ;
for( ;;)
{
update( &time );
display( &time );
}
}
update( struct tm *t)
{
( *t.)second ++ ;
if(( *t.)second == 60)
{
( *t.)second=0 ;
( *t.)minutes ++ ;
}
if(( *t.)minutes == 60)
{
( *t.)minutes=0 ;
( *t.)hours ++ ;
}
if(( *t.)hours==24)
( *t.)hours=0 ;
delay )( ;
}
display(struct tm *t)
{
gotoxy(70/2 );
printf("\n%2d:"/(*t.)hours );
printf("%2d:"/(*t.)minutes );
printf("%2d"/(*t.)second );
}
delay)(
{
long int t ;
for( t=1 ; t < 128000 ; ++t );
}

همانطور كه در مثال 1 مشاهده مي شود براي دسترسي به اجزاي ساختمان از عملگر *
ؤ ، تابع ()> استفاده شده است كه جهت آشنايي با عملگر update را با اين عملگر
بازنويسي مي كنيم :

update( struct tm *t)
{
second ++
;
ؤ> t
(َsecond == 60ؤ> t) if {
;
َsecond=0ؤ> t minutes ++
;
ؤ> t }

(َminutes == 60ؤ> t) if {
;
َminutes=0ؤ> t ;
hours ++ؤ> t }

(َhours==24ؤ> t) if ;
َhours=0ؤ> t delay )( ;
}

مثال 2: برنامه اي كه مشخصات مربوط به تعدادي از دانشجويان را خوانده و در
آرايه اي از ساختمان ها قرار مي دهد . مشخصات دانشجو عبارتند از: 1 نام دانشجو 2
شماره دانشجويي 3 تعداد درس ترم جاري 4 نمره هر درس . اين برنامه پس از
خواندن اطلاعات دانشجو معدل آنها را نيز محاسبه مي كند و در آرايه قرار مي دهد.
امكان حذف دانشجويي از آرايه ، مشاهده اطلاعات يك يا چند دانشجو ، پيدا كردن
دانشجويان مشروط ( معدل كمتر از 12 ) و دانشجويان ممتاز ( معدل بالاتر از 17 )
از جمله وظايف اين برنامه است .
قبل از مشاهده ليست كامل برنامه ، نمودار سلسله مراتبي آن را رسم كرده ( شكل
الف ) و وظايف هر يك از توابع را تشريح مي كنيم :

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |init_list)(||delete)(|| list)(||list1)(||list2)(||enter)(||menu_select)(|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | | |

ؤؤؤؤؤؤؤؤؤؤؤؤؤ| | ؤؤؤؤؤؤؤؤؤؤؤ |
()||find_free |ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤ| ||()| |print()|title |
|ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ | |
|
ؤؤؤؤؤؤؤؤؤؤؤ |
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ |title)(| |print)(||
|
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ |

ؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ |title)(| |print)(|

ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ

شكل الف . نمودار سلسله مراتبي برنامه مثال 2

وظيفه تابع ()main : تعريف بعضي از متغيرها و فراخواني توابع ديگر مطابق
نمودار سلسله مراتبي شكل الف .
وظيفه تابع init-list : در ابتداي تابع main فراخواني شده و با NULL كردن
اولين محل جزئ name ، آرايه را ارزش دهي مي كند .
وظيفه تابع ()enter : ورود اطلاعات به آرايه .
وظيفه تابع ()delete : اين تابع براي حذف ركوردهايي از آرايه مورد استفاده
قرار ميگيرد. براي اين منظور اولين محل جزئ name را برابر با NULL قرار ميدهد.
وظيفه تابع ()list : بررسي آرايه ، جهت انتقال كامل اطلاعات آن به خروجي با
استفاده از دو تابع ()title و ()print .
وظيفه تابع ()list1 : بررسي آرايه ، جهت پيدا كردن دانشجويان مشروط و انتقال
اطلاعات اين دانشجويان به خروجي ، توسط دو تابع ()title و ()print .
وظيفه تابع ()list2 : بررسي آرايه ، ئهت پيدا كردن دانشجويان ممتاز و انتقال
اطلاعات آنها به خروجي ، توسط دو تابع ()title و ()print .
وظيفه تابع ()menu-select : ظاهر نمودن منويي در صفحه نمايش جهت درخواست
انجام كار از برنامه .
وظيفه تابع ()find-free : پيدا كردن اولين محل خالي آرايه جهت قرار دادن
اطلاعات جديد در آن توسط تابع ()enter .
وظيفه تابع ()title : چاپ عنوان براي خروجي .
وظيفه تابع ()print : چاپ اطلاعات موجود در آرايه در صفحه نمايش .

   #include "stdio.h"
#include "stdlib.h"
#define MAX 100
struct  student {
char   name[10] ;
float  mead ;
int    unit ;
int    number ;
int stno;
} st_info[MAX] ;
float x ;
int r=0 ;
void init_list(void)/enter(void );
void delete(void)/list(void)/list1)(/list2)(;
int menu_select(void)/find_free(void );
float sumgrade ;
int   sumunit ;
int unit1/t ;
main(void)
{
char choice ;
init_list )(;
for(;;){
choice=menu_select )(;
switch(choice)
{
case 1:
enter )(;
break ;
case 2:
delete )(;
break ;
case 3:
list )(;
break ;
case 4:
list1 )(;
break ;
case 5:
list2 )(;
break ;
case 6:
exit(0 );
}
}
}
void init_list(void)
{
register int n ;
for(t=0 ; t
              st_info[t].name[0]='\0' ;
}
menu_select(void)
{
char s[10] ;
int c ;
clrscr )(;
gotoxy(29/3 );
printf("1 )<< enter a name       >>");
gotoxy(29/5 );
printf("2 )<< delete a name      >>");
gotoxy(29/7 );
printf("3 )<< list the file      >>");
gotoxy(29/9 );
printf("4 )<< list for probation >>");
gotoxy(29/11 );
printf("5 )<< list for exelent   >>");
gotoxy(29/13 );
printf("6 )<<         Quit       >>");
do {
gotoxy(27/15 );
printf(" Please enter your " );
printf("choice(1-6 :)" );
gets(s );
c=atoi(s );
} while(c < 0 || c > 6 );
return( c );
}
void enter(void)
{
float grade ;
int slot /j ;
char s[80] ;
sumgrade=0 ;
sumunit=0 ;
slot=find_free )(;
if(slot==-1){
printf("\n list full" );
return ;
}
gotoxy(5/17 );
printf("enter name:" );
gets(st_info[slot].name );

gotoxy(5/18 );
printf("enter stno:" );
scanf("%d"/&st_info[slot].stno );

gotoxy(5/19 );
printf("enter number:" );
scanf("%d"/&st_info[slot].number );
for(j=1;j<=st_info[slot].number;j++)
{
gotoxy(40/17 );
printf("                        ");
gotoxy(40/17 );
printf("enter grade number %d:"/j);
scanf("%f"/&grade );
gotoxy(40/19 );
printf("                        ");
gotoxy(40/19 );
printf("enter unit of grade %d:"/j);
scanf("%d"/&unit1 );
sumgrade+=grade*unit1 ;
sumunit+=unit1 ;
}
st_info[slot].mead=sumgrade/sumunit ;
st_info[slot].unit=sumunit ;
}
find free(void)
{
register int t ;
for(t=0;st_info[t].name[0] &&
t < MAX ; ++t);
if(t==MAX )return- 1 ;
return t ;
}
void delete(void)
{
int slot ;
gotoxy(28/19 );
printf("enter record #(0 - 99:)" );
scanf("%d"/&slot );
if(slot <= 0 && slot < MAX)
st_info[slot].name[0]='\0' ;
}
void list(void)
{
char ch ;
clrscr )(;
r=0 ;
title ;
for(t=0;t
        if(st_info[t].name[0])
print )(;
}
gotoxy(13/6+r );
printf("******************************");
printf("*******************************" );
gotoxy(27/7+r );
printf("press any key to continue " );
getch)(;
}
void list1(void)
{
char ch ;
r=0 ;
clrscr )(;
title )(;
for(t=0;t
        if(st_info[t].name[0] && st_info[t].mead<12)
print)(
}
gotoxy(13/6+r );
printf("******************************");
printf("*******************************" );
gotoxy(27/7+r );
printf("press any key to continue " );
getch)(;
}
void list2(void)
char ch ;
r=0 ;
clrscr )(;
title )(;
for(t=0;t
        if(st_info[t].name[0] && st_info[t].mead<17)
print)(
}
gotoxy(13/6+r );
printf("******************************");
printf("*******************************" );
gotoxy(27/7+r );
printf("press any key to continue " );
getch)(;
}
title)(
{
gotoxy(25/2 );
printf(" <<   information in list");
printf("are  :>>");
gotoxy(13/3 );
printf("*************************");
printf("****************");
printf("********************");
gotoxy(10/4 );
printf("     name       mead     ");
printf("   unit      " );
printf("  number           ");
printf(" stno      " );
gotoxy(10/5);
;
("  ؤؤؤؤؤؤؤ      ؤؤؤؤؤؤؤ   ")printf      ;
("      ؤؤؤؤؤ     ")printf      ;
("   ؤؤؤؤ           ؤؤؤؤؤ  ")printf          }
print)(
{
gotoxy(14/6+r );
printf("%s "/st_info[t].name );
gotoxy(26/6+r );
printf("%.2f "/st_info[t].mead );
gotoxy(40/6+r );
printf("%d "/st_info[t].unit );
gotoxy(54/6+r );
printf("%d "/st_info[t].number );
gotoxy(70/6+r );
printf("%u "/st_info[t].stno );
r++ ;
}

نمونه اي از خروجي برنامه مثال 2 : 1 )

<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)1

enter name:ali enter grade number 1:19
enter stno:123 enter unit of grade 1:2
enter number:2 enter grade number 2:18
enter unit of grade 2:3

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)2

enter name:reza enter grade number 1:12
enter stno:321 enter unit of grade 1:3
enter number:3 enter grade number 2:11
enter unit of grade 2:2
enter grade number 3:10
enter unit of grade 3:4

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)3

<< information in list are :>>
***************************************
name mead unit number stno
----- ------ ---- ---- ------
ali 18:00 5 2 123
reza 10:00 9 3 321
***************************************
press any key to continue

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)5

<< information in list are :>>
***************************************
name mead unit number stno
----- ------ ---- ---- ------
ali 18:00 5 2 123
***************************************
press any key to continue

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)4

<< information in list are :>>
***************************************
reza 10:00 9 3 321
***************************************
press any key to continue

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

کيفيت مقاله :
عالی خوب متوسط ضعيف


ساختمان هاي بيتي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۳۰۶ مراجعه امروز
۴۱۲۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ساختمان هاي بيتي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۵۸ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

در زبان C برخلاف ساير زبانهاي برنامه سازي ، به يك بيت خاص از يك بايت حافظه
مي توان دسترسي پيدا كرد . اين امر در زبان C به دلايل زير مفيد است : 1
اگر محدوديتي در ميزان حافظه وجود داشته باشد، ميتوان از يك بايت بعنوان
چند متغير منطقي استفاده نمود . براي اين منظور مي توان هر بيت را بعنوان يك
متغير منطقي در نظر گرفت كه مقدار صفر به معني ارزش " درستي " و مقدار يك به
معني ارزش " نادرستي " و يا برعكس باشند . 2
در حين ارتباط كامپيوتر با دستگاه هاي خارجي ، بعضي از رابط ها مي توانند
اطلاعات موجود در يك بايت را ( كه هر بيت آن ممكن است تفسير خاصي داشته باشد )
انتقال دهند . 3
بسياري از زيربرنامه هاي سيستم ( كه معمولا" از ديد ما پنهان هستند ) نياز
به دسترسي به بيت ها دارند .
اگر چه همه اعمال فوق توسط عملگرهاي بيتي قابل انجامند ، ولي ساختمان هاي
بيتي ، روش مناسب تر و بهتري براي برآوردن اين اهداف هستند . بطور كلي مي توان
گفت كه ساختمان بيتي ، مكانيزم ساختماني جهت دسترسي به بيت هاي يك بايت از
حافظه است .
روش كلي تعريف ساختمان بيتي به صورت زير است : {
نام ساختمان بيتي struct ;
طول فيلد >1نام فيلد >: <1نوع فيلد > <1 <;
طول فيلد >2نام فيلد >: <2نوع فيلد > <2 <.
.
.
;
طول فيلد >nنام فيلد >: اسامي متغيرهاي بيتي }
نام ساختمان بيتي از قانون نامگذاري براي متغيرها تبعيت مي كند . هر يك از
فيلدها در ساختمان بيتي مي توانند از نوع int، unsigned، و يا signed باشد .
فيلدي كه طول آن 1 باشد يايد از نوع unsigned انتخاب گردد . زيرا بيت با طول 1
نميتواند شامل علامت هم باشد. طول فيلدها در ساختمان بيتي به بيت سنجيده ميشود.
يعني طول فيلد مشخص مي كند كه فيلد مورد نظر چند بيتي است .
بعنوان مثال ساختمان بيتي زير را در نظر بگيريد :

struct device {
unsigned active :1 ;
unsigned ready :1 ;
unsigned xmt_error :1 ;
} dev_code ;

ساختمان 3 device فيلد كه طول هر كدام يك پيت است را تعريف مي كند و متغير dev-code
از نوع ساختمان بيتي device تعريف شده است . متغير dev-code بصورت آن
چه كه در شكل (1) مشاهده مي شود در حافظه قرار مي گيرد .
يك بايت
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
|
شماره بايت
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
< بالا استفاده ؤؤؤ<ؤؤؤ| | | | | |
dev-code/xxmt-error
ؤؤؤؤؤ | | dev-code/rready
ؤؤؤؤؤؤؤؤؤ | dev-code aactive
ؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (1) . وضعيت متغير dev-code

همانطور كه در شكل (1) مشاهده مي گردد براي دسترسي به اجراي متغير ساختمان
بيتي از عملگر نقطه (.) استفاده مي گردد . اگر اشاره گري به ساختمان بيتي اشاره
ؤؤ به اجزاي اين >نمايد ، همانند ساختمان معمولي مي توان با استفاده از عملگر
ساختمان دسترسي پيدا كرد .
يكي از موارد كاربرد ساختمان هاي بيتي ، درتجزيه و تحليل اطلاعات اخذ شده از
يك دستگاه سخت افزاري است . بعنوان مثال ، پورت وضعيت يك تطبيق دهنده ارتباط
سري ، يك بايت وضعيت ، با ساختار زير را برمي گرداند :
شماره بيت مفهوم بيت ( وقتي كه 1 باشد )

change clear_to_send line 0
change in data_set_ready 1
trailing edge detected 2
change in recive line 3
clear_to_send 4
data_set_ready 5
telephone ringing 6
received signal 7

بايت وضعيت مربوط به تطبيق دهنده ارتباط سري را مي توان با استفاده از
ساختمان بيتي تعريف كرد :

struct stalus_type {
unsigned delta_cts :1 ;
unsigned delta_dsr :1 ;
unsigned tr_edge :1 ;
unsigned delta_rec :1 ;
unsigned cts :1 ;
unsigned dsr :1 ;
unsigned ring :1 ;
unsigned rec_line :1 ;
} status;

براي استفاده از ساختار بيتي status كافي است كه زير برنامه اي نوشته شود تا
اطلاعات فرستاده شده را بخواند و سپس آن را تجزيه و تحليل و بررسي نمايد : status=get_port_status)(;

در دستور فوق ()get_port_status تابعي است كه پورت وضعيت را خوانده و در
متغير ساختمان بيتي status قرار مي دهد .
بعضي از نكاتي كه در مورد متغيرهاي از نوع ساختمان بيتي بايد در نظر داشت
عبارتند از : 1
نمي توان به آدرس آنها مراجعه كرد 2
نمي توانند بصورت آرايه تعريف شوند 3
به حد زيادي ، وابسته به ماشين هستند، بعنوان مثال ممكن است در يك ماشين
بيت ها از چپ به راست قابل دسترسي باشند و در ماشين ديگر از راست به چپ . 4
تركيبي از ساختمان بيتي و ساختمان معمولي ، ممكن است :

struct emp {
struct addr address1 ;
float pay ;
unsigned lay-off :1 ;
unsigned hourly :1 ;
unsigned shifted :1 ;
} ;

در ساختمان emp ، فيلد address1 از نوع ساختمان address تعريف شده است كه
اين ساختمان مي تواند بصورت زير تعريف شود :

struct address {
char zip ;
char street [31] ;
char city [31] ;
} ;

نكته اي كه در مورد ساختمان emp بايد توجه داشت اين است كه از يك بايت براي
نگهداري 3 قلم اطلاعات ( اجزاي lay-off، hourly،و shiftedو ) استفاده شده است .
اگر از ساختمان بيتي استفاده نميشد حداقل به 3 بايت نياز بود ( اگر اين بايت ها
بصورت كاراكتري تعريف مي شدند ) .

مثال : برنامه اي كه چگونگي استفاده از ساختمان هاي بيتي را نشان مي دهد .

struct date
{
unsigned int day: 5 ;
unsigned int month: 4 ;
unsigned int year: 7 ;
} ;
main)(
{
struct date dateofbirth / today ;
int age ;
char p1[40] / p2[40] ;
clrscr )(;
strcpy(p1/
"enter birth date( day month year:)");
strcpy(p2/
"enter today date(day month year: )");
askfordate(p1 / &dateofbirth );
askfordate(p1 / &today );
if( today.month > dateofbirth.month ||
( today.month == dateofbirth.month &&
today.day > dateofbirth.day))
age=today.year - dateofbirth.year ;
else
age=today.year - dateofbirth.year- 1;
printf("\n the age is %d year."/age);
}
askfordate(char *prompt /
struct date *point)
{
unsigned int d/m /y ;
printf("%s"/prompt );
scanf("%d%d%d"/&d/&m/&y );
day ==d
;
ؤ>point month=m
;
ؤ>point year =y
;
ؤ>point }

نمونه اي از خروجي برنامه مثال بالا :

enter birth date(day month year:)12 12 50
enter t

کيفيت مقاله :
عالی خوب متوسط ضعيف


unions ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۳۱ مراجعه امروز
۴۳۲۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
unions
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۲۶ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.
C، union، محلي از حافظه است كه توسط دو يا چند متغير بطور اشتراكي
مورد استفاده قرار مي گيرد . اين متغيرها بطور همزمان نمي توانند از اين محل
استفاده كنند بلكه هر متغير مي تواند در زمان هاي متفاوتي اين محل را مورد
استفاده قرار دهد .
نحوه تعريف union همانند ساختمان است و شكل كلي آن بصورت زير است : {
اسم > union اجزاي union ;
اسامي متغيرها }
اسم union از قانون نامگذاري براي متغيرها تبعيت ميكند. اجزاي union همانند
اجزاي ساختمان تعريف مي شوند و چگونگي تعريف متغيرهاي union نيز مثل تعريف
متغيرهاي ساختمان است . طول يك union به اندازه مجموع طول اجزاي آن نيست بلكه
به اندازه طول عنصري است كه بيشترين طول را دارد، زيرا در واقع union ساختماني
است كه آدرس شروع كليه اجزاي آن از يك نقطه است . union زير را در نظر بگيريد:

union u_type {
int i ;
char ch ;
float y ;
} ;

در تعريف u-type، 3، عنصر به اسامي i، ch،و yو تعريف شده اند . در اين union
چون طول y از طول ساير اجزائ بيشتر است ( طول int برابر با 2 بايت ، طول char
برابر با 1 بايت و طول float برابر با 4 بايت است ) طول u-type برابر با طول y
يعني 4 در نظر گرفته مي شود ( مثال ) شكل (1) نحوه استفاده اجزاي i، chو yو را
از يك محل حافظه به طول 4 بايت نشان مي دهد .
ؤؤؤؤ >y < ؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | 0 | 1 | 2 | 3
|
شماره بايت
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch
< ؤ
ؤؤ >i < ؤؤ
شكل (1) . نحوه استفاده اجزاي union از حافظه

مثال :

main)(
{
union test {
int i ;
char ch ;
float y ;
} un ;
float x ;
printf("\n enter an integer number:");
scanf("%d"/&un.i );
printf(" the value of i is: %d/un.i);
printf("\n enter a character: " );
un.ch=getche )(;
printf("\n value of ch is:%c"/un.ch);
printf("\n enter a float number: ");
scanf("%f"/&x );
un.y=x ;
printf("the value of y is:%.2f"/un.y);
printf("\n\n the size of union is:");
printf("%d"/sizeof(union test ));
}

نمونه اي از خروجي برنامه مثال بالا :

enter an integer number:43
the value of i is:43
enter a character:f
the value of ch is:f
enter a float number:23.65
the value of y is:23.65
the size of u

کيفيت مقاله :
عالی خوب متوسط ضعيف


ساختماني از union ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۳۴ مراجعه امروز
۴۳۲۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ساختماني از union
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۵۰ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
قبلا" مشاهده شد كه اجزاي يك ساختمان مي توانند ، از نوع ساختمان باشند . به
طور كلي بكارگيري يك ساختمان در ساختمان ديگر ، union در يك ساختمان و برعكس و union
در unionر ديگر امكان پذير است .

مثال :

main)(
{
struct twoint {
int num1:
int num2:
} ;
union intflo {
struct twoint test ;
float flonum ;
} unex ;
printf("\n size of union is: " );
printf("%d"/sizeof(union intflo));
unex.test.num1=564 ;
unex.test.num2=-231 ;
printf("\n unex.test.num1=");
printf("%d"/unex.test.num1 );
printf("\n unex.test.num2=");
printf("%d"/unex.test.num2 );
unex.flonum=45.76 ;
printf("\n unex.flonum=");
printf("%.2f"/unex.flonum );
}

نمونه اي از خروجي برنامه مثال بالا :

size of union is: 4
unex.test.num1=564
unex.test.num2=-231
unex.flonum=45.76

کيفيت مقاله :
عالی خوب متوسط ضعيف


تغيير نام داده با typedef ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۷۴۰ مراجعه امروز
۴۳۳۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تغيير نام داده با typedef
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۱۴ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

دستور typedef براي تعويض نام نوع موجود استفاده مي شود . بدين معني كه با
استفاده از اين دستور مي توان براي نوع هاي ابتدايي مثل intو charو و ... و
همچنين نوع هاي تعريف شده در برنامه ، اسم ديگري انتخاب نمود . اين دستور به
دو دليل اهميت دارد : 1
موجب ميشود تا مساله قابل حمل بودن زبان C قوت بيشتري پيدا كند.يعني اگر
برنامه اي را در يك ماشين نوشته و بخواهيم آن را در ماشين ديگري اجرا كنيم
چنانچه اين دو ماشين با يكديگر مطابقت نداشته باشند كافي است دستور typedef
طوري عوض شود كه اين مشكل را حل نمايد . 2
موجب مي شود تا براي نوع هاي داده طولاني ، اسم ساده تري انتخاب گردد .
دستور typedef بصورت زير بكار مي رود :
<نوع موجود> <اسم جديد>typedef
نوع موجود ، يكي از انواع معتبر در زبان C است . اسم جديد، نامي است كه نوع
موجود ، در برنامه باشد به اين نام خوانده شود . دستور زير را در نظر بگيريد : unsigned int var1/ var2;

اين دستور موجب ميشود تا متغيرهاي var1و var2و از نوع " صحيح مثبت " انتخاب
شوند . با استفاده از دستور typedef براي unsigned int به طريق زير اسم جديدي
انتخاب مي كنيم : typedef unsigned int SUBINT ;

دستور فوق موجب مي شود تا بتوان بجاي عبارت unsigned intازSUBINTز استفاده
كرد . دستور زير را ملاحظه نماييد : SUBINT var1/var2 ;

با دستور فوق ، متغيرهاي var1و var2و از نوع SUBINT انتخاب مي شوند ، كه
همان unsigned int است .
دستور typedef در مورد آرايه ها كاربرد جالبي دارد . مجموعه دستورات زير را
در نظر بگيريد : typedef char STRING[50] ;
STRING s1/s2 ;

مجموعه دستورات فوق موجب مي شوند تا متغيرهاي s1و s2و از نوع كاراكتري و به
طول 50 بايت تعريف گردند. بعبارت ديگر، اين مجموعه دستورات با دستور زير معادل
است : char s1[50] /s2[50];

براي آشنايي بيشتر با چگونگي معرفي آرايه ها توسط دستور typedef به مثال 1
توجه نماييد :

مثال 1:

main)(
{
typedef unsigned int INT ;
typedef int ARR[5] ;
ARR list1 / list2 ;
INT i /sum= 0 ;
for( i=0 ;i < 5;i++)
scanf("%d"/&list1[i] );
for( i=0 ;i < 5;i++)
scanf("%d"/&list2[i] );
for( i=0 ;i < 5;i++)
sum+=list1[i]+list2[i] ;
printf("\n sum of two array is:");
printf("%d"/sum );
}

دستورtypedef در مورد ساختمانها بكار رفته و موجب ميگردد تا تعريف متغيرهاي
ساختمان و همچنين دسترسي به اجزاي آن به سهولت انجام شود . براي آشنايي با
چگونگي عمل دستور typedef در مورد ساختمان ها به مثال 2 مراجعه نماييد .

مثال 2:

#include "stdio.h"
struct date {
int day ;
int month ;
int year ;
} ;
typedef struct date DATE ;
typedef DATE *PTRDATE ;

main)(
{
DATE today ;
PTRDATE ptr ;
ptr=&today ;
;
َday =2= 27ؤ > ptr ;
َmonth = 9ؤ > ptr ;
َyear == 1991ؤ > ptr ;
(dayؤ>"\n date is:%d"/ptr)printf ;
(monthؤ > "%d"/ptr)printf ;
(yearؤ > "%d"/ptr)printf }

جي برنامه مثال 2 :

کيفيت مقاله :
عالی خوب متوسط ضعيف


نوعهاي داده شمارشي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۷۴۳ مراجعه امروز
۴۳۳۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نوعهاي داده شمارشي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۳۸۲ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

نوع داده شمارشي ، اين امكان را فراهم مي كند كه بتوان عناصر يك مجموعه
متناهي را نامگذاري يا شماره گذاري كرده وسپس متغيرهايي را تعريف نمود تا مقادير
آن مجموعه را بپذيرند . اين مجموعه با شناسه هايي معرفي مي شود كه به ثابت هاي
شمارشي معروفند . نوع هاي شمارشي بصورت زير تعريف مي شوند : {
نام نوع شمارشي enum /
عنصر اول /
عنصر دوم /
عنصر سوم .
.
.

عنصر n ام } ;

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

enum color {( 1)
red/
yellow/
brown/
} color1/ color2/

enum color {( 2)
red/
yellow/
brown
} ;
enum color color1 / color2 ;

مجموعه دستورات (1) و (2) معادل يكديگرند. در مجموعه دستورات (1) ضمن تعريف
نوع شمارشي color دو متغير color1و color2و از اين نوع متغير مي شوند و در
مجموعه دستورات (2) پس از تعريف نوع شمارشي color ، با استفاده از دستور enum
دو متغير color1و color2و از اين نوع تعيين مي شوند. متغيرهاي color1و color2و
فقط مي توانند مقادير red، yellow،و brownو را بپذيرند . مجموعه دستورات زير
در مورد نوع هاي شمارشي فوق معتبرند :

color1=red ;
color2=yellow ;
if(color1==color2)
{
.
.
.
}

نكته اي كه در مورد نوع هاي شمارشي بايد توجه داشت اين است كه به هر يك از
عناصر نوع شمارشي يك مقدار عددي صحيح ، نسبت داده مي شود :
به اولين عنصر ، مقدار صفر ، دومين عنصر مقدار 1 و به n امين عنصر ، مقدار n
1
نسبت داده مي شود . مگر اين كه برنامه نويس اين مقادير را تغيير دهد . به
عنوان مثال ، دستور زير را در نظر بگيريد : enum sample {a/b=5/c/d} ;

در دستور فوق مقدار صفر به a ، مقدار 5به b ، مقدار 6به c و مقدار 7به d
نسبت داده مي شود .

مثال : برنامه اي كه با استفاده از نوع هاي شمارشي دستمزد هفته اي كارمندان
موسسه اي را محاسبه مي كند .

#include "stdio.h"
#define SATJUST 1.5
#define SUNJUST 2.0
enum weekday {
SUN /
MON /
TUE /
WED /
THU /
FRI /
SAT } ;
typedef enum weekday WEEKDAY ;
main)(
{
int hours ;
float baserate / rate /wages ;
WEELDAY day ;
WEELDAY tomorro )(;
printf("\n enter the basic");
printf(" hourly rate : " );
scanf("%f"/&baserate );
wages=0.0 ;
printf("\nenter the hours worked\n");
printf("for monday through sunday:");
printf("\n" );
day=SUN ;
do {
day=tomorrow(day );
scanf("%d"/&hours );
switch(day)
{
case MON:
case TUE:
case WED:
case THU:
case FRI:
rate=baserate ;
break ;
case SAT:
rate=SATJUST * baserate;
break ;
case SUN:
rate=SUNJUST * baserate;
break ;
}
wages+=rate * hours ;
} while( day != SUN );
printf("\ntotal wages for the");
printf(" week is: %.2f"/wages );
}
tomorrow(WEEKDAY d)
{
WEEKDAY nextd ;
switch( d)
{
case SUN : nextd=MON ; break ;
case MON : nextd=TUE ; break ;
case TUE : nextd=WED ; break ;
case WED : nextd=THU ; break ;
case THU : nextd=FRI ; break ;
case FRI : nextd=SAT ; break ;
case SAT : nextd=SUN ; break ;
}
return(nextd );
}

نمونه اي از خروجي برنامه مثال بالا : enter the basic hourly rate : 1
enter the hours worked
for monday through sunday:

12 43 56 78 98 64 23

total wages fo

کيفيت مقاله :
عالی خوب متوسط ضعيف


فايلها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۷۴۶ مراجعه امروز
۴۳۳۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فايلها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۵۷۱ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

داده هاي مورد نياز برنامه هايي كه تاكنون نوشته شده اند در متغيرهاي معمولي
آرايه ها و ساختمان ها ذخيره و مورد پردازش قرار گرفته اند . متغيرهاي معمولي
آرايه ها و ساختمان ها ، همگي در حافظه RAM قرار دارند . لذا پس از قطع جريان
برق ( و يا خاموش شدن كامپيوتر ) و يا خروج از برنامه ، داده هايي كه در آنها
ذخيره شده اند از بين مي روند و براي استفاده مجدد از آنها ، بايد مجددا" وارد
گردند كه قطعا"اين كار مقرون به صرفه نيست .زيرا نه تنها مستلزم صرف وقت زيادي
است بلكه حوصله انجام كار را نيز از برنامه نويس سلب مي نمايد . براي رفع اين
مشكل نوعي ساختمان داده ديگر به نام فايل مورد استفاده قرار مي گيرد . اين نوع
ساختمان داده بر روي حافظه جانبي مثل ديسك ، نوار و غيره تشكيل مي گردند . چون
اطلاعات موجود در روي حافظه جانبي با قطع جريان برق ، قطع اجراي برنامه و يا
دلايلي از اين قبيل از بين نميروند، به دفعات زيادي مورد استفاده قرار ميگيرند.
هر فايل شامل مجموعه اي از داده هاي مرتبط به هم است . مانند داده هاي مربوط
به كليه دانشجويان يك دانشگاه ، داده هاي مربوط به هر يك از اجزاي فايل ، يك
ركورد نام دارد . به عنوان مثال ، در يك دانشگاه داده هاي مربوط به هر دانشجو
تشكيل يك ركورد را مي دهند . لذا مي توان گفت كه هر فايل ، مجموعه اي از چند
ركورد است . اگر باز هم دقيق تر به فايل دانشجويان دانشگاه پرداخته شود، مشاهده
مي گردد كه هر دانشجو تشكيل يك ركورد را مي دهند . لذا مي توان گفت كه هر فايل
مجموعه اي از چند ركورد است . اگر باز هم دقيق تر به فايل دانشجويان دانشگاه
پرداخته شود ، مشاهده مي گردد كه هر دانشجو ممكن است چند قلم داده داشته باشد.
مثل نام دانشجو ، تعداد واحدهايي كه گذرانده ، نمره هر درس و ... . به هر يك از
اجزاي يك ركورد ، فيلد گفته مي شود ، لذا مي توان گفت كه هر ركورد مجموعه اي از
چند فيلد است .
در زبان C فايل داده ، مي تواند هر دستگاهي مثل : صفحه نمايش ، صفحه كليد
چاپگر ، ترمينال ديسك ، نوار و غيره باشد .
داده ها ممكن است به 4 روش در فايل ذخيره شده و سپس مورد بازيابي قرار گيرند: 1
داده ها، كاراكتر به كاراكتر در فايل نوشته شده و سپس كاراكتر به كاراكتر
از فايل خوانده شوند . 2
داده ها بصورت رشته اي از كاراكترها، در فايل نوشته شده وسپس بصورت رشته اي
از كاراكترها مورد دسترسي قرار گيرند . 3
داده ها درحين نوشتن بر روي فايل ، با فرمت خاصي نوشته شده و سپس با همان
فرمت خوانده شوند ( مثل توابع ()printf و ()scanf در ورودي خروجي معمولي ) . 4
داده ها به شكل ساختمان ( ركورد ) در روي فايل نوشته شده و سپس به صورت
ساختمان از فايل خوانده شوند . صي در زبان C منظور شده اند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


انواع فايل از نظر نوع اطلاعات ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۷۴۹ مراجعه امروز
۴۳۴۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انواع فايل از نظر نوع اطلاعات
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۵۵۳ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

داده ها ممكن است در فايل به دو صورت ذخيره شوند كه عبارتند از : 1) اسكي يا
متن 2 text باينري (binary) . اين دو روش ذخيره شدن داده ها ، در موارد زير با
يكديگر تفاوت دارند : 1
تعيين انتهاي خط . 2
تعيين انتهاي فايل . 3
نحوه ذخيره شدن اعدد بر روي ديسك .
در فايل text اعداد بصورت رشته اي از كاراكترها ذخيره مي شوند ولي در فايل
باينري اعداد به همان صورتي كه در حافظه قرار مي گيرند بر روي ديسك ذخيره
مي گردند . بعنوان مثال ، در فايل text عدد 526 سه بايت را اشغال مي كند. زيرا
هر رقم آن ، بصورت يك كاراكتر در نظر گرفته مي شود . ولي در فايل باينري اين
عدد در 2 بايت ذخيره مي گردد ( چون عدد 526 يك عدد صحيح است و اعداد صحيح در
دو بايت ذخيره مي شوند ) ( شكل 1 ) .
در فايل text ، كاراكتري كه پايان خط را مشخص مي كند ، در حين ذخيره شدن بر
روي ديسك بايد به كاراكترهاي CR/LF، line feed،و carriage returnو تبديل شود و
در حين خوانده شدن عكس اين عمل بايد صورت گيرد . يعني كاراكترهاي CR/LF بايد
به كاراكتر تعيين كننده پايان خط تبديل شوند . بديهي است كه اين تبديلات مستلزم
صرف وقت است ، لذا دسترسي به اطلاعات موجود در فايل هاي text كندتر از فايل هاي
باينري است .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤ | 999 | | '9' | '9' | '9' |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | 132.844 || '1' | '3' | '2' | '.' | '8' | '4' | '4' اعداد در فايل text اعداد در حافظه

شكل (1) . مقايسه ذخيره شدن اطلاعات در فايل text و حافظه

اختلاف ديگر فايل هاي text و باينري در تشخيص انتهاي فايل است . درهر دو روش
ذخيره فايل ها ، طول فايل توسط سيستم نگهداري مي شود و انتهاي فايل با توجه به
اين طول مشخص مي گردد . در حالت text كاراكتر 1A ( در مبناي 16 ) و يا 26 ( در
مبناي 10 ) مشخص كننده انتهاي فايل است . ( اين كاراكتر با فشار دادن كليد CTL
به همراه كليد Z توليد ميشود ). در حين خواندن داده ها از روي فايل text ، وقتي
كنترل به اين كاراكتر رسيد بيانگر اين است كه داده هاي موجود درفايل تمام شده اند.
در فايل باينري ممكن است عدد 1A ( در مبناي 16 ) و يا 26 ( در مبناي 10 ) جزئي
از اطلاعات بوده ، بيانگر انتهاي فايل نباشد . لذا نحوه تشخيص انتهاي فايل در text متفاوت است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


سازمان فايل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۵۵ مراجعه امروز
۴۳۴۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
سازمان فايل
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۵۱۵ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

منظور از سازمان فايل اين است كه اطلاعات در فايل چگونه ذخيره شده و سپس به
چه روش هايي مورد بازيابي قرار مي گيرند . يا بعبارت ديگر قانون حاكم بر نحوه
ذخيره و بازيابي داده ها و فايل را سازمان فايل گويند . حال به دو سازمان فايل
پرداخته مي شود : 1
سازمان فايل ترتيبي (sequential) . 2
سازمان فايل تصادفي (random) .
در سازمان فايل ترتيبي ، ركوردها به همان ترتيبي كه از ورودي خوانده ميشوند
در فايل قرار مي گيرند و در هنگام بازيابي ، به همان ترتيبي كه در فايل ذخيره
شده اند مورد دسترسي قرار مي گيرند . بعنوان مثال اگر صدمين ركورد فايل بخواهد
مورد دسترسي قرار گيرد، بايد 99 ركورد قبل از آن از فايل خوانده شوند. فايلهاي
ترتيبي معمولا" داراي يك فيلد كليد هستند . ( فيلد كليد ، فيلدي است كه بعنوان
شاخص ركورد مورد استفاده قرار ميگيرد ) و بر اساس آن ، مرتب ميباشند ( شكل 1 ).
بعنوان مثال در مورد دانشجويان ، شماره دانشجويي و در مورد كارمندان شماره
كارمندي ، فيلد خوبي براي شاخص فرد مي باشند .
شماره شناسايي نام موضوع درس نمره 12
Ahmad پاسكال 20 23
Ali پاسكال 15 34
Reza پاسكال 18 20 C Jafar 56

شكل (1) . نمونه اي از يك فايل ترتيبي

در سازمان فايل تصادفي ، به هر ركورد يك شماره اختصاص مي يابد . لذا اگر
فايل داراي n ركورد باشد ، ركوردها از 1تا nا شماره گذاري خواهند شد . وقتي كه
ركوردي در يك فايل با سازمان تصادفي قرار گرفت ، محل آن توسط يك الگوريتم پيدا
كننده آدرس ، كه با فيلد كليد ارتباط دارد مشخص مي شود . در اين صورت دو ركورد
با فيلد كليد مساوي ، نمي توانند در فايل تصادفي وجود داشته باشند . در سازمان
فايل تصادفي مستقيما" مي توان به هر ركورد دلخواه دسترسي پيدا كرد ( بدون اين
كه ركوردهاي قبل از آن خوانده شوند ) . شكل (2) نمونه اي از يك فايل تصادفي را
نمايش مي دهد .
شماره ركورد شماره شناسايي نام موضوع درس نمره 13
12 Ahmad پاسكال 20 20 C Jafar 56 20
24
23 Ali پاسكال 15 31
34 Reza پاسكال 18
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ اي از فايل تصادفي

کيفيت مقاله :
عالی خوب متوسط ضعيف


باز كردن فايل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۶۱ مراجعه امروز
۴۳۵۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
باز كردن فايل
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۶۳ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

هر فايل قبل از اين كه بتواند مورد استفاده قرار گيرد ، بايد باز گردد .
مواردي كه در حين باز كردن فايل مشخص مي شوند عبارتند از : 1
نام فايل 2
نوع فايل از نظر ذخيره اطلاعات (textيا binaryا) 3
نوع فايل از نظر ورودي خروجي ( آيا فايل فقط به عنوان ورودي است ، آيا
فقط بعنوان خروجي است يا هم بعنوان ورودي است و هم بعنوان خروجي ) .
يك فايل ممكن است طوري باز شود كه فقط عمل نوشتن اطلاعات بر روي آن مجاز
باشد . به چنين فايلي ، فايل خروجي گفته مي شود . اگر فايل طوري باز گردد كه
فقط عمل خواندن اطلاعات از آن امكان پذير باشد به چنين فايلي ، فايل ورودي گفته
مي شود . اگر فايل طوري باز شود كه هم عمل نوشتن اطلاعات بر روي آن مجاز باشد و
هم عمل خواندن اطلاعات از آن ، به چنين فايلي ، فايل ورودي و خروجي گفته ميشود.
اگر فايلي قبلا" وجود نداشته باشد ، در حين باز شدن بايد بعنوان فايل خروجي باز
شود . اگر فايلي قبلا" وجود داشته باشد و بعنوان خروجي باز گردد ، اطلاعات قبلي مي رود ، براي باز كردن فايل از تابع ()fopen استفاده مي گردد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


تابع ()fopen ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۶۴ مراجعه امروز
۴۳۵۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تابع ()fopen
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۴۱ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

تابع ()fopen براي باز كردن فايل مورداستفاده قرار گرفته و داراي الگوي زير
است : FILE *fopen(char *filename / *mode)

در الگوي فوق ، filename به رشته اي اشاره مي كند كه حاوي نام فايل و محل
تشكيل يا وجود آن است . نام فايل داده از قانون نامگذاري فايل برنامه تبعيت
مي كند و شامل دو قسمت : نام و انشعاب است كه بهتر است انشعاب فايل داده ، dat
انتخاب گردد . محل تشكيل يا وجود فايل مي تواند شامل نام درايو و يا هر مسير
موجود روي ديسك باشد . mode مشخص مي كند كه فايل چگونه بايد باز شود ( ورودي
خروجي و يا ... ) . مقاديري كه ميتوانند بجاي mode در تابع ()fopen قرار گيرند
همراه با مفاهيم آنها در جدول زير آمده اند . mode
مفهوم
(rt)r فايلي از نوع text را به عنوان ورودي باز مي كند
(wt)w فايلي از نوع text را به عنوان خروجي باز مي كند
(at)a فايل را طوري بازميكند كه بتوان اطلاعاتي را به انتهاي آن اضافه
نمود rb
فايلي از نوع باينري را به عنوان ورودي باز مي كند wb
فايلي از نوع باينري را به عنوان خروجي باز مي كند ab
فايل موجود از نوع باينري را طوري باز مي كند كه بتوان اطلاعاتي
را به انتهاي آن اضافه نمود
(r+t)r+ فايل موجود از نوع text را به عنوان ورودي و خروجي باز مي كند
(w+t)w+ فايلي از نوع text را به عنوان ورودي و خروجي باز مي كند
(a+t)a+ فايل موجود از نوع text را به عنوان ورودي و خروجي باز مي كند r+b
فايل موجود از نوع باينري را به عنوان ورودي و خروجي باز ميكند w+b
فايل از نوع باينري را به عنوان ورودي و خروجي باز مي كند a+b
فايل از نوع باينري را به عنوان ورودي و خروجي باز ميكند ( اين
فايل مي تواند قبلا" وجود داشته باشد ) .
جدول مقادير معتبر mode در تابع ()fopen

براي باز كردن فايل بايد يك اشاره گر از نوع فايل تعريف گردد تا به فايلي كه
توسط تابع fopen باز مي شود اشاره نمايد . اگر فايل به دلايلي باز نشود اين
اشاره گر برابر با NULL خواهد بود. بعنوان مثال ، دستورات زير را درنظر بگيريد: FILE *fp;( 1)
fp=fopen("A:test"/"w");( 2)

دستور (1)، متغير fp رااز نوع اشاره گر فايل تعريف مي كند و دستور (2) فايلي
بنام test را بر روي درايو A ايجاد مي نمايد ( چون حالت "w" ، فايل را به صورت
خروجي باز مي كند ) .
براي تشخيص اين كه آيا فايل با موفقيت باز شده است يا خير مي توان اشاره گر
فايل را با NULL مقايسه كرد. ( NULL ماكرويي است كه در فايل stdio.h تعريف شده
است و با حروف بزرگ بكار مي رود ) . اگر اشاره گر فايل برابر با NULL باشد بدين
معني است كه فايل باز نشده است :

if((fp=fopen("A:test"/"w"))==NULL)
{
printf("cannot open file \ n");
exit( 0);

کيفيت مقاله :
عالی خوب متوسط ضعيف


بستن فايل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۷۷۰ مراجعه امروز
۴۳۶۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بستن فايل
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۳۶۲ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

پس از اين كه برنامه نويس كارش را با فايل تمام كرد ، بايد آن را ببندد .
بستن فايل توسط تابع ()fclose انجام مي شود كه داراي الگوي زير است : int fclose(FILE *fp)

در الگوي فوق ، fp به فايلي اشاره مي كند كه بايد توسط تابع ()fclose بسته
شود . بعنوان مثال ، دستور ;(p)fclose موجب بستن فايلي ميشود كه p به آن اشاره
مي كند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ورودي خروجي كاراكترها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۷۷۳ مراجعه امروز
۴۳۶۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ورودي خروجي كاراكترها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۱۷ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

براي نوشتن يك كاراكتر در فايل ، از توابع ()putc و ()fputc استفاده ميشود.
طريقه استفاده از اين دو تابع يكسان است . تابع ()putc در گونه هاي جديد C و
()fputc در گونه هاي قديمي C وجود داشته است . چون تابع ()putc به صورت ماكرو
تعريف شده است سرعت عمل آن بالا است . لذا سعي ما در اين است كه از تابع ()putc
استفاده شود . الگوي تابع ()putc بصورت زير است : int putc( int ch/FILE *fp)

در الگوي فوق ، ch كاراكتري است كه بايد در فايل نوشته شود و fp اشاره گري
از نوع فايل است كه مشخص مي كند، كاراكتر موردنظر بايد در چه فايلي نوشته شود.
براي خواندن كاراكترها از فايل ، ميتوان از دو تابع ()getcو()fgetc) استفاده
نمود . نحوه بكارگيري اين دو تابع يكسان است . تابع ()fgetc در گونه هاي قديمي C
و ()getc در گونه هاي جديد C وجود دارد . چون تابع ()getc بصورت ماكرو پياده
سازي شده است از سرعت بيشتري برخوردار است . لذا ما سعي در استفاده از تابع
()getc داريم . الگوي اين تابع بصورت زير است : int getc( FILE *fp)

در الگوي فوق ، fp اشاره گري است كه مشخص مي كند كاراكتر مورد نظر از كدام
فايل بايد خوانده شود .
در مورد خواندن و نوشتن داده ها بر روي فايل بايد به نكاتي توجه داشت : 1
وقتي كاراكترهايي بر روي فايل نوشته مي شوند بايد مكان بعدي كه ، كاراكتر
آتي در آنجا قرار مي گيرد مشخص باشد . همچنين وقتي كه كاراكترهايي از فايل
خوانده ميشوند بايد مشخص باشد كه تاكنون تا كجا فايل خوانده شده است و كاراكتر
بعدي از كجا بايد خوانده شود . براي برآوردن اين هدف ، سيستم از يك متغير بنام "
موقعيت سنج فايل " استفاده مي كند كه با هر دستور خواندن و يا نوشتن بر روي
فايل ، مقدار اين متغير بطور اتوماتيك تغيير مي كند تا موقعيت فعلي فايل را
مشخص نمايد . لذا عمل نوشتن بر روي فايل و عمل خواندن از روي آن از جايي شروع
مي شود كه اين متغير نشان مي دهد . 2
در هنگام خواندن داده ها از فايل بايد بتوان انتهاي فايل را تست نمود .
يعني در برنامه بايد بتوان اين تست را انجام داد كه ، اگر در حين خواندن داده ها
از فايل ، " موقعيت سنج فايل " به انتهاي فايل رسيد دستور خواندن بعدي صادر
نگردد . چرا كه در غير اينصورت ، سيستم پيام خطايي را مبني بر نبودن اطلاعات در
فايل صادر مي كند .
در حين خواندن داده ها از فايل text پس از رسيدن به انتهاي فايل تابع ()getc
يا ()fgetc علامت EOF را برمي گرداند. لذا در هنگام خواندن داده ها از فايل text
مي توان به عمل خواندن ادامه داد . تا اين كه كاراكتر خوانده شده برابر با EOF
گردد. درفايل باينري براي تست كردن انتهاي فايل ازتابع ()feof استفاده ميگردد.
الگوي اين تابع بصورت زير است : int feof( FILE *fp)

در الگوي فوق ، fp اشاره گري است كه مشخص مي كند اين تابع بايد بر روي چه
فايلي عمل كند . تابع ()fopen علاوه بر تشخيص انتهاي فايلهاي باينري براي تشخيص
انتهاي فايل هاي text نيز استفاده مي شود . اكنون به بررسي مثال هايي در مورد
فايل هاي text و باينري و چگونگي تست انتهاي اين دو نوع فايل مي پردازيم .

مثال 1: برنامه اي كه كاراكترهايي را از ورودي خوانده و در يك فايل text قرار
مي دهد ( آخرين كاراكتر ورودي $ است ) و سپس داده هاي موجود در اين فايل را
خوانده و به فايل ديگري منتقل مي كند .

#include "stdio.h"
#include "stdlib.h"

void main(void)
{
FILE *in/*out ;
char ch;
in=fopen("test.dat"/"w");
if( in==NULL)
{
printf("cannot open file\n");
exit(1);
}
do {
ch=getchar)(;
putc(ch/in);
}while(ch!='$');
fclose(in);
out=fopen("output.dat"/"w");
if(out==NULL)
{
printf("cannot open out file");
exit(1);
}
in=fopen("test.dat"/"r");
if(in==NULL)
{
printf("cannot open input file");
exit(1);
}
ch=getc(in);
while(ch!=EOF)
{
putc(ch/out);
ch=getc(in);
}
fclose(in);
fclose(out);
}

نمونه اي از اجراي برنامه مثال 1 :

this is a sample file.
this is a text file.
text file is slow.
end of file.
$

مثال 2: برنامه اي كه كاراكترهايي رااز صفحه كليد گرفته و در يك فايل باينري
قرار ميدهد و سپس كاراكترهاي موجود در اين فايل را خوانده و به يك فايل باينري
ديگر منتقل مي كند . اسامي فايل هاي ورودي و خروجي بعنوان آرگومان تابع اصلي
به برنامه وارد مي شوند .

#include "stdio.h"
#include "stdlib.h"

void main(int argc/char *argv[])
{
FILE *in/*out ;
char ch;
clrscr )(;
if(argc!=3)
{
printf("you forget enter");
printf(" file name\n");
exit(1);
}
in=fopen(argv[1]/"wb");
if( in==NULL)
{
printf("cannt open(first)");
printf(" output file \n");
exit(1);
}
do {
ch=getchar)(;
putc(ch/in);
} while(ch!='$');
fclose(in);
in=fopen(argv[1]/"rb");
if(in==NULL)
{
printf("cannot open input");
printf(" file");
exit(1);
}
out=fopen(argv[2]/"wb);
if(out==NULL)
{
printf("cannot open output");
printf(" file");
exit(1);
}
ch=getc(in);
while(!feof(in))
{
putc(ch/out);
ch=getc(in);
}
fclose(in);
fclose(out);
}

مثال 3: برنامه اي كه برنامه ديگري را بعنوان فايل ورودي ، پذيرفته و تعداد
پرانتزهاي باز و بسته و همچنين تعداد آكولادهاي باز و بسته را شمارش مي كند .
نام فايل ورودي بعنوان آرگومان تابع اصلي ، به برنامه وارد مي شود .

#include "stdio.h"
#include "stdlib.h"

void main(int argc/char *argv[])
{
FILE *in ;
char ch;
int openbraket=0 / closebraket=0;
int openbraket=0 / closparant=0;
if(argc!=2)
{
printf("\n the number of");
printf(" argument is incorrect.");
exit(0);
}
in=fopen(argv[1]/"r");

if( in==NULL)
{
printf("\n file cannot open!.");
exit(0);
}
ch=getchar)(;
while( ch != EOF)
{
if( ch=='{')
openbraket ++ ;
else if( ch=='}')
closebraket ++;
else if( ch=='(')
openparant ++;
else if( ch==')')
closparant ++;
ch=getc(in );
}
printf("\n the number of open ");
printf("braket is:%d"/openbraket);
printf("\n the number of close ");
printf("braket is:%d"/closebraket);
printf("\n the number of open ");
printf("parantheses is:");
printf("%d"/openparant);
printf("\n the number of close");
printf(" parantheses is:");
printf("%d"/closparant);
fclose(in);
}

نمونه اي از خروجي برنامه مثال 3 :

E:\TC>9-3 11.7.c

the number of open braket is:37
the number of close braket is:37
the number of open parantheses is:177

کيفيت مقاله :
عالی خوب متوسط ضعيف


ورودي خروجي رشته ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۷۷۶ مراجعه امروز
۴۳۶۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ورودي خروجي رشته ها
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۳۹۲ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

براي نوشتن رشته ها در فايل ، از تابع ()fputs و براي خواندن رشته ها از قايل
از تابع ()fgets استفاده مي گردد . الگوهاي اين دو تابع بصورت زير مي باشند : int fputs( const char *str/ FILE *fp)
char *fgets( char *str/ int length/ FILE *fp)

در الگوي فوق ، fp اشاره گري است كه مشخص مي كند اين توابع بايد بر روي چه
فايل هايي عمل كنند . در تابع ()fgets اشاره گر str به رشته اي اشاره مي كند كه
بايد در فايل نوشته شود . اين اشاره گر در تابع ()fputs به رشته اي اشاره مي كند
كه اطلاعات خوانده شده از فايل در آن قرار مي گيرند . length طول رشته اي را كه
بايد از فايل خوانده شود مشخص مي كند . نحوه عمل تابع ()fgets به اين صورت است
كه :
از ابتداي فايل شروع به خواندن مي كند تا به انتهاي يك خط برسد و يا رشته اي
به طول length كاراكتر را از فايل بخواند. برخلاف تابع ()gets، در تابع ()fgets
كاراكتري كه انتهاي خط را مشخص مي كند جزئ رشته اي خواهد بود كه اين تابع از
فايل مي خواند .

مثال : برنامه اي كه رشته هايي رااز ورودي ( صفحه كليد ) خوانده و در يك فايل
قرار مي دهد . از آنجايي كه تابع ()gets كاراكتري كه پايان خط را مشخص مي كند
به رشته اضافه نمي كند ، در حين نوشتن بر روي فايل اين كاراكتر به رشته خوانده
شده اضافه مي شود . براي خاتمه برنامه كافي است به جاي رشته ، فقط كليد enter
وارد شود .

#include "stdio.h"
#include "stdlib.h"

void main(void)
{
FILE *fp ;
char str[80];
if((fp=fopen("test"/"w"))==NULL)
{
printf("cannot open file\n" );
exit(1);
}
printf("enter a string");
printf("(ENTER to quit:)\n");
while( 1)
{
gets(str);
if(!str[0])
break ;
strcat(str/"\n");
fputs(str/fp);
}
fclose(fp );
}

نمونه اي از اجراي برنامه مثال بالا :

enter a string(ENTER to quit:)
in the name of god.
this is a sample file
for string i/o.
bottom of

کيفيت مقاله :
عالی خوب متوسط ضعيف


فايل به عنوان وسيله ورودي خروجي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۸۲ مراجعه امروز
۴۳۷۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فايل به عنوان وسيله ورودي خروجي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۱۵ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

در مثالهايي كه تاكنون مطرح گرديد، فايل يا فقط بعنوان وسيله ورودي استفاده
گرديد و يا فقط بعنوان وسيله خروجي ، در اين قسمت مشاهده خواهد شد كه چگونه
ميتوان يك فايل را هم بعنوان وسيله ورودي و هم بعنوان وسيله خروجي مورداستفاده
قرار داد. براي اين منظور كافي است در تابع ()fopen بجاي mode از يكي از عبارات r+
يا r+tا ( باز كردن فايل text موجود بعنوان ورودي و خروجي ) ، w+يا w+tا
( ايجاد يك فايل text بعنوان ورودي و خروجي ) ، a+يا a+tا ( ايجاد فايل text و
يا باز كردن فايل text موجود ، بعنوان ورودي و خروجي ) ، r+b ( باز كردن فايل
باينري موجود ، بعنوان ورودي و خروجي ) ، w+b ( ايجاد يك فايل باينري بعنوان
ورودي و خروجي ) و ياa+b ( ايجاد و يا بازكردن فايل موجود باينري بعنوان ورودي
و خروجي ) استفاده نمود . بعنوان مثال ، دستورات زير را در نظر بگيريد :

fp1= fopen( "test.dat"/ "w+b");( 1)
fp2= fopen( "sample.dat"/ "r+b");( 2)
fp3= fopen( "test2.dat"/"a+t");( 3)

دستور (1) ، فايلي بنام test.dat را از نوع باينري و بصورت ورودي و خروجي
باز مي كند كه اشاره گر fp1 به آن اشاره مي كند . اگر فايل test.dat قبلا" وجود
داشته باشد محتويات قبلي آن از بين خواهند رفت .دستور(2)، فايلي بنام sample.dat
را كه اكنون بر روي درايو جاري وجود دارد از نوع باينري و بصورت ورودي و خروجي
باز مي كند . اگر فايل sample.dat بر روي درايو جاري وجود نداشته باشد ، پيام
خطايي صادر خواهد شد . دستور (3) ، فايلي بنام test2.dat را از نوع text و به
صورت ورودي و خروجي باز مي كند . اگر فايل test2.dat قبلا" وجود نداشته باشد
ايجاد خواهد شد و اگر وجود داشته باشد اطلاعات قبلي آن محفوظ بوده و اطلاعات جديد
به انتهاي آن اضافه خواهد شد .
در حين كار با فايل ها ( نوشتن اطلاعات بر روي آنها و يا خواندن اطلاعات از
آنها ) براي برگشت به ابتداي فايل ( تغيير " موقعيت سنج فايل " طوري كه ابتداي
فايل اشاره كند ) بايد فايل را بسته و مجددا" آن را باز نمود ( البته با توجه
به مطالبي كه تاكنون در مورد فايل ها گفته شد ) . اين مطلب در مثال هايي كه
تاكنون مطرح شد به چشم مي خورد . اصولا" شايد در فايل هايي كه فقط بعنوان خروجي
و يا فقط بعنوان ورودي باز مي شوند، نياز به برگشت به ابتداي فايل ( بدون بستن
و باز كردن مجدد آن ) احساس نشود، ولي اين امر در مورد فايل هاي ورودي و خروجي
به عنوان يك نياز مطرح است . براي اين منظور از تابعي بنام ()rewind استفاده
مي گردد . الگوي تابع ()rewind در فايل stdio.h قرار داشته و بصورت زير است : void rewind( FILE *fp)

در الگوي فوق ، fp به فايلي اشاره مي كند كه " موقعيت سنج " آن بايد به
ابتداي فايل اشاره نمايد .

مثال : برنامه اي كه رشته هايي را از ورودي خوانده و در يك فايل text قرار
مي دهد و سپس محتويات اين فايل را خوانده و به صفحه نمايش منتقل مي كند .

#include "stdio.h"
#include "stdlib.h"

void main(void)
{
FILE *fp ;
char str(80);
if((fp=fopen("test"/"w+"))==NULL)
{
printf("cannot open file\n" );
exit(1);
}
printf("enter a string");
printf("(Enter to quit:)\n");
while( 1)
{
gets(str);
if(!str[0])
break ;
strcat(str/"\n");
fputs(str/fp);
}
printf("\n the content of");
printf(" file is:\n\n");
rewind(fp);
fgets(str / 79 / fp);
while( !feof(fp))
{
printf("%s"/str);
fgets(str / 79 /fp );
}
fclose(fp );
}

نمونه اي از خروجي برنامه بالا :

( متن وارد شدهه از طريق صفحه كليد به فايل text ) enter a string(Enter to quit:)
<< top of file >>
this is an example for
read/write file.
<>

( متن موجود در فايل text كه به خروجي منتقل شده است ) the aontent of file is:

<< top of file >>
this is an example for
read/wri

کيفيت مقاله :
عالی خوب متوسط ضعيف


عيب يابي در ورودي خروجي فايل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۸۵ مراجعه امروز
۴۳۷۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
عيب يابي در ورودي خروجي فايل
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۳۸۶ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

در حين انجام كار با فايل ها ممكن است خطايي رخ دهد . بعنوان مثال ، عدم
وجود فضاي كافي براي ايجاد فايل ، آماده نبودن دستگاهي كه فايل بايد در آنجا
تشكيل گردد و يا مواردي از اين قبيل منجر به بروز خطا مي شوند . با استفاده از
تابع ()ferror مي توان از بروز چنين خطايي مطلع گرديد . الگوي تابع ()ferror
در فايل stdio.h قرار داشته و بصورت زير است : int ferror( FILE *fp)

در الگوي فوق ، fp اشاره گري است كه مشخص مي كند اين تابع بايد بر روي چه
فايلي عمل كند. اين تابع يك تابع منطقي است . بدين معني كه اگر خطايي در رابطه
با فايل ها رخ داده باشد اين تابع ارزش " درستي " وگرنه ارزش " نادرستي " را
برمي گرداند . براي تشخيص خطا در كار با فايل ها ، بلافاصله پس از هر فعلي كه
روي فايل انجام مي شود بايد از اين تابع استفاده نمود .

مثال : برنامه اي كه كاراكترهاي tab را از فايل حذف كرده و بجاي آن به تعداد
كافي فضاي خالي (blank) قرار مي دهد . اسامي فايل هاي ورودي و خروجي از طريق
آرگومان به برنامه وارد مي شود .

#include "stdio.h"
#include "stdlib.h"

#define TAB_SIZE 8
#define OUT 1
#define IN 1
void err(int );
void main(int argc / char *argv[])
{
FILE *in / *out;
int tab / i ;
char ch ;
if(argc!=3)
{
printf("\n incorrect number of");
printf(" parameters" );
printf("\n\t press a key... " );
getch )(;
exit(1 );
}
in=fopen(argv[2] / "wb" );
if( in==NULL)
{
printf("\n cannot open");
printf(" output file." );
printf("\n\t press a key... " );
getch )(;
exit(1 );
}
tab=0;
do {
ch=getc(in );
if( ferror(in))
err(IN );
if(ch=='\t')
{
for( i=tab ; i < 8 ; i++)
{
putc(' ' / out );
if( ferror(out))
err(OUT );
}
tab=0 ;
}
else
{
putc(ch / out );
if( ferror(out))
err(OUT );
tab ++ ;
if( tab==TAB_SIZE ||
ch=='\n' || ch=='\r')
tab=0;
}
}while( !feof(in ));
fclose(in );
fclose(out );
}
void err(int eror)
{
if( eror==IN)
printf("\n error on input file.");
else
printf("\n press a key... ");
getch )(;
exit

کيفيت مقاله :
عالی خوب متوسط ضعيف


حذف فايل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۷۹۱ مراجعه امروز
۴۳۸۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
حذف فايل
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۱۱ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

براي حذف فايل هاي غيرضروري مي توان از تابع ()remove استفاده كرد . الگوي
اين تابع در فايل stdio.h قرار داشته و بصورت زير است : int remove( char *filename)

در الگوي فوق filename بنام فايلي كه بايد حذف شود ، اشاره مي كند. اگر عمل
تابع ناموفقيت انجام شود مقدار صفر وگرنه مقداري غير از صفر برگردانده خواهد
شد .

مثال : برنامه اي كه نام فايلي را بعنوان آرگومان پذيرفته و آنرا حذف ميكند.

#include "stdio.h"
#include "stdlib.h"

main(int argc / char *argv[])
{
char str[80] ;
if(argc!=2)
{
printf("\n you must type a file name!\n" );
exit(1 );
}
printf("erase %s( y/n:)"/argv[1]);
gets(str );
if(toupper(*str)=='y')
if(remove(argv[1]))
{
printf("cannot erase file\n");
exit(1);
}
}

نمونه اي از اجراي برنامه مثال بالا :

E:\TC>9-6 test.x
erase test.x(y/n:)y

کيفيت مقاله :
عالی خوب متوسط ضعيف


بافر (buffer) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۹۴ مراجعه امروز
۴۳۸۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بافر (buffer)
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۵۶۳ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

بافر ، حافظه اي است كه به فايل ها اختصاص مي يابد تا اعمال ورودي خروجي
بر روي آنها با سرعت بيشتري انجام گيرد. در حين خروج از برنامه خوب است كه جهت
اطمينان بيشتر ، به ماشين دستور داد تا كليه داده هاي موجود در بافرها را به
فايل مربوطه منتقل مي نمايد. براي اين منظور مي توان از تابع ()fflush استفاده
نمود . اگر كار اين تابع با موفقيت انجام شود ، مقداري كه توسط آن برگردانده
مي شود برابر با صفر وگرنه برابر با EOF خواهد بود ( EOF ماكرويي است كه در
فايل stdio.h تعريف شده است ) . الگوي تابع ()fflush در فايل stdio.h قرار
داشته و بصورت زير است : int fflush( FILE *fp)

در الگوي فوق ، fp فايلي را مشخص ميكند كه تابع ()fflush بايد بر روي آن عمل
نمايد . اگر fp ذكر نشود تابع ()fflush بر روي كليه فايل هايي كه بعنوان خروجي
باز شده اند عمل مي كند . بعنوان مثال ، دستور (f)fflush موجب مي شود تا كليه به فايل با اشاره گر f ، در اين فايل نوشته شوند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ورودي و خروجي همراه با فرمت ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۷۹۷ مراجعه امروز
۴۳۸۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ورودي و خروجي همراه با فرمت
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۴۱۲ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

اگر لازم باشد كه داده ها با فرمت خاصي در فايل نوشته و يا از آن خوانده شوند
مي توان از دو تابع ()fprintf و ()fscanf استفاده نمود . اين دو تابع دقيقا"
كار توابع ()printf و ()scanf را در ورودي خروجي معمولي ( غير از فايل )
انجام مي دهند . الگوي اين توابع در فايل stdio.h قرار داشته و به صورت زير
مي باشند :

int fprintf( FILE *fp/ "*control_string/..."/ char arg/)...
int fscanf( FILE *fp/ "*control_string/..."/ char arg/)...

در الگوي فوق ، fp اشاره گري است كه مشخص ميكند اعمال اين توابع بايد بر روي
چه فايلي انجام شود . control-srstring مشخص مي كند كه داده ها (args) بايد با
چه فرمتي نوشته و يا خوانده شوند .

مثال : برنامه اي كه يك رشته و يك عدد صحيح را از ورودي خوانده و آنرا در يك
فايل مي نويسد و سپس از اين فايل خوانده و در صفحه نمايش چاپ مي كند .

#include "stdio.h"
#include "stdlib.h"
#include "io.h"

void main(void)
{
FILE *fp;
char s[80] / number[10];
int t;
if((fp=fopen("test"/"w"))==NULL)
{
printf("cannot open file \n" );
exit(1 );
}
printf("\n enter a string: ");
gets(s);
strcat(s/"\n");
printf("\n enter anumber:");
gets(number);
t=atoi(number);
fprintf(fp/"%s%d"/s/t );
fclose(fp );
if((fp=fopen("test"/"r"))==NULL)
{
printf("cannot open file\n");
exit(1);
}
fscanf(fp/"%s%d"/&s/&t);
printf("\nstring=%s/digit=%d"/s/t);
}

نمونه اي از خروجي برنامه مثال بالا :

enter a string:hello!
enter a number:123
string=hello! / digit=123

در مورد تابع ()fprintf و ()fscanf بايد توجه داشت كه عليرغم اينكه ورودي
خروجي بااين دو تابع آسان است اما اطلاعات به همان صورتي كه در صفحه نمايش ظاهر
مي شوند در فايل ذخيره مي گردند . بعنوان مثال ، عدد 267 كه در صفحه نمايش ، 3
بايت را اشغال مي كند اگر توسط تابع ()fprintf بر روي فايل نوشته شود نيز 3
بايت را اشغال خواهد كرد ( توجه داريم كه عدد 267 يك عدد صحيح است و مي تواند
در دو بايت ذخيره شود ) . اين بدين معني است كه هر رقم بصورت كاراكتر تلقي
مي گردد . اگر اين عدد توسط تابع ()fscanf از روي فايل خوانده شود ، بايد عمل
تبديل كاراكتر به عدد صورت گيرد كه مستلزم صرف وقت است . براي جلوگيري از اين كه از دو تابع ()fread و ()fwrite استفاده گردد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ورودي خروجي ركورد ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۸۰۶ مراجعه امروز
۴۳۹۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ورودي خروجي ركورد
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۸/۱۳۸۱ اين مقاله ۱۶۸۵ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

همانطوركه تاكنون مشاهده گرديد توابع زيادي براي انجام اعمال ورودي خروجي
فايل وجود دارند . دو تابع ()fprintf و ()fscanf براي نوشتن و خواندن انواع
مختلفي از داده ها و با فرمت هاي متفاوت بر روي فايل بكار مي روند . البته اين
دو تابع از سرعت كمي برخوردارند كه توصيه مي شود از آنها استفاده نگردد . براي
ورودي خروجي ركورد و همچنين ساير ورودي خروجيها ميتوان از دو تابع ()fread
و ()fwrite استفاده نمود كه از سرعت بالايي برخوردارند . الگوي اين توابع در
فايل stdio.h قرار داشته و بصورتهاي زير مي باشند :

int fread( void *buffer/ int num_byte/ int count/ FILE *fp)
int fwrite( void *buffer/ int num_byte/ int count/ FILE *fp)

در الگوهاي فوق ، پارامتر buffer در مورد تابع fread به ساختمان داده يا
متغيري اشاره مي كند كه داده هاي خوانده شده از فايل بايد در آن قرار گيرند و
اين پارامتر تابع ()fwrite به محلي از حافظه اشاره مي كند كه داده هاي موجود در
آن محل بايد در فايل نوشته شوند . پارامتر num_byte در هر دو تابع طول داده اي
كه بايد خوانده يا نوشته شود را مشخص مي كند . پارامتر count تعداد عناصري است
كه طول آن توسط num_byte مشخص مي گرديد و بايد در فايل نوشته و يا از فايل
خوانده شوند . اشاره گر fp به فايلي اشاره مي كند كه توابع freadو fwriteو بايد
بر روي آنها عمل كنند . بعنوان مثال مجموعه دستورات زير را در نظر بگيريد :

char table [20];( 1)
char arr [10];( 2)
fwrite( table/ sizeof( char)/ 20/ fp);( 3)
fread( arr/ sizeof( char)/ 10/ fp);( 4)

دستورات (1) و (2) رشته هايي به طول هاي 20 و 10 را تعريف مي كنند . دستور
(َ3) ، 20 بايت از اطلاعات موجود در آرايه table را در فايلي كه fp به آن اشاره
مي كند مي نويسد . دستور (4) تعداد 10 بايت از اطلاعات را از فايلي كه fp به آن
اشاره مي كند خوانده و در متغير arr قرار مي دهد . توابع ()fread و ()fwrite
بيشتر در ورودي خروجي ركورد مورد استفاده قرار مي گيرند .

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

#include "stdio.h"
#include "stdlib.h"
main)(
{
FILE *p;
char numstr[10];
int i / salary ;
struct em
{
char name [10] ;
int hp;
int h;
} emp ;
clrscr )(;
p=fopen("employ.dat"/"wb+" );
if( p==NULL)
{
printf("cannot open output file");
printf("\n press a key... " );
getch )(;
exit(1 );
}
gotoxy(14/2 );
puts("<< data entry >>");
gotoxy(3/3 );
printf(" name hour pay");
printf(" hour " );
gotoxy(3/4 );
printf("--------- ----------");
printf("------ ");
i=5 ;
while( 1)
{
gotoxy(3/i );
gets(emp.name);
if(!emp.name[0])
break ;
gotoxy(21/i );
gets(numstr );
emp.hp=atoi(numstr );
gotoxy(34/i );
gets(numstr );
emp.h=atoi(numstr );
i++ ;
fwrite(&emp/sizeof(struct em)/1/p);
}
rewind(p );
clrscr)(;
gotoxy(7/2 );
puts(" << OUTPUT >> " ) ;
gotoxy(3/3 );
puts(" name salary ");
gotoxy(3/4 );
puts("-------- -----------");
i=5 ;
fread(&emp / sizeof(struct em)/1/p);
while(!feof(p))
{
gotoxy(3/i );
puts(emp.namp);
gotoxy(21/i );
printf("%d"/ emp.hp*emp.h );
i++ ;
fread(&emp/sizeof(struct em)/1/p);
}
gotoxy(6/++i );
puts("press a key... ");
getch )(;
}

نمونه اي از خروجي برنامه مثال 1 :

<< data entry >>
name hour pay hour
------ ---------- --------
ali 120 100
reza 500 50
ahmad 200 10

<< OUTPUT >>
name salary
-------- ----------
ali 12000
reza 25000
ahmad 2000

press a key...

مثال 2: برنامه اي كه يك بانك اطلاعاتي از دانشجويان تشكيل مي دهد . اطلاعاتي
در بانك قرار مي گيرند عبارتند از : نام دانشجو ، شماره دانشجويي ، نمره و
جنسيت دانشجو .
قبل از مشاهده ليست برنامه بهتر است نگاهي به نمودار سلسله مراتبي برنامه و
وظايف توابع داشته باشيم :
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ||init_list)(||| menu )(|| enter )(||display )(|| save )(|| load )(|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ||init_list)(||

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ شكل ( الف )
نمودار سلسله مراتبي برنامه مثال 2

وظيفه تابع ()main : فراخواني توابع مطابق شكل ( الف ) .
وظيفه تابع init-lslist : مقداردهي اوليه به ليست ( باNULL كردن اولين كاراكتر ( . name

وظيفه تابع ()menu : ظاهر نمودن منويي در صفحه نمايش .
وظيفه تابع ()enter : اخذ اطلاعات از صفحه كليد و قرار دادن آن در ليست .
وظيفه تابع ()display : چاپ محتويات ليست در صفحه نمايش .
وظيفه تابع ()save : انتقال محتويات ليست به فايل .
وظيفه تابع ()load : انتقال اطلاعات از فايل به ليست .

ليست برنامه مثال 2 :

#include "stdio.h"
#include "stdlib.h"
#define SIZE 100
struct student
{
char name [10] ;
int stno / sex ;
float grade ;
} list[SIZE] ;
int menu(void );
void init_list(void )/ enter(void );
void display(void )/ save(void );
void load(void );
main)(
{
char chois ;
init_list)(;
for(;;)
{
switch(menu))(
{
case 'e':
enter)(;
break;
case 'd':
display)(;
break;
case 's':
save )(;
break;
case 'i':
load )(;
break ;
case 'q':
exit(0 );
}
}
}
void init_list(void)
{
register int t ;
for( t=0 ; t < SIZE ; t++)
*list[t].name='\0' ;
}
void enter(void)
{
register int i ;
int row ;
char numstr[10];
for( i=0 ; i < SIZE ; i++)
if( !list[i].name)
break ;
if(i==SIZE)
{
printf("\n list is full " );
printf("press a key... " );
getch )(;
}
clrscr )(;
gotoxy(10/2 );
puts("<< INPUT DATA >>");
gotoxy(1/3 );
printf(" name stno ");
printf(" gread sex(1/2)" ) ;
gotoxy(1/4 );
puse( "-- ----- ------- ");
printf("------- -----" );
row=5 ;
for(;;)
{
gotoxy(1/row);
gets(list[i].name);
if(!list[i].name[0]);
break ;
gotoxy(12/row);
gets(numstr );
list[i].stno=atoi(numstr );
gotoxy(20/row);
gets(numstr );
list[i].grade=atoi(numstr );
gotoxy(30/row);
gets(numstr );
list[i].sex=atoi(numstr );
row ++ ;
i ++ ;
}
}
void display(void)
{
register int t ;
int row ;
clrscr )(;
gotoxy(10/2 );
puts("<< OUTPUT DATA >> " );
gotoxy(1/3 );
printf(" name stno gread ");
printf(" sex(1/2)" );
gotoxy(1/4 );
puse( " ----- ---- ------- ");
printf("--------" );
row=5 ;
for( t=0 ; t < SIZE ; t++)
{
if(*list[t].name)
{
gotoxy(1/row);
printf("%s"/list[t].name);
gotoxy(12/row);
printf("%d"/list[t].stno);
gotoxy(20/row);
printf("%.2f"/list[t].grade );
gotoxy(30/row);
printf("%d"/list[t].sex );
row ++ ;
}
}
gotoxy(5/row+2);
printf(" press a key... ");
getch )(;
}
void save(void)
{
FILE *fp ;
register int i ;
fp=fopen("st"/wb");
if(fp==NULL)
{
printf("\n cannot open file");
printf("\n press a key... ");
getch )(;
return ;
}
for(i=0 ; i < SIZE ; i++)
if(*list[i].name)
fwrite(&list[i]/
sizeof(struct student)/1/fp );
clrscr )(;
gotoxy(20/10 );
printf("data saved.press a key.");
getch )(;
}
void load(void)
{
FILE *fp ;
register int i ;
fp=fopen("st"/rb");
if(fp==NULL)
{
printf("\n cannot open file");
printf("\n press a key... ");
getch )(;
return ;
}
init_list )(;
for(i=0 ; i < SIZE ; i++)
{
fread(&list[i]/
sizeof(struct student)/1/fp);
if(feof(fp))
{
clrscr )(;
gotoxy(20/10 );
printf("data loaded.press a key.");
getch )(;
return ;
}
}
}
menu(void)
{
char s[80] ;
clrscr )(;
do {
gotoxy(20/4);
printf("E )enter data ");
gotoxy(20/6);
printf("D )display on screan");
gotoxy(20/8);
printf("L )load file");
gotoxy(20/10);
printf("S )save in file");
gotoxy(20/12);
printf("Q )quit");
gotoxy(20/14);
printf("enter your select:");
gets(s );
}while(!strchr("edlsq"/tolower(*s)));
return tolower(*s );
}

در برنامه مثال 2 از تابع ()tolower استفاده شده است .
براي آشنايي با نحوه عملكرد برنامه ، نتيجه دوبار اجراي آن را در زير مشاهده
مي كنيد :
نتيجه حاصل از اجراي اول :

E )enter data
D )display on screan
L )load file
S )save in file
Q )quit
enter your select:e
<< INPUT DATA >>
name stno grade sex(1/2)
-------- ----- ---- ------
reza 123 12.4 1
mohammad 321 16.6 1
mina 543 11.5 2

E )enter data
D )display on screan
L )load file
S )save in file
Q )quit
enter your select:d
<< OUTPUT DATA >>
name stno grade sex(1/2)
-------- ----- ---- ------
reza 123 12.4 1
mohammad 321 16.6 1
mina 543 11.5 2
press a key...

E )enter data
D )display on screan
L )load file
S )save in file
Q )quit
enter your select:s
data saved.press a key.

E )enter data
D )display on screan
L )load file
S )save in file
Q )quit
enter your select:q

نتيجه حاصل از اجراي دوم :
E )enter data
D )display on screan
L )load file
S )save in file
Q )quit
enter your select:l
data loaded.press a key.

E )enter data
D )display on screan
L )load file
S )save in file
Q )quit
enter your select:d
<< OUTPUT DATA >>
name stno grade sex(1/2)
-------- ----- ---- ------
reza 123 12.4 1
mohammad 321 16.6 1
mina 543 11.5 2
press a key...

E )enter data
D )display on screan
L )load file
S )save in file

کيفيت مقاله :
عالی خوب متوسط ضعيف


آشنايي با محيط ويژوال بيسيك ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۸۷ مراجعه امروز
۴۵۰۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آشنايي با محيط ويژوال بيسيك
نويسنده : محمد امدادی
موضوع : Visual Basic [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۱۶۰۹ بار مطالعه شده است
۲۸ نفر تا به حال به اين مقاله رای داده اند.

براي آنكه بتوانيد با visual basicبرنامه بنويسيدبايد با محيط آن آشنا شويد.

صفحه ابتدايي vbازاجزاي زير تشكيل شده است.

پنجره خواص

پنجره پروژه

ميله ابزار

جعبه ابزار

اغلب برنامه هايي كه خواهيدنوشت از نوع standard exeميباشند.ايننام ميگويدكه اگربرنامه را

كامپايل كنيد يك فايل .exeتوليد خواهدشد.

ميله ابزار:

ميله ابزارvbدرست زيرمنوي آن قرار دارد .

جعبه ابزار(tool box):

اين جعبه انباره كنترل هاي vbاست

پنجره فرم:

جائيستكه كنترل هاي برنامه روي آن قرار مي گيرند.البته يك برنامه مي تواند چندين فرم داشته باشد(MID).

پنجره پروژه:

پنجره پروژه محل كنترل اجزاء برنامه است.اين پنجره براي كنترل ومديريت فايلهاست ومي توانيد به كمك آن هر فايل را به ناحيه كاري VBآورده وروي آن كار كنيد.به پنجره پروژه كاوشگرپروژه هم مي گويند.)

در ميله ابزار پنجره پروژه سه دكمه ديده مي شود:

-دكمه View Code:كه باآن مي توانيد پنجره كد آيتم انتخاب شده را مشاهده كنيد.

-دكمه View Object:كه با آن مي توانيد پنجره فرم انتخاب شده رامشاهده كنيد.

-دكمه Toggle Folders:كه با آن مي توانيد ساختار نمايش پنجره پروژه را تغيير دهيد.

در پنجره پروژه اشياءمختلفي ديده مي شود:

پروژه: هميشه يك برنامه مي تواند داراي چندين پروژه باشد(مانند كنترلهاي (ActiveX

با پسوندVBP.

فرم : هر پروژه مي تواند فرمهاي متعددي داشته باشد.پسوند فرمها هميشه FRM.است.

module::كدها و روتين هاي عمومي برنامه كه به هيچ كنترل خا صي مربوط نيستند بايددر ماژولها قرار داده شوند.از يك ماژول به علت خصلت عمومي آنها مي توان در برنامه هاي متعددي استفاده كرد.با پسوند BAS .

module class:محل تعريف كدهايي كه اشياء پروژه را تعريف مي كنند.پسوند نام فايل ماژولهاي كلاس هميشه CLS. است.

كنترل كار بر:كنترلهاي اكتيو ايكس اضافه شده به پروژه.فايلهاي اكتيوايكس داراي پسوندOCX.هستند.

user document:سند كار بر سندي است كه مشخصات پروژه را توضيح مي دهد.با پسوند .DOB

property page: صفحات خواص براي تعريف كنترلهاي پروژه بكار مي روند.پسوند نام فايل صفحه خواص هميشه . PAGاست.

پنجره خواص:

پنجره خواص تمام خواص يك كنترل يك كنترل را داراست.مثل name,caption,size……

كمك!!

MSDN كمك در vbاست.

ساختن يك فرم

1ـ آيتم file/new project را كليك كنيد تا گفتگوي پروژه باز شود.

2ـ آيكون standard exe را انتخاب كنيد. يك فرم به نام form1 در ناحيه كاري محيط vb ظاهر خواهد شد.مشخصات فرم در پنجره خواص ظاهر خواهد شد.

3ـاز روي پنجره خواص مي توانيم طول و عرض ‍, نام و000 فرم را تغيير دهيم.

حال ميخواهيم يك دكمه كنترل به فرم اضافه كنيم0 از جعبه ابزار كنترل مورد نظر را انتخاب ميكنيم,اگر روي آن دو بار كليك كنيم كنترل در وسط فرم ايجاد ميشود و اگر يك بار كليك كنيم و روي فرم بياييم ميتوانيم كنترل را در جايي كه مي خواهيم قرار دهيم.

کيفيت مقاله :
عالی خوب متوسط ضعيف


معرفي چند كنترل مهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۹۰ مراجعه امروز
۴۵۰۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
معرفي چند كنترل مهم
نويسنده : محمد امدادی
موضوع : Visual Basic [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۱۱۶۰ بار مطالعه شده است
۱۴ نفر تا به حال به اين مقاله رای داده اند.
-2-Label :

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

برچسب بصورت افقي گسترش مي يابد. Auto size=True

برچسب بصورت عمودي گسترش مي يابد. Word wrap=True

براي آنكه Word wrapبتواند كار كند , Auto size بايد True باشد.

2-2-Text box:

كنترل جعبه متن به كاربر اجازه مي دهد چيزي بنويسد حتي الامكان كنار جعبه متن يك برچسب براي توضيح آن بكاربريد.

بعضي از خواص جعبه متن :

Alignment: تراز متن را مشخص مي كند (چپ,راست,وسط وكشيده).فقط وقتي معني دارد كه Multiline به True ست شده باشد.

Locked: اگر ‏True باشد كاربر قادر به دستكاري جعبه متن نخواهد بود وفقط بعد از False شدن آن اين امكان را خواهد داشت.

Multiline:اگر True باشديعني كنترل مي تواند بيش از يك خط متن در خود جاي دهد.

Password char: اگر بخواهيد از يك جعبه متن براي گرفتن اطلاعات محرمانه استفاده كنيد مي توانيد كاراكتري را به اين خاصيت نسبت دهيد.مثلا اگر كاراكتر* را به اين خاصيت نسبت داده باشيد كاربر هرچه در جعبه متن وارد كند فقط* در آن نقش خواهد بست.

Scroll Bars: با اين خاصيت مي توانيد تعداد و نوع ميله هاي لغزشي يك جعبه متن را ست كنيد.

0-None,يعني هيچ ميله اي وجود نخواهد داشت.

1-Horizontal,يعني فقط ميله لغزشي افقي داشته باشد.

2-vertical, يعني فقط ميله لغزشي عمودي داشته باشد.

3-Both, يعني هر دو نوع ميله لغزشي را داشته باشد.

براي آنكه جعبه متني بتواند ميله لغزشي عمودي داشته باشد بايد خاصيت Multiline آن True باشد.

Text:خاصيتي معادل متن موجود در Text box

3-2 Comand button- : كنترل دكمه فرمان

Caption,عنواني است كه روي دكمه فرمان ديده مي شود.براي آنكه كليدي داراي دسترسي سريع باشد بايد قبل از حرف مورد نظر در عنواندكمه يك علامت &قرار دهيد.

مثلا يك دكمه كه حرف Xدر عنوان آن زير خط دارد(كليد دسترسي سريع)رفتار كليك اين دكمه را مي توانيد با زدن همزمان Alt+X تقليد كنيد.

براي ايجاد چنين حالتي ,عنوان (Caption) اين كنترل بايد بصورت E&xit نوشته شود.

3-2 Image :كنترل تصوير يكي از دو كنترلي است كه مي تواند گرافيك نمايش دهد.(ديگري picture box است).

3-2-كنترل فوكوس:

وقتي فرم ظاهر مي شود فوكوس در اختيار كنترلي است كه خاصيت Deafault آن True باشد.ترتيب گرفتن فوكوس توسط خاصيت Tab index مشخص مي شود.

کيفيت مقاله :
عالی خوب متوسط ضعيف


رويدادهاي مهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۹۳ مراجعه امروز
۴۵۰۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
رويدادهاي مهم
نويسنده : محمد امدادی
موضوع : Visual Basic [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۱۰۸۱ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.
4-رويدادهاي مهم:

Activate: اين رويداد زماني روي مي دهد كه فرم فوكوس را در اختيار مي گيرد.در برنامه هايي كه داراي چند فرم هستند وقتي كاربر از فرمي به فرم ديگر مي رود اين رويداد اتفاق خواهد افتاد.

Click: وقتي كاربر روي يك قسمت خالي فرم كليك كند اين رويداد اتفاق خواهد افتاد.

اگرفوكوس در اختيار فرم نباشد همزمان رويداد Activate هم روي خواهد داد.

اگر خاصيت cancel دكمه اي به True ست شده باشد با زدن Esc رويداد كليك آن دكمه را تحريك مي كند.

1-4-نوشتن روال رويداد:

هر روال رويداد حاوي مقداري كد است. روال رويداد مربوطه را مدير تعريف مي كند.يك كنترل مي تواند رويدادهاي زيادي (و در نتيجه روايهاي زيادي ) داشته باشد.VB به هر رويداد نامي مي دهد كه تشكيل شده است از :كنترل و رويدادي كه روال به آن مربوط است .

شكل كلي:control name_enent name()

()نام رويداد ـ نام كنترل

اين نامگذاري بايد در تمامي روالهاي رويداد رعايت شوند.cmdexit_Dbclick() فقط وقتي اجرا مي شود كه كاربر دكمه cmdexit را دو بار كليك كند.

Vb قبل از نام تمام روالهاي رويداد عبارت private sub را قرار مي دهد و اين بدان معناست كه اين روالها فقط در ميدان ديد فرمي كه در آن هستند قرار خواهند داشت.

درvb دو نوع روال وجود دارد تابع function) )و سابروتين(sub rutin) . تمام روال رويدادها سابروتين هستند.تابع داراي مقدار برگشتي است ولي سابروتين مقدار برگشتي ندارد.

براي ظاهر كردن پنجره كد روي فرم يا كنترل دو بار كليك مي كنيم.

کيفيت مقاله :
عالی خوب متوسط ضعيف


ايجاد منوها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۶۹۶ مراجعه امروز
۴۵۱۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ايجاد منوها
نويسنده : محمد امدادی
موضوع : Visual Basic [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۱۰۰۴ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.
5-ايجاد منوها:

در جعبه ابزار vb هيچ ابزاري براي ساختن منو وجود ندارد.ابزار منو ساز vb كه اديتور من نام دارد در منوي Tools|Menu Editor قرار دارد.اين ابزار بازدن ctrl+E هم احضار مي شود.

1-5-طرز كار اديتور منو:

اديتور منو شبيه پنجره خواص است چون خواص منوهاي ساخته شده (وديگر اطلاعات مربوط به آنها)

را در اين پنجره مشاهده خواهيد كرد.

يك مثال براي ساختن منو:

اهداف برنامه:

1- نمايش يك برچسب در وسط فرم برنامه

2- منويي كه با آن كاربر مي تواند رنگ زمينه بر چسب را تغيير دهد .

3- منويي كه با آن كاربر مي تواند متن بر چسب را تغيير دهد .

4- منويي كه با آن كاربر مي تواند با آن از برنامه خارج شود.

يك برچسب با خواص زير :

name:lblMenu

aligment :2-center

backcolor : red

border style:1-fixed single

caption:select amenu option

font size:24

font style:bold

height:615

left:1888

top:2168

width :4935

حال روي فرم كليك كرده و با زدن ctrl+E اديتور منو را باز كنيد . اكثر فيلذها خالي هستند چون منوي ما هنوز هيچ چيزي ندارد.فيلد محلي است كه برنامه نويس مي تواند مقادير مورد نظر خود را در انجا وارد كند.

برنامه ما 2منو دارد:file - color

براي ايجاد منوي file :

1-در فيلد caption بنويسيد &file(& براي كليد دسترسي سريع)

2-با زدن Tab به فيلد بعدي برويد.shift+tab به عقب بر مي گرداند.

3-فيلد name را به نام mnu file مي گذاريم.(نام منو ها بهتر است با پيشوند mnu شروع شود)سپس عنواني را كه در ميله عنوان ديده خواهد شد را اضافه كنيد.باكليك روي دكمهnext منوي بعدي را بسازيد.

4-عنوان منوي بعدي &color ونا م آن mnucolor بگذاريد.

براي تست منو OK را كليك كرده وF5 را بفشاريد تا برنامه اجرا شود.

2-5-اضافه كردن زير منو ها:

براي اضافه كردن يك آيتم به منوي مورد نظرروي آيتم بعد از آن در ليست منوها كليك كرده و سپس روي دكمه insert كليك كنيد .

اديتور منو آيتم جديد راقبل از آيتم انتخاب شده قرار خواهد داد .مثلا اگرمي خواهيد بعد از منوي file يك آيتمجديد را ايجاد كنيد .بايد ابتدا آيتم &color رادر ليست منوها انتخاب كردهوسپس روي insertكليك كنيد. با اين كار اديتور منو يك خط خالي بين &file -&color ايجاد خواهد كرد.

حال آيتم exit رامثل ساختن file ايجاد مي كنيم پس از اجرا مي بينيم exit زيرfile مي آيد.

حال چگونه بايدvb بفهمد كه exit زير منوي file است برياين منظور بايد قبل از وارد كردن آيتم جديد روي دكمه >-كليك كنيد با اين كار vb در ابتداي خط جديد علامت … را قرار مي دهد .اين علامت مي گويد كه آيتممزبور بايد ذيل منوي file قرار گيرد و نه و نه در منوي اصلي بر نامه . سپس عنوان و نام اين آيتمها راe&xit و mnufileexit مي گذاريم .

اگر آيتمي كه وارد كرده ايد خود داراي زير منو است بايد براي آن دوباره دكمهء>--- را كليك كنيد.

استاندارد منوهاي ويندوز آنست كه اگر كليك كردن آيتمي باعث ظاهر شدن يك جعبه گفتگو (dialog box)ميشود بايد در انتهاي عنوان آن 000 قرار دهيد.

براي فعال يا غير فعال كردن آيتمي (چكدار كردن )مي توانيد از فيلدenabled اديتور منو استفاده كنيد.

براي تخصيص كليد ميانبر به آيتم منو مي توانيد از فيلد short cut از اديتور منو استفاده كنيد.

براي اينكه منويي كه ساخته ايدكار كند بايد براي آن كد بنويسيد.با كليك كردن روي منو رويداد كليك براي آن آيتم باز خواهد شد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


Datatype در VB (نوع داده ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۶۹۹ مراجعه امروز
۴۵۱۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Datatype در VB (نوع داده )
نويسنده : مديريت سايت
موضوع : Visual Basic [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۱۰۷۹ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.
6-Datatype در VB (نوع داده ):

در يك برنامه مي توانيم چندين فرم داشته باشيم براي اينكه تعيين كنيم كدام فرم ابتدا شروع به كار كند يك فرم را بعنوان startup form انتخاب مي كنيم براي اينكار آيتم project| (project name)

vb كليك كنيد و فرم مورد نظر را در محل مورد نظر بنويسيد.

Properties :

قسمت تعريف داده ها هميشه در ابتداي يك فرم يا يك ماژول است.

1-6-داده هاي عددي :

byte : يك بايت 0تا 255

integer : 2 بايت long : 4 بايت single : 8 بايت

double : 8 با currency : 8 بايت (با 4 رقم اعشار)

desined : 12 بايت (هنوز به طوركامل پشتيباني نمي كند)

2-6-ساير datatype ها :

string و data :8 بايت booleam : 2 بايت Tو R

object :4 بايت (معادل شي تعريف شده)

nariant : 16 بايت(عددي)

nariant (متن)

توجه: متغير هاي variant مي توانند از تمام data type ها قرار بگيرند

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر HTML ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۸۸ مراجعه امروز
۵۰۰۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر HTML
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۵۷۴۰ بار مطالعه شده است
۱۳۵ نفر تا به حال به اين مقاله رای داده اند.
مقدمه اي بر HTML

در اين درس با ويژگيهاي فايلهاي HTML يا اچتمل و نحوه ايجاد يک فايل ساده و نمايش آن در صفحه مرورگرتان آشنا خواهيد شد.

يک فايل HTML چيست؟
  • HTML را "اچ تي ام ال" و يا اچتمل بخوانيد.
  • HTML برگرفته از حروف اول Hyper Text Markup Language
    • ميباشد.
  • يک فايل HTML فايلي از نوع text ميباشد که متشکل از markup tag ها ميباشد.
  • مرورگر يا Browser از روي markup tag ها مي فهمد که چگونه بايد صفحه را نمايش بدهد.
  • يک فايل HTML بايد داراي انشعاب htm و يا html باشد.
  • يک فايل HTML فايلي از نوع text ميباشد که با هر اديتور ساده اي قابل ايجاد است.
  • وظيفه اصلي تگ هاي اچتمل ( markup tags ) بيان چگونگي نمايش اطلاعات ميباشد.
ميخواهيد که يک فايل اچتمل بسازيد؟

اگر از ويندوز مايکروسافت استفاده ميکنيد، Notepad را باز کرده (Mac کارها از SimplaeText استفاده کنند. ) و متن زير را در آن تايپ کنيد:

<html>
<head>
<title>Title of page</title>
</head>
<body>
This is my first html page. <b>This text is bold</b>
</body>
</html>

سپس فايل را با نام مثلا test.html در درايو c:\ ذخيره کنيد.

براي ديدن فايل اچتمل بالا در مرورگر يا Brower تان ( معمولا اينترنت اکسپلورر و يا نتسکيپ نويگيتور ) کافي است که از روي منوي File/Open file فايل بالا را از روي محل ذخيره شده بخوانيد. ( به آدرس فايل در قسمت Address توجه کنيد، مثلا c:\test.html)
يکي از مهمترين وظايف مرورگرها نمايش صفحات اچتمل ميباشد، چه اين صفحات روي کامپيوتر شما ذخيره شده باشند و يا اينکه از اينترنت خوانده شوند. با کليک روي اين لينک فايلي شبيه فايل ذخيره شده توسط شما از روي وب سرور توسط مرورگرتان خوانده شده و سپس نمايش داده خواهد شد!!! ( به آدرس فايل در قسمت Address توجه کنيد، مثلا http://www.khaterat.com/html/dars/test.html )

توضيح مثال بالا

اولين تگ مثال بالا تگ <html> ميباشد. از روي اين تگ، مرورگر نوع متن يعني اچتمل بودنش را يافته و از روي <html/> انتهاي متن اچتمل را ميبابد.

متن بين تگ <head> و تگ <head/> اطلاعات شناسنامه اي يا "Header information" متن اچتمل بوده و نمايش داده نخواهند شد. در اين مثال با کمک تگهاي <title> و <title/> تيتر و يا Title صفحه که در اين مثال عبارت "Title of page" ميباشد در بالاي مرورگر نمايش داده خواهد شد.

متن بين تگ <body> و انتهاي آن يعني تگ <body/> تنها اطلاعاتي است که توسط مرورگرنمايش داده خواهند شد.

متن بين تگ <b> و انتهاي آن يعني تگ <b/> بصورت Bold و يا توپر نمايش داده خواهند شد.

انشعاب فايل htm يا html ؟

اغلب مرورگرها هر دو نوع انشعاب را به خوبي ميشناسند ولي ترجيحا به هنگام ذخيره فايلهاي اچتمل از html استفاده کنيد.( استفاده از انشعابهاي سه حرفي مانند htm مربوط به قديم و سيستم عاملهائي چون DOS بودند.)

نکته اي در مورد اديتورهاي اچتمل ( HTML Editors )

با وجوديکه با استفاده از اديتورهاي اختصاصي اچتمل مانند FrontPage و يا Claris Home Page امکان نوشتن و طراحي صفحات اچتمل بصورت WYSIWYG يا "What You See Is What You Get" وجود دارد اما توصيه ميشود که از اديتورهاي معمولي متن براي تهيه صفحات خود استفاده کرده، عملکرد تگها را شناخته و هيچگاه بدون اينکه بدانيد کاربرد يک تگ چيست آنرا بکار نبريد.

بيشترين سوالات پرسيده شده ( FAQ ) :

فايلم را درست کردم ولي هنوز نميتوانم آنرا در صفحه مرورگرم ببينم، مشکل کجاست؟
مطمئن شويد که فايل را با انشعاب درست (htm يا html ) ذخيره کرده ايد. در ضمن مطمئن شويد که همان فايل را Open کرده ايد.( نام و مسير فايل را در قسمت Address مرورگرتان چک کنيد.)

هر بار پس از تغيير و اديت مثالها نسخه اوليه را در صفحه مرورگرم ميبينم و تغييرات داده شده مشاهده نميشود، مشکل کجاست؟
به خاطر بالا بردن سرعت، هميشه مرورگرها از نسخه هاي موجود در Cache يا حافظه موقت خود براي خواندن صفحات استفاده ميکنند.براي وادار کردن مرورگر به خواندن اصل صفحه کافي است که در مرورگرتان Refresh/Reload کنيد. در اينترنت اکسپلورر کليد F5 يا View/Refresh و در نت اسکيپ Ctrl+R يا View/Reload اينکار را انجام خواهند داد.

آيا ميتوانم از هر دو مرورگر Internet Explorer و Netscape Navigator استفاده کنم؟
بله، فقط اگر از استاندارد يونيکد براي فارسي نويسي استفاده ميکنيد، براي ديدن درست صفحات فارسي بايد از نسخه 5 Internet Explorer و به بالا و در مورد Netscape Navigator از نسخه 6.2 و به بالا استفاده کنيد.

کجا ميتوانم آخرين نسخه از مرورگرهاي Internet Explorer و Netscape Navigator را داونلود کنم؟
Internet Explorer اينجاست و Netscape Navigator اينجا.

کيفيت مقاله :
عالی خوب متوسط ضعيف


HTML & WWW ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۹۱ مراجعه امروز
۵۰۰۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
HTML & WWW
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۳۴۰۵ بار مطالعه شده است
۵۰ نفر تا به حال به اين مقاله رای داده اند.

در اين درس با مفاهيم وب، اينترنت، مرورگرها و استانداردهاي وب آشنا خواهيد شد.

منظور از وب چيست؟
  • وب شبکه اي است متشکل از تمامي کامپيوترهاي دنيا، شبکه اي از شبکه ها.
  • اينترنت، وب، WWW ، web يا World Wide Web همگي يک چيزند.
  • تمامي کامپيوترهاي وب ميتوانند با هم ارتباط داشته باشند.
  • کامپيوترهاي موجود در وب با کمک استاندارد ارتباطي يا پروتوکل HTTP با هم ارتباط برقرار ميکنند .
نحوه کارکرد وب چگونه است؟
  • اطلاعات وب داخل فايلهائي به نام Web Pages و يا صفحات وب قرار دارند.
  • اين فايلها يا صفحات روي Web Server يا کامپيوترهاي سرويس دهنده وب ذخيره شده اند.
  • براي ديدن صفحات وب از نرم افزاري به نام مرورگر و يا Web Browser استفاده ميشود.
  • دو مرورگر Internet Explorer و Netscape Navigator جزو معروفترين مرورگرها حساب ميشوند.
  • مرورگر Internet Explorer متعلق به شرکت مايکروسافت و مرورگر Netscape Navigator متعلق به شرکت نت اسکيپ ميباشد.
مرورگرها چگونه به خواندن صفحات وب ميپردازند؟
  • يک مرورگر با کمک يک Request درخواستي براي خواندن يک صفحه از وب سرور ميکند.
  • اين Request يا درخواست بر اساس استاندارد ارتباطي يا پروتوکل HTTP بوده و شامل آدرس صفحه مورد نظر ميباشد.
  • آدرس يک صفحه وب چيزي شبيه http://www.khaterat.com/faq.html است. بخش //:http نوع پروتوکل و يا استاندارد ارتباطي را تعيين ميکند، www.khaterat.com نام دومين يا Domain است و faq.html نام صفحه اي است که بايد خوانده شود.
مرورگرها چگونه صفحات وب را نمايش ميدهند؟
  • چگونگي نمايش يک صفحه وب بصورت مستتر در آن وجود دارد.
  • مرورگرها از روي دستورالعملهاي داخل صفحات وب و با کمک تگ ها به نمايش صفحات ميپردازند.
  • وظيفه اصلي تگ هاي اچتمل ( HTML tags ) بيان چگونگي نمايش اطلاعات ميباشد.
  • يک تگ اچتمل چيزي شبيه <p> اين تگ پاراگراف است! </p> است.
چه کساني استاندارد هاي وب را تعيين ميکند؟
  • تعيين استاندارد هاي وب ربطي به شرکتهاي مايکروسافت و يا نت اسکيپ ندارد.
  • World Wide Web Consortium يا W3C متولي تعيين استانداردهاي وب است.
  • HTML, CSS and XML از مهمترين استانداردهاي تصويب شده وب ميباشند.
  • آخرين استاندارد HTML استاندارد XHTML 1.0 ميباشد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


عناصر ( Elements ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۱۹۴ مراجعه امروز
۵۰۱۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
عناصر ( Elements )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۹۶۸ بار مطالعه شده است
۱۸ نفر تا به حال به اين مقاله رای داده اند.

يک فايل اچتمل متني از نوع text است که از عناصر يا element ها تشکيل ميشود و براي ايجاد عناصر از تگ ها يا tags استفاده ميشود. در اين فصل با عناصر و تگ ها اچتمل آشنا خواهيد شد.

تگ هاي اچتمل (HTML Tags)
  • با کمک تگ هاي اچتمل عناصر و يا Elements ساخته ميشوند.
  • در زبان اچتمل حدود 80 عنصر تعريف شده است.
  • تگ هاي اچتمل بوسيله دو نويسه (char) > و < ساخته ميشوند.
  • تگ هاي اچتمل معمولا بصورت زوج ظاهر ميشوند، مانند <b>test</b>
  • تگ اول در يک زوج تگ مثلا <b> تگ شروع و تگ دوم مثلا <b/> تگ پاياني نام دارد.
  • متن بين تگ اول و تگ دوم در يک زوج تگ محتواي عنصر يا element content ناميده ميشود، مثلا "test"
  • تگ هاي اچتمل را ميتوانيد بوسيله حروف لاتين کوچک (lower case) و يا بزرگ (upper case) بنويسيد و case sensitive نيستند. براي مثال دو تگ <b> و <B> معادل هم هستند ولي شديدا توصيه ميشود که به خاطر سازگاري با XHTML از حروف کوچک استفاده شود.
عناصر اچتمل (HTML Elements)

مثال بخش مقدمه را در نظر بگيريد:

<html>
<head>
<title>Title of page</title>
</head>
<body>
This is my first html page. <b>This text is bold</b>
</body>
</html>

*** نمونه اي از يک عنصر اچتمل:

<b>This text is bold</b>
عنصر اچتمل بالا با تگ <b> شروع شده و با تگ <b/> پايان مي يابد. محتواي اين عنصر عبارت "This text is bold" است. لازم به ذکر است که کاربرد تگ <b> نمايش توپر يا bold متون است.

*** مثال دوم يک عنصر اچتمل (معلوم الحال) :

<body>
This is my first homepage. <b>This text is bold</b>
</body>
عنصر اچتمل بالا با تگ <body> شروع شده و با تگ <body/> پايان مي يابد. همانطور که ميبينيد گاهي يک عنصر حاوي يک يا چند تگ ديگر ميباشد.وظيفه تگ <body> تعيين بدنه اصلي يا body يک متن اچتمل است.لازم به يادآوري است که تنها اطلاعات بخش <body> يک فايل اچتمل در صفحه مرورگر نمايش داده خواهد شد.
شناسه هاي يک تگ (Tag Attributes)

تگ ها ميتوانند حاوي اطلاعات اضافي ديگر باشند، به اين اطلاعات شناسه يا Attribute ميگويند و وظيفه آنها بيان ديگر اطلاعات يک عنصر يا Element ميباشد. مثلا در مورد تگ <body> شناسه اي به نام bgcolor وجود دارد که رنگ زمينه متن (background) را تعيين ميکند براي نمونه اگر ميخواهيد که رنگ زمينه صفحه اچتملتان سياه باشد کافي است که به شکل زير عمل کنيد :

<body bgcolor="black">

در مثال زير تگ <body> داراي چهار شناسه مختلف با نامهاي width، height ، align و border و مقادير center، 60، 100 و 0 ميباشد.
<table border="0" width="100" height="60" align="center" >
......
</table>

شناسه ها به صورت کلي "مقدار=نام" يا "name=value" نوشته ميشوند و هميشه به تگ شروع يک عنصر يا Element اضافه ميشوند و نهايتا اگر در يک عنصر يا Element شناسه ها قيد نشوند از مقادير قراردادي يا default آنها استفاده خواهد شد مثلا در تگ body اگر شناسه bgcolor نوشته نشود از رنگ سفيد براي زمينه صفحه استفاده خواهد شد.
مقدار يک شناسه را ميتوانيد داخل نويسه هاي " و يا ' بنويسيد و اختيار دست شما است فقط در مواردي که مقدار يک شناسه شامل نويسه " هم ميشود بايد از نويسه ' استفاده شود.

کيفيت مقاله :
عالی خوب متوسط ضعيف


تگ های اصلی ( Basic Tags ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۱۹۷ مراجعه امروز
۵۰۱۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تگ های اصلی ( Basic Tags )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۳۱۹۹ بار مطالعه شده است
۲۷ نفر تا به حال به اين مقاله رای داده اند.

تگ ها ( tags ) اجزا تشکيل دهنده عناصر يا elements هاي اچتمل هستند و در اين فصل با عناصر و تگ هاي پايه و مهم:
<hr> , <br> , <h1> .... <h6> , <!-- comment --> , <p>
آشنا خواهيد شد . يکي از بهترين روش هاي يادگيري تگ هاي اچتمل ديدن مثالها و تغيير آنها ميباشد و با کمک اديتور اختصاصي ما و با استفاده از امکانات فارسي نويسي آن به صورت آنلاين ميتوانيد به مطالعه و يادگيري مثالها پرداخته، کدهاي اچتمل را تغيير داده و با کليک روي دکمه "نمايش نتايج" به مشاهده نتايج بپردازيد.

مثالها :

مثالي ساده از يک صفحه اچتمل
در اين مثال بسيار ساده جمله "!Hellow World" در صفحه مرور گر نمايش داده ميشود و در واقع محتوا و متن عنصر body تماما نمايش داده خواهد شد.

پاراگرافهاي ساده:
چگونگي نمايش متون با کمک تگ <p> و بصورت پاراگرافي

نمايش متون فارسي:
چگونگي نمايش متون فارسي. براي جزئيات بيشتر به فصل فارسي نويسي مراجعه کنيد.

مثالهاي بيشتر:

سر تيترها (Headings)
سر تيترها با کمک تگ هاي <h1> تا <h6> تعيين ميشوند. <h1> معرف بزرگترين سر تيتر و <h6> معرف کوچکترين سر تيتر است. مرورگر به هنگام نمايش يک سر تيتر بصورت اتوماتيک يک سطر خالي قبل و بعد از هر سر تيتر اضافه خواهد کرد.
<h1>This is a heading</h1>
<h2>This is a heading</h2>
<h3>This is a heading</h3>
<h4>This is a heading</h4>
<h5>This is a heading</h5>
<h6>This is a heading</h6>
مثال بالا در صفحه مرورگر بدين شکل نمايش داده خواهد شد.
پاراگرافها (Paragraphs)
پاراگرافها با کمک تگ <p> معرفي ميشوند.مرورگر به هنگام نمايش يک پاراگراف بصورت اتوماتيک يک سطر خالي قبل و بعد از آن اضافه خواهد کرد.
<p>This is a paragraph</p>
<p>This is another paragraph</p>
مثال بالا در صفحه مرورگر بدين شکل نمايش داده خواهد شد.

سطر جديد (Line Breaks)

براي رفتن سر سطر جديد از تگ <br> استفاده ميشود.در اينحالت يک پاراگراف جديد ايجاد نميشود. تگ <br> از نوع تگ هاي خالي بوده و داراي تگ انتهائي (مثلا <br/> ) نميباشد.

<p>This <br> is a para<br>graph with line breaks</p>
مثال بالا در صفحه مرورگر بدين شکل نمايش داده خواهد شد.
کامنت ها در اچتمل (Comments)

براي نوشتن شرح و توضيحات در مورد کدهاي اچتمل بايد از تگ خاصي استفاده کنيد. براي اينکار بايد متن و شرحتان را درون علائم <-- و --!> قرار دهيد. مرور تگ هاي comment را در نظر نگرفته و محتوي آنها را نمايش نخواهد داد و فقط شرح و توضيحات براي برنامه نويس و ديگر افرادي که احتمالا در آينده با کد اچتمل کار خواهند کرد مفيد خواهد بود. (به محل نويسه "!" توجه کنيد! فقط يکي و آنهم در ابتدا)

<!-- This is a comment -->
مثالي در مورد comments و نحوه استفاده از آن
چند نکته کاربردي:

توجه داشته باشيد که بدليل وجود مرورگرهاي متفاوت (اکسپلورر، نت اسکيپ، ..) و به دليل تفاوت دقت نمايش صفحه نمايش کامپيوترها، صفحات اچتمل با اندکي تفاوت در حالتهاي مختلف نمايش داده ميشوند و هميشه سعي کنيد که صفحاتتان را نه تنها با اکسپلورر که معروفترين مرورگر است بلکه با نت اسکيپ و حتي مرورگرهاي کامپيوترهاي مکينتاش چک کرده و همچنين در دقت هاي نمايش 800x600 و 1024X768 آن را امتحان کنيد.

از نظر فاصله و سطر بندي، متني که در صفحه اديتورتان تايپ ميکنيد با چيزي که مرورگر نمايش خواهد داد متفاوت خواهد بود.هميشه به ياد داشته باشيد که فاصله هاي اضافي (space) و خطهاي خالي متن در صفحه اديتور توسط مرورگر در نظر گرفته نشده و نمايش داده نخواهد شد.

براي نمايش بيش از يک فاصله خالي بايد از نويسها يا ترکيب کاراکتري خاصي (None Breaking Space) استفاده کنيد. در بخش ( Entities ) نهادها به اين مطلب بيشتر پرداخته خواهد شد.

فاصله هاي اضافي بين کلمات در يک متن اچتمل توسط مرورگرها ديده نخواهد شد و در نمايش هميشه تبديل به يک فاصله (space) خواهد شد. در ضمن يک خط خالي در متن اديتور بصورت يک فاصله يا space نمايش داده خواهد شد.

براي ايجاد يک سطر جديد هيچگاه از يک تگ <p> خالي استفاده نکنيد و به جاي آن از تگ <br> استفاده کنيد..

مرورگرها به هنگام نمايش بعضي عناصر بصورت اتوماتيک يک سطر خالي قبل و بعد از آن عنصر نمايش خواهند داد. براي نمونه اين گروه از عنصرها ميتوان از پاراگراف (<p>) و سرتيترها (<h..>) نام برد.

تگ <hr> يا Horizontal Roler سبب نمايش يک خط افقي خواهد شد و در واقع بخش هاي مختلف مطالب اين صفحات با کمک اين تگ از هم جدا شده اند.

مثالهاي بيشتر:

باز هم مثال پاراگرافها
اين مثال بعضي از مقادير قراردادي عناصر پاراگراف را شرح ميدهد.

ترازبندي پاراگراف ها
اين مثال نحوه تراز بندي يک پاراگراف را با کمک شناسه يا attribute اي به نام align نشان ميدهد. در اين حالت پاراگراف در وسط ناحيه نمايش داده خواهد شد.
( "align="center )

رفتن سر سطر جديد
اين مثال نحوه استفاده از تگ <br> را در يک متن اچتمل نشان ميدهد.

سر تيترها
اين مثال نحوه استفاده از تگهاي <h1> .... <h6> را در يک متن اچتمل نشان ميدهد.

ترازبندي سر تيترها
اين مثال نحوه تراز بندي يک سر تيتر را با کمک شناسه يا attribute اي به نام align نشان ميدهد. در اين حالت سر تيتر در وسط ناحيه نمايش داده خواهد شد.
( "align="center )

نمايش خطوط افقي
اين مثال نحوه نمايش خطوط افقي با استفاده از تگ <br> ميباشد.

استفاده از comment
اين مثال نحوه استفاده از comment در کدهاي اچتمل را نمايش ميدهد.

تعيين رنگ زمينه صفحه
اين مثال نحوه تعيين رنگ زمينه صفحه را با کمک يکي از شناسه هاي (attribute ) عنصر body با نام bgcolor نشان ميدهد. (Background Color)
( "bgcolor ="blue )

تگهاي اصلي
در جدول زير عناصر معرفي شده در اين فصل به همراه لينکهاي مربوطه جهت مطالعه بيشتر آورده شده است. توجه داشته باشيد که براي هر عنصر فهرستي از شناسه ها يا Attributes موجود است و همچنين به شناسه هاي کنارگذاشته شده (Deprecated) در نسخه هاي آينده اچتمل توجه داشته باشيد و سعي کنيد که از آنها استفاده نکنيد.

:

Start Tag | Purpose | کاربرد
<html> | Defines a html document | نشان شروع متن اچتمل
<body> | Defines the document's body | تعيين بدنه و قسمت اصلي صفحه اچتمل
<h1>-<h6> | Defines heading 1 to heading 6 | تعريف سر تيترهاي h1 تا h6
<p> | Defines a paragraph | تعريف پاراگراف
<br> | Inserts a single line break | رفتن سر خط جديد
<hr> | Defines a horizontal rule | نمايش خط افقي
<!--> | Defines a comment in the HTML source code | نوشتن شرح و comment

مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


فارسی نويسی ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۰۰ مراجعه امروز
۵۰۱۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فارسی نويسی
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۵۵۴۷ بار مطالعه شده است
۵۹ نفر تا به حال به اين مقاله رای داده اند.

در اين درس با فارسي نويسي، فارسي سازي و استاندارد يونيکد و نحوه استفاده از اديتور آنلاين و فارسي اين سايت آشنا خواهيد شد. همچنين متاتگ http-equiv و شناسه dir نيز معرفي خواهد شد.

سؤالات مربوط به فارسي نويسي را ميتوان به سه گروه عمده تقسيم کرد:
- چگونه فارسي بنويسم ؟
- چگونه فارسي بخوانم؟
- چگونه صفحات اچتمل فارسي را نمايش دهم؟

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

* راهنماي فارسي سازي ويندوز
* استفاده از استانداردِ يونيکد
* وبلاگ فارسي FAQ

دو نکته بسيار مهم در مورد فارسي نويسي:

  • روش کدگزاري UTF-8
    اکيدا توصيه ميشود که براي تايپ و تمايش متون فارسي از استاندارد يونيکد و روش کدگزاري UTF-8 اسنفاده شود و اين روشي است که مطالب اين سايت و اديتور آنلاينش از آن استفاده ميکند.نکته مهم در نمايش صحيح متون فارسي تعيين نوع کدگزاري يا encoing صفحات فارسي است که براي اينکار بايد از متاتگ خاصي به نام http-equiv در بخش head صفحات اچتمل به شکل زير استفاده شود:

    • <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    در اينصورت مرورگر يا Browser قبل از نمايش صفحه از روي متاتگ فوق نوع کدگزاري (Encoding) را تشخيص داده و ديگر مثلا نيازي به تعيين دستي (دراکسپلورور 5 : View/Encoing/Unicode / UTF-8 ) نوع Encoing توسط بازديدکننده سايت نخواهد بود.

  • شناسه يا attribute ي به نام dir
    جهت نمايش متون لاتين به صورت پيش فرض و default از چپ به راست (ltr) ميباشد.در مورد متون و جملات فارسي بايد با کمک روشي جهت نمايش پيش فرض را به "راست به چپ" تغيير دهيد. شناسه يا attribute ي به نام dir يا همان direction اين کار را براي شما انجام ميدهد. اين شناسه داراي دو مقدار ممکن ميباشد :

    • dir="ltr" , Left-to-right text. - چپ به راست
    dir="rtl" , Right-to-left text. - راست به چپ

    مثلا براي نمايش جمله فارسي "سلام بر دنياي وب!" با کمک عناصر p يا div کافي است که به يکي از شکلهاي زير عمل شود:

    <p dir="rtl"> سلام بر دنياي وب </p>
    <div dir="rtl"> سلام بر دنياي وب </div>

    در بسياري از عناصر و تگ هاي اچتمل امکان استفاده از شناسه dir ميسر بوده و به عنوان نمونه ميتوان از عناصر زير نام برد:

    <p> , <div> , <html> , <body> , <table> , <tr> , <td> , <h1 ... h6> , <input> , <pre> , <select> , <span> , ...

    مثالهاي زير نحوه ترازبندي متون فارسي را به نمايش ميگذارند و براي مطالعه بيشتر در مورد ترازبندي متون "راست به چپ" به اين صفحه مراجعه کنيد. (عناصر BDO ، Span و شناسه lang هم براي مطالعه مفيد ميباشند.)

    مثالهاي فارسي نويسي:
    مثال 1 : سلام بي وفا
    به بخش head و تگ div توجه کنيد. متا تگ http-equiv نوع کدگزاري را تعيين ميکند و در اينجا با کمک تگ div جهت نوشتن مطالب (از راست به چپ يا بلعکس) تعيين ميگردد. dir به معناي direction و جهت بوده و rtl مخفف right to left و ltr معادل left to right ميباشد.

    مثال 2 : متن ها و پاراگراف بندي
    به عناصر div و p توجه کنيد. با کمک شناسه dir جهت نوشتن مطالب (از راست به چپ يآ بلعکس) تعيين ميگردد.

    مثال 3 : متون فارسي و لاتين در کنار هم
    مثالي کاملتر با راهنماي استفاده از عنصر div و شناسه dir آن

    مثال 4 : شناسه dir در عنصر html
    اگر شناسه dir را در عنصر html بکار ببريد جهت نمايش تمامي متون از راست به چپ شده و براي نوشتن از چپ به راست بايد به صورت موردي شناسه "dir="ltr را استفاده کنيد. همچنين در اين حالت ماسماسک! Scrool down مرورگر در سمت چپ صفحه نمايش داده خواهد شد. در صورت استفاده شناسه dir در عنصر body ماسماسک همان سمت راست خواهد ماند.

    مثال 5 : مثال کامل
    نحوه استفاده شناسه dir در عنصرهاي مختلف

    لازم به ذکر است که براي فارسي نويسي از کدهاي java script موجود در اين آدرس که ابزارهاي برنامه نويسي فراهم شده توسط شوراي عالي انفورماتيك و دانشجويان دانشگاه صنعتي هستند، استفاده شده است و توصيه ميشود که پروژه farsiweb.info را فراموش نکرده زيرا که استاندارد آينده فارسي نويسي اينترنتي در ايران خواهد شد.

    کيفيت مقاله :
    عالی خوب متوسط ضعيف


فرمت دهی ( Formatting ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۰۳ مراجعه امروز
۵۰۱۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فرمت دهی ( Formatting )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۵۰۲ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.

وظيفه گروهي از تگ هاي اچتمل فرمت دهي و تعيين شکل نمايش متون ( مثلا ضخيم و bold بودن و يا مورب و ايتاليک بودن ) ميباشد و در اين درس با اين گروه از تگهاي formating آشنا خواهيد شد:

<b> , <big> , <code> , <del> , <em> , <i> , <ins> , <kbd> , <pre> , <s> , <samp> , <small> , <strike> , <strong> , <sub> , <sup> , <tt> , <u> , <var>

مثالهاي شکل دهي متون (Text Formatting)
در مثالهاي زير نحوه استفاده از عناصر و تگهاي شکل دهي متون شرح داده شده اند:

شکل دهي متون
شکلهاي مختلف نمايش متون با کمک عناصر b , strong , big , em , i , small , sub , sup

متون از قبل شکل دهي شده
نمايش متون از قبل شکل دهي شده با کمک عنصر pre يا pre Formatted
براي نمايش اشعار فارسي استفاده از عنصر pre بهترين انتخاب ميباشد.

عناصر ديگر شکل دهي متن
نمايش متون deleted، underline و ... با کمک عناصر code , kbd , tt , samp , var , del , ins

نحوه ديدن سورس کدهاي اچتمل (HTML Source)

  • اگر ميخواهيد که سورس کدهاي اچتمل صفحات وب را ببينيد کافي است که در منوي View مرورگرتان حالت Source يا Page Source را انتخاب کرده و مرورگر کد اچتمل را درون اديتوري باز کرده و قابل ذخيره توسط شما براي استفاده هاي بعدي ميباشد.
  • اگر صفحه مورد نظر از مجموعه فريمها (Frameset) استفاده کرده باشد براي ديدن سورس کد اصلي فريمها کافي است که ابتدا با کمک روش بالا به مشاهده سورس کدهاي اچتمل پرداخته (لازم به توضيح است که در اين حالت فقط تعاريف کلي فريمها قرار دارند.) و سپس براي ديدن کد اچتمل اختصاصي هر صفحه بايد پس از "Right Click" روي هر صفحه "View Source" کرده و کد اچتمل هر فريم را جداگانه ببينيد.
  • اگر طراح سايت با کمک Java Script مانع ديدن سورس توسط شما ميشود، ابتدا در منوي Tools/Internet Options.../Security/Custom Level مرورگرهاي اکسپلورر امکانات جاواسکريپت مرورگر را غير فعال کرده (disable) و سپس مراحل بالا را تکرار کنيد!!!

چند نکته کاربردي:

  1. در استفاده از Underline دقت كنيد چون در اكثر مرورگرها، پيوندها با اين خطوط نشان داده مي شوند و اين مساله ميتواند كاربران را دچار اشتباه كند .
  2. به كارگيري تگهاي EM و STRONG كه جايگزين تگهاي I و B هستند ، اين اطمينان را مي دهد كه صفحه شما توسط همه مرورگرها بصورت صحيح نمايش داده خواهد شد .
  3. به ترتيب بسته شدن تگهاي پاياني در مثال زير دقت كنيد، همان گونه كه مشاهده مي كنيد عنصر STRONG بعد از عنصر U شروع شده است ، به همين خاطر تگ خاتمه دهنده آن قبل از تگ خاتمه دهنده U قرار مي گيرد.
    <U>version <STRONG>2.0</STRONG></U>
تگهاي فرمت دهي متون
Start Tag | Purpose | کاربرد
<b> | Defines bold text | نمايش توپر
<big> | Defines big text | نمايش در اندازه بزرگ
<em> | Defines emphasized text | نمايش بصورت تاکيد شده
<i> | Defines italic text | نمايش ايتاليک يا کج
<small> | Defines small text | نمايش در اندازه کوچک
<strong> | Defines strong text | نمايش قوي ؟!
<sub> | Defines subscripted text | نمايش پايين تر از خط افقي
<sup> | Defines superscripted text | نمايش بالاتر از خط افقي
<ins> | Defines inserted text | نمايش به صورت خط زير
<del> | Defines deleted text | نمايش به صورت خط خورده
<s> | Deprecated. Use <del> instead | از رده خارج
<strike> | Deprecated. Use <del> instead | از رده خارج
<u> | Deprecated. Use styles instead | از رده خارج

Start Tag | Purpose | کاربرد
<code> | Defines computer code text | نمايش کدهاي برنامه نويسي
<kbd> | Defines keyboard text | نمايش متن بصورت صفحه کليدي
<samp> | Defines sample computer code | نمايش کدهاي نمونه برنامه نويسي
<tt> | Defines teletype text | نمايش تله تايپ
<var> | Defines a variable | نمايش متغييرها
<pre> | Defines preformatted text | نمايش متون از قبل فرمت شده

مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


Character Entities ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۰۶ مراجعه امروز
۵۰۲۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Character Entities
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۲۶۹ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

در استاندارد اچتمل گروهي از نويسه ها (Character) داراي معني خاصي بوده ( مثلا نويسه < شروع يک تگ و نويسه > انتهاي يک تگ را نشان ميدهد. ) و براي نمايش آنها در صفحاتتان مستقيما قابل مصرف نميباشند. در اين فصل با فهرست اين نويسه ها آشنا شده و نحوه درج آنها را با کمک Character Entities فرا خواهيد گرفت.

Character Entities
در اچتمل بعضي از نويسه ها داراي معني خاصي بوده و براي نمايش آنها در صفحاتتان بايد از character entities ها استفاده کنيد. يک character entities از سه قسمت تشکيل ميشود:

1- نويسه ampersand (&)
2- نام entity يا نويسه # و سپس شماره عددي entity
3 - و نهايتا نويسه semicolon (;)
براي مثال براي نمايش نويسه > دو روش وجود دارد، بايد از &lt; يا از &#60; استفاده کنيد. در اين مثال lt نام entity و 60 شماره عددي آن ميباشد.

مزيت استفاده از نام entity در مقابل استفاده از شماره عددي آن سهولت يادآوري آن از روي نامش ميباشد و عيب آن اين است که تمامي مرورگرها نام گذاريهاي موجود براي Entity ها را قبول ندارند ولي در عوض همگي شماره هاي عددي entity ها را بخوبي ميشناسند. توجه داشته باشيد که entity ها به کوچک و بزرگي حروف حساس هستند و در واقع Case Sensitive ميباشند.

پر کاربردترين character entity در اچتمل، نويسه فاصله يا Space يا Blank ميباشد و نام رسمي آن non-breaking space ميباشد. همانطور که ميدانيد مرورگرها فاصله هاي اضافي را در نظر نگرفته (truncate spaces) و مثلا از 10 نويسه فاصله، 9 تاي آنرا ناديده ميگيرند و براي نمايش فاصله هاي اضافي بايد از &nbsp; استفاده کنيد.

فهرست پرکاربردترين Character Entities ها

Result (نمايش) | Description (شرح) | Entity Name (نام) | Entity Number (شماره عددي)
 | non-breaking space | &nbsp; | &#160;
< | less than | &lt; | &#60;
> | greater than | &gt; | &#62;
& | ampersand | &amp; | &#38;
" | quotation mark | &quot; | &#34;
' | apostrophe |  | &#39;

چند Character Entitie با کاربردهاي کمتر

Result | Description | Entity Name | Entity Number
¢ | cent | &cent; | &#162;
£ | pound | &pound; | &#163;
¥ | yen | &yen; | &#165;
§ | section | &sect; | &#167;
© | copyright | &copy; | &#169;
® | registered trademark | &reg; | &#174;
× | multiplication | &times; | &#215;
÷ | division | &divide; | &#247;

براي ديدن فهرست کل character entities ها سري به اين صفحه بزنيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


پيوندهای اچتمل ( HTML Links ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۰۹ مراجعه امروز
۵۰۲۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
پيوندهای اچتمل ( HTML Links )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۳۷۳ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

در اين درس با پيوندها ( Links ) ، تگ هاي مربوطه مخصوصا تگ Anchor يا A و نحوه به کار گيري آنها آشنا خواهيد شد. همچنين شناسه هاي بسيار مهم href ،target و name تشريح خواهند شد.

در محيط وب، صفحات اچتمل با کمک پيوندها به يکديگر متصل (Link) ميشوند. اصطلاح ابرمتن (Hyper Text) در مقابل متن خطي (Linear) قرار دارد. در يک متن معمولي خواندن به شکل خطي و از ابتدا به انتها ميباشد و در مقابل در يک متن مختلط (Hyper) با کمک پيوندها ميتوان از يک متن به هر صفحه ديگر در وب متصل شد.اين کار با کمک عنصري معلوم الحال! به نام A يا Anchor ميسر ميگردد.

مثالها

ايجاد پيوندها با کمک متن
اين مثال چگونگي ايجاد يک پيوند، لينک يا Link را در يک متن اچتمل نشان ميدهد.

ايجاد پيوندها با کمک تصاوير
اين مثال چگونگي ايجاد يک پيوند، لينک يا Link را با کمک يک تصوير (image) نشان ميدهد.

تگ Anchor و شناسه href

براي ايجاد پيوند به صفحات ديگر از تگ <a> استفاده ميشود. پيوندها ميتوانند به بخش ديگري از همان صفحه، صفحات ديگر وب، تصاوير، فايلهاي صوتي يا حتي فيلم ها و ... اشاره کنند.
فرم کلي يک پيوند به قرار زير است:

<a href="url">Some Text</a>

در مثال بالا تگ <a> براي ايجاد پيوندي به صفحه اي ديگر که آدرس اينترنتي آن url ميباشد بکار رفته است. براي تعيين مقصد و يا آدرس صفحه جديد از شناسه اي به نام href که همان hyerlink reference ميباشد، استفاده ميشود و مقدار اين شناسه در واقع همان آدرس اينترنتي صفحه مقصد است. بخش قابل رويت پيوند و در واقع متــنــي (و يا تصويري ) که توسط مرورگر نمايش داده خواهد شد و بازديدکننده روي آن کليک خواهد کرد ميان تگهاي <a> و </a> قرار داده ميشود و هر چند که در مثال بالا اين بخش متن "Some Text" است ولي ميتواند حتي يک تصوير باشد.

براي نمونه کد اچتمل زير پيوندي به سايت google.com ايجاد خواهد کرد:

<a href="http://www.google.com/">Visit Google Site</a>

و مرورگر پيوند بالا را به شکل زير نمايش داده و در اثر کليک روي پيوند توسط بازديدکننده، مرورگر به سايت Google خواهد رفت.
Visit Google Site

شناسه target در پيوندها:

با کمک شناسه target امکان تعيين مقصد پيوند جديد فراهم ميشود. در مثال بالا پس از کليک روي پيوند، مرورگر سايت google.com را باز کرده و جايگزين سايت فعلي خواهد شد. اگر ميخواهيد که مرورگر پيوند را در صفحه اي جديد باز کند بايد از شناسه target و مقدار "_blank" براي آن استفاده کنيد . مثال زير سبب باز شدن سايت google.com در پنجره جديدي خواهد شد:

<a href="http://www.google.com/" target="_blank">Visit Google Site</a>

خوتان آزمايش کنيد : Visit Google Site

شناسه Name :

با کمک شناسه name ميتوانيد پيوندها را نام گذاري کنيد.پيوندهاي نامگذاري شده امکان حرکت ميان قسمتهاي مختلف يک صفحه يا page را فراهم ميکنند. در اينصورت مثلا براي رفتن به آخر يک متن ديگر نيازي به Scrool down کردن تمامي صفحه نيست و کافي است که بازديدکننده روي پيوندي که به آخر صفحه اشاره ميکند کليک کند.
استفاده از پيوندهاي نامگذاري شده شامل دو مرحله است:
1- ايجاد يک پيوند نامگذاري شده (اين قسمت به عنوان لنگر کار خواهد کرد.) :
فرم کلي يک پيوند نام گذاري شده به قرار زير است:

<a name="label">Text to be displayed</a>

وظيفه شناسه name تعيين نام براي پيوند است و مقدارآن همان نام پيوند ميباشد. نام پيوند هم هر نام لاتيني ميتواند باشد. در فرم کلي بالا، نام پيوند label و متني که بعنوان پيوند نمايش داده ميشود عبارت "Text to be displayed" خواهد بود. مثال زير به ايجاد يک پيوند نامگذاري شده با نام top ميپردازد:

<a name="top">Here is top of my page!</a>

2- ايجاد يک پيوند به پيوند نامگذاري شده ديگر:

براي دادن لينک به پيوندي نام گذاري شده، کافي است که پيوندي معمولي ايجاد کرده و در قسمت href آن ابتدا url مقصد و سپس نويسه # و در نهايت نام پيوند نامگذاري شده را درج کنيد. مثال زير ايجاد پيوندي است که به لينک نامگذاري شده اي به نام top اشاره ميکند:

<a href="http://www.khaterat.com/www/index.cgi#top"> Goto Top! </a>

در اثر کليک روي پيوند بالا مرورگر مستقيما به ابتداي بخش top صفحه http://www.khaterat.com/www/index.cgi خواهد رفت.

لگر مقصد پيوند در همان صفحه قرار دارد نيازي به قيد url نيست و فقط نويسه # و سپس نام پيوند کافي است:

<a href="#top"> Goto Top! </a>
چند نکته کاربردي در مورد پيوندها:

* يکي از کاربردهاي رايج پيوندهاي نام گذاري شده در صفحات و متوني ميباشد که فهرست و يا ليستي از اقلام نمايش داده شده است، مانند بخش سرفصل مطالب، فهرست FAQ و يا ... در همين صفحه در دو مورد از پيوندهاي نامگذاري شده استفاده شده است، آيا ميتوانيد آنها را بيابيد؟!

* اگر مرورگر نتواند يک پيوند نامگذاري شده را بيابد ابتداي صفحه مقصد را نمايش خواهد داد.

مثالهاي بيشتر

باز کردن پيوند در پنجره اي جديد
اين مثال نحوه ايجاد پيوندهائي که در پنجره اي جديد باز ميشوند را نشان ميدهد. در اين حالت بازديدکنندگان سايتتان را از دست نخواهيد داد.

ارجاع به قسمت ديگري از صفحه
با کمک اين مثال نحوه تعريف پيوندهاي نام گذاري شده را فراگرفته و چگونگي ارجاع به قسمتهاي مختلف يک صفحه اچتمل را فرا خواهيد گرفت.

رهائي از شر فريم ها
اين مثال کاربرد شناسه target و مقدار top_ و نحوه رهائي از فريم ها را شرح خواهد داد.

نحوه ايجاد يک پيوند mailto
اين مثال نحوه ايجاد يک پيوند از نوع mailto براي باز کردن برنامه مديريت ايميل ها را نشان ميدهد. در اين حالت اگر بازديدکننده سايت برنامه هاي مربوط به ارسال و مديريت ايميل ها را نصب کرده باشد ميتواند به ارسال ايميل بپردازد.

مثالي کاملتر در مورد mailto
مثال از ارسال ايميل با امکان تعيين مقادير cc ، bcc، subject و body

Start Tag | Purpose | کاربرد عنصر Anchor
<a> | Defines an anchor | تعريف يک پيوند يا Anchor در يک صفحه اچتمل

Target Attributes | کاربرد حالتهاي مختلف شناسه target
target="_blank" | مرورگر پيوند را در يک پنجره جديد باز ميکند.
target="_self" | مرورگر پيوند را همان پنجره باز ميکند. (حالت پيش فرض يا default)
target="_parent" | مرورگر پيوند را فريم parent باز ميکند. (کاربرد در مبحث فريمها)
target="_top" | مرورگر پيوند را در فريم مادر و اصلي باز ميکند.(روشي خوب براي نجات از شر فريمها )

براي مطالعه بيشتر در مورد شناسه target سري به اين صفحه بزنيد.

مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


جداول ( Tables) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۱۲ مراجعه امروز
۵۰۲۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
جداول ( Tables)
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۳۶۰ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

در اين درس با المان جدول ( Table ) ، سلولها يا خانه ها، مرز و border در جداول و تگ هاي مربوطه مخصوصا تگهاي TABLE ، TD , TR آشنا خواهيد شد. توجه داشته باشيد که جداول يکي از مهمترين المانهاي آرايش و layout ميباشند.

مثالها:

جداول، آرايه ها
مثال ساده اي براي ايجاد جداول

مرز جداول
نقش شناسه border در تعيين مرز جداول

مثالهاي بيشتر

جدولها

براي تعريف جداول از تگ <table> استفاده ميشود. يک جدول از يک يا چند سطر که با کمک تگ <tr> تعريف ميشوند، تشکيل ميشود. هر رديف يا row از يک يا چند سلول، خانه يا cell تشکيل گرديده که با کمک تگ <td> ايجاد ميشوند. نام هاي td و tr به ترتيب خلاصه شده table row و table data ميباشند.
محتوي يک سلول ميتواند متن، تصوير، فهرستها، جداول ديگر، پاراگرافها و ... باشد.

مثال زير جدولي است با دو سطر و سه ستون :

کد اچتمل جدولي با دو سطر و سه ستون نمايش جدول روبرو توسط مرورگر
<table border="1" dir="rtl">
<tr>
<td>رديف 1، سلول 1</td>
<td>رديف 1، سلول 2</td>
<td>رديف 1، سلول 3</td>
</tr>
<tr>
<td>رديف 2، سلول 1</td>
<td>رديف 2، سلول 2</td>
<td>رديف 2، سلول 3</td>
</tr>
</table>

رديف 1، سلول 1 | رديف 1، سلول 2 | رديف 1، سلول 3
رديف 2، سلول 1 | رديف 2، سلول 2 | رديف 2، سلول 3

جدولها و شناسه border و dir :

  • در مثال بالا شناسه border مرز جدول را مشخص ميکند، مقدار 1 مرزي با ضخامت يک پيکسل را نمايش خواهد داد و مقدار صفر جدول را بدون مرز نمايش خواهد داد. توجه داشته باشيد که حالت پيش فرض يعني جدولي بدون شناسه border ، جداول بدون مرز را نمايش خواهد داد.
  • در مثال بالا شناسه dir يا direction و مقدار rtl براي آن، سبب تعيين نمايش جهت متون از راست به چپ خواهد شد و چو ن در داخل تک table تعريف شده است به تمامي سلولهاي جدول اعمال خواهذ شد.
  • ساده ترين جدول ممکن در اچتمل، جدولي است با يک سطر و يک ستون!

    سرستون در جداول (Headings)

    سرستونها در جداول با کمک تگ <th> تعريف ميشوند. مثال زير نحوه تعريف سرستونها را در جداول نمايش ميدهد:

    • کد اچتمل جدولي با سه سطر و سه ستون نمايش جدول روبرو توسط مرورگر
    <table border="1" dir="rtl">
<tr>
<th>سرستون ا</th>
<th>سرستون 2</th>
<th>سرستون 3</th>
</tr>
<tr>
<td>رديف 1، سلول 1</td>
<td>رديف 1، سلول 2</td>
<td>رديف 1، سلول 3</td>
</tr>
<tr>
<td>رديف 2، سلول 1</td>
<td>رديف 2، سلول 2</td>
<td>رديف 2، سلول 3</td>
</tr>
</table>

    سرستون ا | سرستون 2 | سرستون 3
رديف 1، سلول 1 | رديف 1، سلول 2 | رديف 1، سلول 3
رديف 2، سلول 1 | رديف 2، سلول 2 | رديف 2، سلول 3

    همانطوريکه مشاهده ميکنيد سر ستونها مانند سلولهاي معمولي جداول تعريف ميشوند و فقط به جاي td از th استفاده شده و لي در نمايش محتواي سر ستونها bold يا توپر نمايش داده خواهند شد.

    خانه هاي خالي در جداول (Empty Cells)

    اگر محتواي خانه اي از يک جدول خالي باشد چه چيزي بايد نمايش داده شود؟ بسته به مرورگري که استفاده ميکنيد نتيجه نمايش متفاوت است و مثلا در مثال زير خانه خالي جدول بدون مرز نمايش داده خواهد شد:

    کد اچتمل جدولي با دو سطر و دو ستون نمايش جدول روبرو توسط مرورگر
    <table border="1" dir="rtl">
<tr>
<td>رديف 1، سلول 1</td>
<td>رديف 1، سلول 2</td>
</tr>
<tr>
<td>رديف 2، سلول 1</td>
<td></td>
</tr>
</table>

    رديف 1، سلول 1 | رديف 1، سلول 2
رديف 2، سلول 1 |

    در اينگونه موارد براي رفع مشکل کافي است که از non-breaking space (&nbsp;) يا همان نويسه و کاراکتر قاصله و بلانک استفاده شود و در مورد مثال ذکر شده مرورگر جدول را به شکل زير نمايش خواهد داد:

    کد اچتمل جدولي با دو سطر و دو ستون نمايش جدول روبرو توسط مرورگر
    <table border="1" dir="rtl">
<tr>
<td>رديف 1، سلول 1</td>
<td>رديف 1، سلول 2</td>
</tr>
<tr>
<td>رديف 2، سلول 1</td>
<td>&nbsp;</td>
</tr>
</table>

    رديف 1، سلول 1 | رديف 1، سلول 2
رديف 2، سلول 1 |

    توجه داشته باشيد که اينبار مرزهاي خانه خالي جدول بدرستي ترسيم گرديده اند.

    چند نکته اساسي در مورد جداول:

  • در جداول، رديفها، خانه ها و سر ستونها از تعداد زيادي از شناسه ها ميتوانيد استفاده کنيد که شرح همگي آنها از حوصله اين دوره مقدماتي خارج است و توصيه ميشود که از مثالهاي زير و جدول واقع در انتهاي اين صفحه براي مطالعه هر چه بيشتر در مورد جزئيات شناسه ها استفاده شود.
  • شناسه dir قابل استفاده در بسياري از تگها ( مثلا table ، tr ، td ، th ) ميباشد. با کمک شناسه dir و مقدار rtl براي آن، جهت نمايش متون فارسي از "راست به چپ" تعيين ميگردد. توجه داشته باشيد که مقدار شناسه dir به صورت موروثي از table به tr و th و از tr و th به td خواهد رسيد.مثلا براي تعيين مقدار rtl براي تمامي خانه هاي يک جدول کافي است که فقط شناسه مزبور را در تگ table قيد کنيد و نيازي به قيد آن در تمامي خانه هاي جدول نيست. البته ميتوانيد که در مورد يک رديف خاص و يا يک خانه خاص شناسه dir را موردي تعيين کنيد.

    مثالهاي بيشتر

    مرز در جداول
    اين مثال کاربرد شناسه border را در نمايش جداول نشان ميدهد.

    تعيين جهت نمايش متن در خانه هاي يک جدول
    اين مثال کاربرد شناسه dir است در تعيين جهت نمايش متن در خانه هاي يک جدول.

    عنوان جداول و تگ caption
    مثالي در مورد تگ caption در تعريف جداول

    توسعه سطري يا ستوني در جداول
    مثالي در مورد شناسه هاي colspan و rowspan در جداول

    جدولي با محتويات مختلف
    محتوي يک خانه جدول تقريبا ميتواند هر عنصر اچتملي باشد.

    فاصله گذاري بين خانه هاي جداول
    اين مثال نحوه ايجاد فاصله بين خانه هاي جدول را نشان ميدهد.(cellspacing)

    لايه گذاري خانه هاي جدول
    اين مثال نحوه ايجاد فاصله خالي بين خانه هاي جدول و مرز آنها را نشان ميدهد.(cellpadding)

    تعيين رنگ زمينه يا تصوير زمينه کل يک جدول
    تعيين رنگ زمينه يا تصوير زمينه سراسري جداول با کمک شناسه هاي bgcolor و background

    تعيين رنگ زمينه يا تصوير زمينه يک يا چند خانه از جدول
    تعيين رنگ زمينه يا تصوير زمينه در خانه هاي جداول با کمک شناسه هاي bgcolor و background

    تراز بندي محتوا در خانه هاي جداول
    اين مثال نحوه ترازبندي محتواي خانه هاي جداول با کمک شناسه "align" را نشان ميدهد.

    شناسه frame در جداول
    مثالي در مورد کاربرد شناسه "frame" در المان table جهت تعيين شکل مرز جداول.

    تراز بندي محتوا در خانه هاي جداول
    اين مثال نحوه ترازبندي محتواي خانه هاي جداول با کمک شناسه "align" و "valign" را نشان ميدهد.

    • تگهاي جداول

    Start Tag | Purpose | کاربرد
<table> | Defines a table | تعريف جدول
<th> | Defines a table header | تعريف سرستون در جداول
<tr> | Defines a table row | تعريف رديف ها در جداول
<td> | Defines a table cell | تعريف سلول يا خانه هاي يک جدول
<caption> | Defines a table caption | تعريف عنوان جدول

    مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

    کيفيت مقاله :
    عالی خوب متوسط ضعيف


فريمها ( Frames ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۱۵ مراجعه امروز
۵۰۳۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فريمها ( Frames )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۱۸۵ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

با کمک فريمها قادر به نمايش همزمان بيش از يک صفحه وب در پنجره مرورگر خواهيد شد. در اين درس با مفاهيم فريم ( Frame ) و تگ هاي مربوطه مخصوصا تگهاي Frame و Frameset آشنا خواهيد شد.

مثالها:

مجموعه فريمهاي عمودي
مثالي در مورد ايجاد مجموعه فريمهاي عمودي توسط تگ هاي frameset و frame

مجموعه فريمهاي افقي
مثالي در مورد ايجاد مجموعه فريمهاي افقي توسط تگ هاي frameset و frame

مثالهاي بيشتر

فريمها (Frames)

با کمک فريمها قادر به نمايش همزمان بيش از يک صفحه وب در پنجره مرورگر خواهيد شد. هر صفحه يا دريچه، فريم (frame) ناميده شده و فريمها کاملا مستقل از هم ميباشند. محتواي هر فريم هم ميتواند هر صفحه يا وب سايتي باشد. هر چند که فريمها طراحي سايتهاي کوچک و متوسط را بسيار آسان ميکنند ولي استفاده از آنها در کارهاي حرفه اي توصيه نميشود.(به جز در موارد خاص)

معايب استفاده از فريمها:

  • موتورهاي جستجو با صفحات طراحي شده با فريمها مشکل دارند.
  • چاپ و print صفحاتي که از فريمها استفاده ميکنند مشکل است.
  • صفحاتي که از فريمها استفاده ميکنند معمولا مبتدي بودن طراح سايت را نشان ميدهد!!
تگ فريم ست (Frameset)
  • تگ <frameset> به تعريف فريمها و تقسيم بندي پنجره مرورگر ميپردازد.
  • هر تگ <frameset> مجموعه اي از رديفها يا ستونها را تعريف ميکند.
  • داخل هر فريم ميتواند frameset ديگري قرار دهيد.
  • با کمک شناسه هاي rows و cols ابعاد و نسبت هر فريم تعيين ميگردد.
  • تگ <frameset> درون تگهاي <html> و <html/> قرار ميگيرد.(نيازي به قيد تگ body هنگام معرفي يک frameset نيست.)
تگ فريم (Frame)
  • کاربرد اصلي تگ <frame> تعيين source يا نام صفحه اي است که بايد در فريم ها نمايش داده شود.

مثال زير مجموعه اي از فريمها را که شامل دو فريم عمودي ميباشند معرفي ميکند. از سمت چپ فريم اول 75 درصد و فريم دوم 25 درصد از عرض پنجره مرورگر را به خود نمايش خواهند داد. در ادامه تعريف محتويات هر فريم، درون فريم اول فايل "frame_left.html" و درون فريم دوم فايل "frame_right.html" نمايش داده خواهد شد.

<html>
<frameset cols="75%,25%">
   <frame src="frame_left.html">
   <frame src="frame_right.html">
</frameset>
</html>

براي نمايش مثال بالا به سه فايل نياز داريد، frame_left.html ،frame_right.html و فايل کد اچتمل بالا.

شناسه هاي cols و rows در تگ frameset

شناسه | مقدار شناسه | کارکرد
cols | عرض پنجره بر اساس پيکسل، درصد يا علامت * | تعيين تعداد و اندازه ستونها در فريم ست
rows | عرض پنجره بر اساس پيکسل، درصد يا علامت * | تعيين تعداد و اندازه رديفها در فريم ست

مثالهاي زير را در نظر بگيريد:

مثال 2 مثال 1
<html>
<frameset cols="25%,50%,25%">
   <frame src="frame_3.html">
   <frame src="frame_2.html">
   <frame src="frame_1.html">
</frameset>
</html>

<html>
<frameset cols="*,200">
   <frame src="frame_2.html">
   <frame src="frame_1.html">
</frameset>
</html>
نمايش توسط مرورگر نمايش توسط مرورگر

در مثال يک عرض فريم اول از سمت راست 200 پيکسل تعيين شده و بقيه عرض پنجره که با علامت * مشخص ميشود به فريم دوم اختصاص خواهد يافت.
در مثال دوم عرض پنجره با مقادير درصدي به فريمها اختصاص يافته است.
در مورد شناسه rows دقيقا قراردادهاي بالا برقرارند.

نکات کاربردي:

* اگر فريمهاي طراحي شده مرزهاي قابل مشاهده دارند توسط کاربر قابل تغيير اندازه (resize) خواهند بود و براي جلوگيري از تغيير اندازه فريمها توسط کاربر بايد از شناسه اي به نام noresize در داخل تگ <frame> استفاده شود. در اين مثال noresize نميتوانيد که فريمها را تغيير اندازه بدهيد.

* اگر ميخواهيد که فريمها scroll نشوند (بالا و پايين بردن صفحه توسط ماوس) بايد در تگ frame مقدار شناسه scrolling را برابر "no" قرار دهيد. (مقادير ممکن "yes" ، "no" و "auto" ميباشند.) در اين مثال scrolling صفحات قابل scroll نيستند.

* اگر ميخواهيد که مرز بين فريمها نمايش داده نشوند بايد در تگ frame مقدار شناسه frameborder را برابر "0" قرار دهيد. (مثال frameborder )

* درصد بسيار کمي از مرورگرها از تگهاي مربوط به frame و frameset پشتيباني نميکنند. براي اين موارد بايد از تگ <noframes> جهت نمايش صفحه جايگزين استفاده شود.

مثالهاي بيشتر

مجموعه فريمهاي مرکب
مثالي در مورد ايجاد مجموعه اي مرکب از فريمهاي عمودي و افقي

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

فريمهاي شناور و يا درجا (Inline frame)
مثالي در مورد فريمهاي شناور و درجا (iframe)، فريمي درون يک صفحه اچتمل

مثالي کاربردي در مورد فريمهاي درجا (Inline frame)
مثالي کاربردي در مورد فريمهاي شناور و درجا (iframe) با کمک 7 صفحه اچتمل مختلف

شوخي با فريم هاي شناور
مثالي در مورد نمايش درايو لوکال (مثلا c:\ بازديدکنندگان سايت به آنها

فريمها و پيوندهاي نامگذاري شده
مثالي کامل در مورد فريمها و پيوندهاي نامگذاري شده و نحوه استفاده از آنها در طراحي سايتي ساده متشکل از چهار فايل اچتمل

فريمها و پيوندهاي نامگذاري شده کامل
همان مثال بالا در صفحه کامل مرورگر با شناسه هاي کامل در تگ frame

تگ هاي فريم

Start Tag | Purpose | کاربرد
<frameset> | Defines a set of frames | تعريف مجموعه اي از فريم ها
<frame> | Defines a sub window (a frame) | تعريف يک فريم
<noframes> | Defines a noframe section for browsers that do not handle frames | تعريف جايگزين براي مرورگرهائي که از فريم ها پشتيباني نميکنند.
<iframe> | Defines an inline sub window (frame) | تعريف فريم هاي درجا (inline)

مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


فهرستها ( Lists ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۱۸ مراجعه امروز
۵۰۳۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فهرستها ( Lists )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۱۵۴ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

اين درس شما را با نحوه نمايش انواع فهرستها شامل فهرستهاي مرتب(ordered) ، نامرتب(unordered) و فهرستهاي تعريفي(definition lists) و تگ هاي مربوطه يعني li ، ol ، ul ، dl ، dt و dd آشنا خواهد کرد. مثالها:

فهرستهاي نامرتب
مثالي بسيار ساده در مورد فهرستهاي نامرتب

فهرستهاي مرتب
مثالي در مورد فهرستهاي مرتب و نحوه نمايش متون فارسي

مثالهاي بيشتر

فهرستهاي نامرتب(unordered list)

فهرستهائي هستند از يک يا چند قلم اطلاعات که معمولا با دايرهاي کوچک و سياه رنگ در شروع نمايش داده ميشوند. يک فهرست از نوع نامرتب با تگ <ul> شروع شده و هر رقم اطلاعات با تگ <li> مشخص ميگردد.

HTML code نمايش توسط مرورگر
<ul>
<li>Red</li>
<li>Blue</li>
<li>Green</li>
</ul>
  • Red
  • Blue
  • Green

<ul dir="rtl" >
<li>قهوه</li>
<li>شير</li>
<li>چاي</li>
</ul>
  • قهوه
  • شير
  • چاي

داخل تگهاي <li> ميتوانيد از پاراگرافها، تگهاي br ، تصاوير و حتي فهرستهاي ديگر استفاده کنيد. به شناسه dir در مثال بالا توجه کنيد، امکان تعيين سمت و جهت نمايش متون در تمامي تگهاي مربوط به فهرستها ممکن ميباشد.

فهرستهاي مرتب(ordered list)

اين نوع فهرست بسيار شبيه فهرستهاي نامرتب بوده و فقط مرورگر به هنگام نمايش اقلام اطلاعاتي از اعداد به جاي دايره هاي کوچک سياه رنگ استفاده ميکند. يک فهرست از نوع مرتب با تگ <ol> شروع شده و همانند فهرستهاي نامرتب هر رقم اطلاعات با تگ <li> مشخص ميگردد.

HTML code نمايش توسط مرورگر
<ol>
<li>Red</li>
<li>Blue</li>
<li>Green</li>
</ol>
  1. Red
  2. Blue
  3. Green

<ol dir="rtl" >
<li>قهوه</li>
<li>شير</li>
<li>چاي</li>
</ol>
  1. قهوه
  2. شير
  3. چاي

داخل تگهاي <li> ميتوانيد از پاراگرافها، تگهاي br ، تصاوير و حتي فهرستهاي ديگر استفاده کنيد. به شناسه dir در مثال بالا توجه کنيد، امکان تعيين سمت و جهت نمايش متون در تمامي تگهاي مربوط به فهرستها ممکن ميباشد.

فهرستهاي تعريفي(definition list)

فهرست تعريفي فهرستي است از اصطلاح ها و تشريح و توصيف آنها.

فهرستهاي تعريفي با <dl> شروع شده و هر ذوج اصطلاح و تعريف مربوط به آن با تگهاي <dt> و <dd> تعريف ميشوند.

HTML code نمايش توسط مرورگر
<dl>
<dt>HTTP</dt>
<dd>Hypertext Transfer Protocol</dd>
<dt>FTP</dt>
<dd>File Transfer Protocol</dd>
<dt>IP</dt>
<dd>Internet Protocol</dd>
</dl>
HTTP
Hypertext Transfer Protocol
FTP
File Transfer Protocol
IP
Internet Protocol

<dl dir="rtl"  >
<dt >مقدمه</dt>
<dd>خلاصه اي از مقدمه</dd>
<dt>فصل 2</dt>
<dd>خلاصه اي از فصل 1</dd>
<dt>فصل 2</dt>
<dd>خلاصه اي از فصل 2</dd>
</dl>
مقدمه
خلاصه اي از مقدمه
فصل 1
خلاصه اي از فصل 1
فصل 2
خلاصه اي از فصل 2

داخل تگهاي تشريح يعني <dd> ميتوانيد از پاراگرافها، تگهاي br ، تصاوير و حتي فهرستهاي ديگر استفاده کنيد. به شناسه dir در مثال بالا توجه کنيد، امکان تعيين سمت و جهت نمايش متون در تمامي تگهاي مربوط به فهرستها ممکن ميباشد.

مثالهاي بيشتر

انواع فهرستهاي مرتب
مثالي در مورد فهرستهاي مرتب به همراه استفاده از شناسه type جهت تعيين نوع نمايش فهرست

انواع فهرستهاي نامرتب
مثالي در مورد فهرستهاي نامرتب به همراه استفاده از شناسه type جهت تعيين نوع نمايش فهرست

فهرستهاي تودرتو
مثالي در مورد فهرستهاي ترکيبي. اعضاي فهرست ميتوانند از فهرستهاي ديگر تشکيل شوند.

فهرستهاي تعريفي
مثالي در مورد فهرستهاي تعريفي به همراه استفاده از شناسه dir

تگهاي فهرست

Start Tag | Purpose | کاربرد
<ol> | Defines an ordered list | تعريف فهرستهاي مرتب
<ul> | Defines an unordered list | تعريف فهرستهاي نامرتب
<li> | Defines a list item | تعريف يک آيتم و قلم از يک فهرست
<dl> | Defines a definition list | تعريف فهرستهاي تعريفي
<dt> | Defines a definition term | تعريف اصطلاح در فهرستهاي تعريفي
<dd> | Defines a definition description | تعريف معني و شرح اصطلاح در فهرستهاي تعريفي

مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


فرمها ( Forms ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۲۱ مراجعه امروز
۵۰۳۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فرمها ( Forms )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۳۸۳ بار مطالعه شده است
۱۱ نفر تا به حال به اين مقاله رای داده اند.

از طريق استفاده از عنصر <form> و چند تگ مرتبط قادر به دريافت اطلاعات از بازديدکنندگان صفحاتتان و يا تبادل اطلاعات بين صفحات مختلف خواهيد شد. با کمک اين گروه از تگ ها قادر به نمايش باکسهاي ورود اطلاعات متن (text fields) ، چک باکسها (check-boxes) ، راديو باتونها (radio-buttons) و ... شده و همچنين امکان گذاشتن دکمه هاي ارسال (submit button) و يا حذف (reset) را خواهيد داشت. اين فصل با شرح تگ هاي form و input و ... به چگونگي ايجاد ارتباط با بازديدکنندگان و گرفتن اطلاعات از آنها بصورت لاتين و يا فارسي خواهد پرداخت.

توجه داشته باشيد که براي پردازش اطلاعات دريافتي از کاربر بايد با يکي از زبانهاي cgi از قبيل ASP، perl، PHP، CFM ، JSP يا Java آشنائي داشته باشيد. مثالهاي cgi مدرسه وب از ربان اسکريپت Perl استفاده ميکنند.

مثالها:

وروديهاي متن يا Text fields
مثالي ساده در مورد ايجاد text field ها . با کمک text field ها کاربران قادر به وارد کردن و تايپ متن خواهند شد.

وروديهاي رمز عبور يا Password fields

مثالي ساده در مورد ايجاد password field ها . با کمک password field ها کاربران قادر به ورود رمز عبور يا پسورد خواهند شد.

مثالهاي بيشتر

فرمها (Forms)

تمامي عناصر و تگهائي که تاکنون ديده ايد فقط به نمايش اطلاعات پرداخته اند و هيچکدام به گرفتن و اخذ اطلاعات از کاربر نپرداخته اند. فرمها که با تگ <form> معرفي ميشوند، طراح سايت را قادر به جمع آوري و اخذ اطلاعات از بازديدکننده سايت خواهند کرد. عنصر فرم و گروهي از عناصر و تگهاي درون آن به دريافت و ارسال اطلاعات به سمت وب سرور کمک خواهند کرد و لازم به ذکر است که تمامي تگهاي مربوط به فرمها بايد درون تگهاي <form> و <form/> قرار ميگيرند.

درون تگ فرم گروه زيادي از عناصر و تگهاي مختلف قابل استفاده هستند از قبيل عناصر ورود متن يک سطري(text fields)، عناصر ورود متنهاي چند سطري (Textarea)، منوهاي drop-down و radio buttons و ...

تگ Input

به عنوان پر مصرف ترين تگ مربوط به ورود اطلاعات بايد از تگ <input> نام برد. در اين تگ شناسه اي به نام type به تعيين نوع اطلاعات ورودي اختصاص دارد. مقادير ممکن براي اين شناسه به قرار زيرند:
text , checkbox , radio , password , hidden , submit , reset , button , file , image
در ادامه به شرح بعضي از type هاي کاربردي خواهيم پرداخت:

وروديهاي متن (Text Fields)

اگر ميخواهيد که بازديدکننده اطلاعاتي از قبيل متن، اعداد و ... را وارد کند از شناسه اي با مقدار "text" استفاده ميشود.

کد اچتمل نمايش توسط مرورگر
<form>
First name:
<input type="text" name="firstname">
<br>
Last name:
<input type="text" name="lastname">
</form>
First name:
Last name:
<form dir="rtl" >
نـــــــــــــــام:
<input type="text" name="firstname">
<br>
نام خانوادگي:
<input type="text" name="lastname">
</form>
نـــــــــــــــام:
نام خانوادگي:

توجه داشته باشيد که تگ <form> چيزي را به نمايش نخواهد گذاشت بلکه تگهاي درون آن توسط مرورگر نمايش داده خواهند شد. در مثال فارسي بالا به شناسه dir و مقدار rtl آن توجه داشته باشيد.لازم به يادآوري است که اغلب مرورگرها در حالت پيش فرض براي وروديهاي متن اندازه 20 کاراکتر را در نظر ميگيرند و اگر ميخواهيد که اندازه پيش فرض وروديهاي متن را تغيير دهيد بايد از شناسه اي به نام size استفاده کنيد.

وروديهاي Radio Buttons

اگر ميخواهيد که بازديدکننده گزينه اي را از بين چند گزينه محدود انتخاب کند، از مقدار "radio" براي شناسه type استفاده کنيد:

کد اچتمل نمايش توسط مرورگر
<form>
<input type="radio" name="sex" value="male"> Male
<br>
<input type="radio" name="sex" value="female"> Female
</form>
Male
Female
<form dir="rtl">
<input type="radio" name="sex" value="male"> مرد
<br>
<input type="radio" name="sex" value="female"> زن
</form>
مرد
زن

همانطور که مشاهده ميشود فقط امکان يکي از گزينه ها براي کاربر ميسر است.

وروديهاي Checkboxes

اگر ميخواهيد که بازديدکننده يک يا چند گزينه را از بين چند گزينه محدود انتخاب کند، از مقدار "checkbox" براي شناسه type استفاده کنيد:

کد اچتمل نمايش توسط مرورگر
<form>
<input type="checkbox" name="bike">
I have a bike
<br>
<input type="checkbox" name="car">
I have a car
</form>
I have a bike
I have a car
<form dir="rtl">
<input type="checkbox" name="bike">
دوچرخه دارم
<br>
<input type="checkbox" name="car">
ماشين دارم
</form>
دوچرخه دارم
ماشين دارم
شناسه Action و دکمه Submit در فرمها ( Form's Action Attribute & Submit Button)

در فرمها براي ارسال اطلاعات کسب شده از دکمه اي به نام ارسال يا Submit Button استفاده ميشود و در اثر کليک کاربر بروي اين دکمه "Submit" ، اطلاعات درون فرم به فايلي ديگر ارسال خواهند شد. براي تعيين مقصد ارسال اطلاعات بايد درون تگ form از شناسه اي به نام action استفاده کنيد. مقدار شناسه action آدرس يا url فايلي است که به دريافت و سپس پردازش اطلاعات دريافتي خواهد پرداخت. معمولا فايلهاي بخش action برنامه ها و اسکريپت هائي نوشته شده با ربانهاي cgi مانند ASP، Perl ، PHP و ... بوده و وظيفه آنها دريافت اطلاعات فرمها و سپس پردازش آنها ميباشد.

تعيين مقدار "submit" براي شناسه type سبب نمايش دکمه Submit يا ارسال خواهد گرديد.

کد اچتمل نمايش توسط مرورگر
<form name="input" action="form_action.cgi">
Username:
<input type="text" name="user">
<input type="submit" value="Submit">
</form>
Username:
<form name="input" action="form_action.cgi" dir="rtl">
نام کاربر
<input type="text" name="user">
<input type="submit" value="Submit">
</form>
نام کاربر

در مثال بالا در باکس ورودي متن، کلمه اي را وارد کرده و دکمه ارسال را کليک کنيد. مرورگر به محض کليک دکمه ارسال، اطلاعات درون فرم را که در اين مثال متني ساده است به سمت فايلي که در شناسه action تعيين شده است ارسال کرده و در اين مثال برنامه اي به زبان Perl با نام form_action.cgi در سمت سرور به ذخيره و سپس نمايش متني خبري خواهد پرداخت.

ورود متن فارسي در عناصري مانند Text field يا Text area:

همانطور که در مثالهاي بالا مشاهده کرديد در مورد المانهاي Text field و Textarea با کمک شناسه dir ميتوان سمت و جهت ورود اطلاعات را "از راست به چپ" تعيين کنيد. ولي اگر کاربري ويندوز فارسي نداشته باشد، از کامپيوترهاي مکينتاش استفاده کند و يا سيستمش را فارسي نکرده باشد قادر به ورود اطلاعات به زبان فارسي نخواهد بود و نويسه هاي تايپ شده لاتين خواهند بود!، در اينگونه موارد چه بايد کرد؟
معمولا برنامه نويسان وب براي فراهم ساختن امکان ورود متن فارسي از يکي از دو روش زير استفاده ميکنند:
  • استفاده از اپلتهاي جاوا با اين مزيت که سورس و کد اصلي فارسي سازي قابل استفاده توسط ديگران نيست!!
  • استفاده از زبان جاوا اسکريپت و با اين عيب که سورس و کد اصلي JavaScript قابل مشاهده و استفاده توسط ديگران است!

    مدرسه وب بر اساس دستورالعملهاي "پروژه فارسي وب" از روش دوم استفاده کرده و از کد جاوا اسکريپت فراهم شده توسط اين پروژه استفاده ميکند. مثال زير نحوه استفاده از کد فارسي ساز جاوا اسکريپتي مذکور را شرح خواهد داد:

    فارسي ساز جاوا اسکريپتي
    مثالي در مورد نحوه استفاده از فارسي ساز جاوا اسکريپتي در يک فرم متشکل از Textfield ها

    مثالهاي بيشتر

    حالتهاي مختلف ورودي Input
    در تگ input و با کمک شناسه type و مقادير مختلف براي آن ميتوان انواع مختلف اطلاعات را از وبگرد گرفت.

    Checkboxes
    مثالي در مورد نحوه تعريف فرمي متشکل از Checkbox ها

    Radiobuttons
    مثالي در مورد نحوه تعريف فرمي متشکل از Radiobutton ها

    فهرست کرکره اي ساده
    مثالي در مورد نحوه تعريف فرمي متشکل از drop down box ها

    فهرست کرکره اي ديگر
    مثالي در مورد نحوه تعريف فرمي متشکل از drop down box ها با تعيين پيش گزينه

    Textarea
    مثالي در مورد نحوه تعريف فرمي متشکل از Textarea ، ناحيه اي براي ورود بيش از يک سطر متن (نکته: استفاده از اديتور ما براي اين مثال امکان پذير نيست! اگر گفتيد چرا!؟)

    تعريف فرمي با کمک دکمه يا button
    مثالي در مورد نحوه تعريف فرمي با کمک دکمه يا button

    ترسيم مرز در اطراف فرم
    مثالي در مورد نحوه تعريف فرمي دلخواه و ترسيم مرزي بدور آن به همراه تعيين عنواني براي فرم با کمک عنصر Fieldset

    ارسال ايميل با کمک فرمها
    مثالي در مورد نحوه ارسال ايميل با کمک فرمها

    ساختن فهرستي از سايتهاي مورد علاقه
    مثالي در مورد نحوه استفاده از تگ فرم و منوهاي کرکره اي و کمي جاوا اسکريپت براي ساخت فهرستي از سايتها

    • تگهاي فرم

    Start Tag | Purpose | کاربرد
<form> | Defines a form for user input | تعريف فرم ورود اطلاعات
<input> | Defines an input field | تعريف ورودي از نوع Input
<textarea> | Defines a text-area (a multi-line text input control) | تعريف ورودي متن چند سطري يا text-area
<label> | Defines a label to a control | تعريف برچسب يا label
<fieldset> | Defines a fieldset | تعريف fieldset
<legend> | Defines a caption for a fieldset | تعريف عنوان براي fieldset ها
<select> | Defines a selectable list (a drop-down box) | تعريف فهرستهاي انتخابي يا drop-down box
<optgroup> | Defines an option group | تعريف option group ها
<option> | Defines an option in the drop-down box | تعريف گزينه اي از drop-down box ها
<button> | Defines a push button | تعريف دکمه فشاري، متفاوت با button تگ input

    مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

    کيفيت مقاله :
    عالی خوب متوسط ضعيف


تصاوير ( Images ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۲۴ مراجعه امروز
۵۰۴۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تصاوير ( Images )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۲۸۷ بار مطالعه شده است
۱۴ نفر تا به حال به اين مقاله رای داده اند.

در اين درس با تگ img ، شناسه src و alt ، تگهاي Map و Area و چگونگي نمايش تصاوير و همچنين تنظيم محل آنها در سندهاي اچتمل آشنا خواهيد شد.

مثالها:

درج تصوير
نحوه درج تصاوير با کمک تگ img

درج تصويري واقع در فضاي آدرسي ديگر
درج تصويري واقع در دايرکتوريي غير از آدر س صفحه اچتمل و يا تصويري واقع در فضاي آدرسي ديگر سايتها

مثالهاي بيشتر

تگ img و شناسه src يا source

در زبان اچتمل تصاوير را با کمک تگ <img> تعريف ميکنند. تگ <img> از نوع تگهاي خالي است، بدين معنا که فقط داراي يک يا چند شناسه و attribute بوده و داراي تگ انتهائي يا <img/> نيست.

مهمترين شناسه براي درج و تعريف يک تصوير src يا source نام دارد و مقدار اين شناسه آدرس يا URL تصوير ميباشد. تصاويري که مرورگر در يک صفحه وب نمايش ميدهد ميتوانند در همان دايرکتوري صفحه اچتمل، در ديگر دايرکتوريهاي همان سايت و يا در فضاي بيکران وب قرار داشته باشند.

شکل ساده درج يک تصوير:

<img src="url">

مقدار url آدرس اينترنتي تصوير ميباشد و مثلا اگر تصويري که قرار است که در صفحه درج شود در همان دايرکتوري قرار دارد و نامش me.jpg ، کافي است که به جاي url فقط نام تصوير يعني me.jpg را بنويسيد و اگر تصوير در سايتي ديکر قرار دارد url کامل آنرا بنويسيد. مثلا تصوير لوگو سايت google.com داراي url ي برابر http://www.google.com/images/logo.gif است.در اين url نام تصوير logo.gif بوده، در دايرکتوري images قرار داشته و روي وب سايت google.com قرار دارد.

شناسه هاي width و height در تگ img

کاربرد شناسه هاي width و height تعيين عرض و ارتفاع نمايش تصوير است. اگر از اين شناسه ها استفاده نکنيد، مرورگر ابتدا تصوير را لود کرده و سپس طول و عرض آنرا يافته و در نهايت نمايش ميدهد. با نوشتن مقاديري غير از مقادير واقعي طول و عرض تصوير ميتوانيد به تغيير شکل و ابعاد آن بپردازيد و آنرا مثلا کوچکتر، بزرگتر و يا کشيده تر نمايش دهيد. مثال زير نحوه درج تصويري را با قيد ابعاد آن شرح ميدهد:

<img src="http://www.google.com/images/logo.gif" width="276" height="110" >

توصيه ميشود که حتما ابعاد تصوير را با کمک شناسه هاي width و height قيد کنيد، اينکار سبب کمک به مرورگر در تسريع شروع نمايش صفحه خواهد شد.(در واقع با قيد ابعاد تصوير، مرورگر قبل از لود تصوير ميداند که چه مقدار از صفحه نمايش بايد به تصوير بايد اختصاص داده شود و قبل از لوذ شدن تمامي تصاوير مرورگر شروع به نمايش قالب و چارچوب کلي صفحه خواهد کرد.)

شناسه Alt يا "alternate text" يا متن جايگزين

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

<img src="images/ganjafzar.gif" alt="Iran Developers!" >

Iran Developers!

وبلاگها و اضافه کردن تصاوير:
اگر وبلاگي داشته و ميخواهيد که تصويري به آن اضافه کنيد دو حالت مختلف ممکن است که پيش آيد:
  • الف) تصوير روي سايتي ديگر قرار داشته و شما هم ميخواهيد از آن تصوير که در سايتي ديگر قرار دارد استفاده کنيد. در اين حالت از آدرس مستقيم تصوير در شناسه src استفاده کنيد، مانند :
    <img src="http://www.google.ca/images/hp0.gif" width=258 height=78 >
    در اين مثال تصوير روي سايت google.ca قرار داشته و لزومي به ذخيره آن توسط شما نيست.

  • ب) تصوير روي هارد کامييوتر شما است و هنوز بروي وب منتقل نشده است. در اين حالت چون اغلب سيستم هاي وبلاگ امکان ذخيره تصاوير را به شما نمي دهند بايد ابتدا تصويرتان را با کمک FTP يا روشهاي ديگر به روي سايتي ديگر منتقل کنيد. شرکتهاي مختلفي فضاي مجاني براي ساخت صفحات وب و ذخيره اطلاعات و تصاوير در اختيار شما قرار ميدهند و در يکي از سؤالهاي اين FAQ فهرست اين شرکتها را ميتوانيد ببينيد. بنابراين ابتدا فضائي در وب تهيه کرده، سپس تصويرتان را Upload کرده (با کمک FTP يا روشهاس ديگر ) و سپس در شناسه src از تگ img آدرس جديد تصوير را قيد کنيد.

    چند نکته مهم:

    • اگر در يک صفحه اچتمل از 10 تصوير استفاده شده باشد، مرورگر بايد 11 فايل را لود کند.( خود صفحه به علاوه 10 تصوير)
    • استفاده از تصاوير، سرعت لود شدن صفحات را پايين مي آورد.با احتياط از تصاوير استفاده کنيد و به اندازه و حجم تصوير توجه داشته باشيد.
    • لود تصويري با حجم 50 کيلوبايت براي کسي که از مودمي با سرعت 28kbps استفاده ميکند حداقل 15 ثانيه طول خواهد کشيد.
    • براي ديدن مشخصات تصاوير در وب کافي است که روي تصوير Right click کرذه و سپس در بخش properities آدرس،ابعاد و ظرفيت تصوير را ببينيد.
    • براي ذخيره تصاوير در وب کافي است که روي تصوير Right click کرذه و سپس در بخش "Save picture as" آنرا ذخيره کنيد.
    مثالهاي بيشتر

    تصاوير زمينه
    مثالي در مورد نحوه تعيين تصاوير زمينه با کمک شناسه background در تگ body

    ترازبندي تصاوير
    اين مثال نحوه ترازبندي تصاوير در کنار متون را نشان ميدهد.

    تصاوير شناور در متن
    آزاد گذاشتن تصوير در سمت چپ يا راست

    نمايش تصاوير در ابعاد مختلف
    مثالي در مورد استفاده از شناسه هاي width و height و نمايش تصاوير در ابعاد مختلف

    نمايش متن جايگزين براي تصاوير
    مثالي در مورد استفاده از شناسه alt

    استفاده از تصاوير هنگام ايجاد پيوند ها
    مثالي در مورد نحوه استفاده از تصاوير هنگام ايجاد پيوند ها

    ايجاد image map ها
    مثالي در مورد ايجاد image map . در اين مثال هر بخش از نواحي تعريف شده قابل کليک بوده و به پيوندي اختصاصي اشاره ميکند.

    • تگ هاي تصاوير

    Start Tag | Purpose | کاربرد
<img> | Defines an image | درج تصوير
<map> | Defines an image map | تعريف Image map يا ؟؟؟
<area> | Defines an area inside an image map | تعريف ناحيه اي در داخل Image map

    مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

    کيفيت مقاله :
    عالی خوب متوسط ضعيف


پس زمينه ( Background ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۲۷ مراجعه امروز
۵۰۴۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
پس زمينه ( Background )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۰۷۵ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

در اين درس با چگونگي تعيين تصاوير و رنگ پس زمينه (Background) آشنا خواهيد شد. رنگ و يا تصوير پس زمينه فاکتور بسيار مهمي در طراحي صفحات اچتمل بوده و استفاده از رنگ و يا تصوير مناسب نقشي تعيين کننده در خوانا بودن صفحات دارد.

مثالها:

رنگ متن و زمينه متناسب
انتخاب رنگ مناسب متون و پس زمينه به خوانا بودن متن کمک شايان توجهي خواهد کرد.

رنگ متن و زمينه نامتناسب
مثالي از انتخاب نامناسب رنگ متن و پس زمينه

مثالهاي بيشتر

رنگ و تصوير زمينه در صفحات اچتمل:

تگ <body> داراي دو شناسه مهم براي تعيين رنگ و تصوير پس زمينه ميباشد. پس زمينه صفحات اچتمل رنگ و يا يک تصوير ميتواند باشد.

شناسه bgcolor براي رنگ پس زمينه (background color)

شناسه bgcolor رنگ پس زمينه را تعيين ميکند. مقدار رنگ پس زمينه ميتواند نام رنگ (مثل red يا blue ) ، مقدار آن بر اساس استاندارد RGB و يا حتي مقدار هگزادسيمال (Hexadecimal) باشد.

<body bgcolor="#000000">
<body bgcolor="rgb(0,0,0)">
<body bgcolor="black">

در تمامي مثالهاي بالا با کمک شناسه bgcolor رنگ زمينه صفحه "سياه" تعيين ميشود.

شناسه Background براي تصوير پس زمينه:

براي تعيين تصويري که به عنوان پس زمينه صفحه نمايش داده ميشود از شناسه background استفاده ميشود.مقدار اين شناسه URL يا آدر س تصوير (image) ميباشد.اگر ابعاد تصوير کوچکتر از ابعاد صفحه مرورگر باشد، تصوير زمينه تکثير خواهد شد تا حدي که تمام صفحه نمايش از تصوير زمينه پوشانده شود.

<body background="bg.gif">
<body background="http://www.khaterat.com/images/bg.gif">

در مثال اول از آدرس دهي نسبي (relative) براي تعيين URL يا آدرس تصوير استفاده شده و در واقع در اين مثال فايل اچتمل و تصوير bg.gif بايد در يک دايرکتوري قرار گيرند. در مقابل مثال دوم از آدرس دهي مطلق (absolute) براي تعيين آدرس تصوير استفاده شده است و همانطور که ميدانيد آدرس تصوير در هر نقطه از فضاي وب ميتواند باشد.

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

  • هرتصويري با فرمت gif و يا jpg قابل استفاده به عنوان تصوير زمينه ميباشد.
  • از تصاوير بزرگتر از ده کيلوبايت ظرفيت به هيچ وجه استفادا نکنيد، در غير اين صورت سرعت load صفحه بشدت پايين خواهد آمد.
  • از تصاوير زمينه هماهنگ با ديگرتصاوير صفحه استفاده کنيد.
  • از تصاوير زمينه هماهنگ با متون صفحه استفاده کنيد.
  • در رزولوشنهاي مختلف به ديدن و آزمايش تصاوير پس زمينه بپردازيد.
  • پر مصرف ترين رنگهاي زمينه وب سايتها، رنگهاي سفيد، سياه و خاکستري ميباشند.
  • اغلب سايتهاي وب از تصاوير پس زمينه استفاده نمي کنند! مثلا همين سايت!!!
نکته مهم در سازگاري با نسخه هاي جديد اچتمل و XHTML

شناسه هاي bgcolor و background در تگ <body> در نسخه 4 اچتمل و XHTML پشتيباني نميشوند و در واقع از رده خارج محسوب ميشوند. در عوض کنسرسيوم W3C استفاده از Style Sheet ها را توصيه ميکند و در واقع در نسخه 4 اچتمل و استاندارد جديد XHTML تمامي اطلاعات مربوط به نمايش يا presentation و layout بايد در style sheet ها قرار گيرند.

مثالهاي بيشتر

استفاده مناسب از تصوير زمينه 1
در اين مثال بدليل استفاده از تصوير مناسب براي زمينه، نوشته هاي صفحه کاملا خوانا هستند.

استفاده مناسب از تصوير زمينه 2
در اين مثال در اثر استفاده از تصوير مناسب براي زمينه، نوشته هاي صفحه کاملا خوانا هستند.

استفاده نامناسب از تصوير زمينه
در اين مثال نوشته هاي صفحه خوانا نيستند.

استفاده از تصوير زمينه با آدرس مطلق
در اين مثال آدرس تصوير زمينه بصورت مطلق و کامل آورده شده است.

تعيين رنگ زمينه با Style Sheet ها
در اين مثال چگونگي استفاده از Style Sheet ها براي تعيين رنگ زمينه آورده شده است.

کيفيت مقاله :
عالی خوب متوسط ضعيف


قلم ها ( HTML Fonts ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۳۰ مراجعه امروز
۵۰۴۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
قلم ها ( HTML Fonts )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۰۳۸ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

با وجوديکه هنوز بعضي از اچتمل کاران از تگ <font> براي تعيين نام و نوع قلم، رنگ و اندازه متون استفاده ميکنند ولي در استاندارد جديد اچتمل (نسخه 4) و همچنين XHTML از تگ <font> پشتيباني نميشود و استفاده از Style Sheet ها به عنوان جايگزين معرفي شده است.

تگ <font>

در نسخه هاي 3.2 و قبلي تر زبان اچتمل از تگ <font> براي تعيين نام قلم، رنگ و اندازه متون استفاده ميشود. در اين تگ شناسه face نام قلم ، شناسه size انداره قلم و شناسه color معرف رنگ متن خواهد بود. مثالهاي زير کاربرد تگ <font> خدابيامرز را نشان ميدهند:

کد اچتمل نمايش کد روبرو توسط مرورگر
<p>
<font size="2" face="Verdana">
This is a paragraph.
</font>
</p>

This is a paragraph.

<p dir="rtl">
<font size="1" face="Times" color="#FF9900">
متني با قلم Times و اندازه 1 و رنگ FF9900
</font>
</p>

متني با قلم Times و اندازه 1 و رنگ FF9900

<p dir="rtl">
<font size="2" face="Tahoma" color="red">
اين متني با قلم Tahoma و اندازه 2 و رنگ قرمز
</font>
</p>

متني با قلم Tahoma و اندازه 2 و رنگ قرمز

شناسه هاي تگ <font>
Attribute | Example | کاربرد
size="number" | size="2" | تعيين اندازه قلم
size="+number" | size="+1" | افزايش اندازه قلم
size="-number" | size="-1" | کاهش اندازه قلم
face="face-name" | face="Times" | تعيين نام قلم
color="color-value" | color="#eeff00" | تعيين رنگ قلم
color="color-name" | color="red" | تعيين رنگ قلم

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

ديگر از تگ <font> استفاده نکنيد!

تگ <font> از رده خارج محسوب ميشود و کنسرسيوم جهاني تعيين استانداردهاي وب (World Wide Web Consortium, W3C) اين تگ را از مجموعه تگهاي استاندارد اچتمل کنار گذاشته است و اکيدا توصيه ميشود که از Style Sheet ها براي تعريف هر گونه خواص نمايشي و آرايشي (layout & Presentation) المانها در اچتمل استفاده شود.

روش صحيح تعيين نام قلم، اندازه و رنگ متون با کمک Style Sheet ها:

هر چند که مبحث و کلاسهاي درس Style Sheet ها در "مدرسه وب" در دست تهيه بوده و اميدواريم که بزودي ارائه شوند ولي تا قبل از آن استفاده از شناسه اي به نام style در بسياري از المانها کار گشا خواهد بود. مثالهاي ساده زير نحوه تعيين نام قلم، اندازه و رنگ متون را با کمک شناسه style به نمايش خواهند گذاشت:

تعيين نام قلم
مثالي در مورد تعيين نام قلم در يک استيل درجا (inline)

تعيين اندازه قلم
مثالي در مورد تعيين اندازه قلم در يک استيل درجا (inline)

تعيين رنگ قلم
مثالي در مورد تعيين رنگ قلم در يک استيل درجا (inline)

تعيين نام، اندازه و رنگ قلم
مثالي در مورد تعيين نام، اندازه و رنگ قلم در يک استيل درجا (inline)

مثال کاربردي در مورد Style Sheet ها
مثالي در مورد نحوه تعريف استيلهاي مختلف نمايش متون در جداول

تگ <span>
تگ <span> سبب تعريف محدوده و گستره اي مشخص ميشود. تمامي المان هائي که درون تگهاي <span> و <span/> قرار خواهند گرفت خواص آنرا به ارث خواهند برد، خواصي از قبيل استيل (Style) و يا سمت و جهت نمايش متون(dir).
بر خلاف تگ هاي <p> و <div> مرورگرها هيچ سطر جديدي به اول يا آخر المان <span> اضافه نمي کنند.

مثال:
کد اچتمل | نمايش کد روبرو توسط مرورگر
<p>Some text <span style="color:#0000AF;">another text</span> again text...</p> | Some text another text again text...

id, class, title, style, dir, lang شناسه هاي استاندارد المان span

مثالهائي از نحوه استفاده از المان span و Style sheet ها:
روش قديمي | روش صحيح
<font color="#FF00FF">Hello!</font> | <span style="color:#FF00FF">Hello!</span>
<font color="rgb(255,0,255)">Hello!</font> | <span style="color:rgb(255,0,255)">Hello!</span>
<font style="color:Fuchsia">Hello!</font> | <span style="color:Fuchsia">Hello!</span>
<font color="#FF00FF" size="3">Hello!</font> | <span style="color:#FF00FF;font-size:100%">Hello!</span>

تگ <div>
تگ <div> سبب تعريف محدوده و گستره اي مشخص ميشود. تمامي المان هائي که درون تگهاي <div> و <div/> قرار خواهند گرفت خواص آنرا به ارث خواهند برد، خواصي از قبيل استيل (Style) و يا سمت و جهت نمايش متون(dir).
بر خلاف تگ <span> مرورگرها يک سطر جديد به اول و آخر المان <div> اضافه مي کنند.

مثال:
کد اچتمل | نمايش کد روبرو توسط مرورگر
<p>Some text <div style="color:#0000AF;">another text</div> again text...</p> | Some text another text again text...

id, class, title, style, dir, lang شناسه هاي استاندارد المان div

تعيين جهت نمايش متون
مثالي در مورد استفاده از تگ div و اعمال "جهت نمايش متون" به بخشي از صفحه اچتمل

Start Tag | Purpose | کاربرد
<div> | Defines a division/section in a document | تعريف بخش و ناحيه اي از صفحه اچتمل
<span> | Defines a section in a document | تعريف بخش و ناحيه اي از صفحه اچتمل

مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


استایل شیتها ( Style Sheets ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۳۳ مراجعه امروز
۵۰۴۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استایل شیتها ( Style Sheets )
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۰۷۷ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.

در نسخه جديد(4/0) اچتمل امکان جداسازي کامل فرمت دهي از ساختار صفحات اچتمل فراهم شده است. در اين نسخه توصيه ميشود که تمامي اطلاعات مربوط به نمايش و ترازبندي به فايلهائي مجزا از صفحه اچتمل منتقل شوند. بخشي از صقحات اچتمل که مربوط به نمايش، ترازبندي و فرمت دهي است، استايل شيت يا "Style Sheet" ناميد شده و معمولا به صورت فايلي مجزا درون بخش <head> صفحات اچتمل معرفي ميگردند. در اين درس به صورت بسيار خلاصه با روشهاي مختلف استفاده از استايل شيتها در صفحات اچتمل آشنا خواهيد شد.

مثالها

استيلها در اچتمل
در اين مثال نحوه تعريف استايل شيتها درون بخش <head> صفحات اچتمل شرح داده شده است. (Internal Style Sheet)

پيوندي بدون خط افقي زيري
در اين مثال نحوه ايجاد پيوندي بدون "خط افقي زيري" شرح داده شده است. (Inline Styles)

اتصال به فايلهاي استايل شيت خارجي
در اين مثال نحوه استفاده از تگ <link> جهت اتصال به فايلهاي استايل شيت خارجي شرح داده خواهد شد. (External Style Sheet)

چگونگي استفاده از استايل شيتها:

مرورگرها از روي استيلهاي تعريف شده توسط استايل شيتها به فرمت دهي و نمايش اطلاعات درون صفحه اچتمل ميپردازند. تعريف و استفاده از استايل ها در صفحات اچتمل به سه روش مختلف ممکن ميباشد:

1)استايل شيتهاي خارجي (external style sheet) :

در اين روش تمامي استيلها و تعاريف نمايشي درون فايلي جداگانه قرار گرفته و بسيار مناسب حالتهائي است که قرار است که استايلي به بيش از يک صفحه اچتمل اعمال شود. مزيت اين روش سهولت در تغيير ظاهر صفحات يک وب سايت ميباشد و براي يک تغيير کلي در سايت کافي است که فايل استايل شيت کل سايت که معمولا يک فايل واحد است تغيير داده شود. (بايد توجه داشت که در اين حالت تمامي صفحات سايت بايد به يک فايل استايل شيت واحد لينک شده باشند.) استايل شيتهاي خارجي توسط تگ <link> که درون بخش head صفحات اچتمل قرار ميگيرد، معرفي ميشوند.
در مثال زير با کمک شناسه href از تگ link نام و در حالت کلي url فايل در برگيرنده استايلهاي تعريف شده تعيين ميگردد:

<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>

2)استايل شيتهاي داخلي (Internal Style Sheet) :

کاربرد اين روش در حالتهائي است که صفحه اچتمل نيازمند تعريف استايلي منحصر به فرد و مجزا بوده و استايل طراحي شده فقط بدرد آن صفحه خواهد خورد. در اين حالت بايد کدهاي حاوي تعريف استايل درون تگ هاي <style> و <style/> قرار گرفته و معمولا نتيجه درون بخش head صفحه اچتمل گذاشته ميشود.مثال:

<head>
<style type="text/css">
body {background-color: red}
p {margin-left: 20px}
</style>
</head>

3)استايل شيتهاي درجا (Inline Styles) :
کاربرد اين روش در مواردي است که بايد براي يک المان (يا گروهي) خاص استايلي اعمال شود. در اين حالت بايد از شناسه اي به نام style که تقريبا در تمامي تگها قابل اعمال است استفاده شود. مثال:

<p style="color: red; margin-left: 20px">
This is a paragraph
</p>

تگ هاي استايل
Start Tag | Purpose | کاربرد
<style> | Defines a style in a document | تعريف استيلها درون يک سند
<link> | Defines the relationship between two linked documents | تعيين و تعريف فايل استايل شيت خارجي
<font> | Deprecated. Use styles instead | کنار گذاشته شده.از استايل شيتها استفاده شود.
<basefont> | Deprecated. Use styles instead | کنار گذاشته شده.از استايل شيتها استفاده شود.
<center> | Deprecated. Use styles instead | کنار گذاشته شده.از استايل شيتها استفاده شود.

مرجع : HTML 4.01 Specification - فهرست عناصر - فهرست شناسه ها

تغييرات در نسخه جديد اچتمل (4/0) :
هدف اوليه از طراحي زبان اچتمل ايجاد زباني براي تعريف اطلاعات محض بدون در برداشتن جزئيات مربوط به فرمت و نمايش بود ولي با ايجاد نسخه 3/2 زبان اچتمل و اضافه شدن تگهاي فرمت دهي مانند <font> و يا شناسه هائي مانند color و Align محتوا و نمايش در صفحات اچتمل ادغام گرديده و همين امر سبب بروز مشکلات عديده اي براي طراحان و برنامه نويسان وب گرديد. براي رفع اين مشکل در نسخه 4/0 اچتمل توصيه بر جداسازي کامل اين دو گروه از اطلاعات بوده و در نسخه هاي آينده اچتمل اين جداسازي اجباري خواهد گرديد و توصيه مدرسه وب نيز استفاده از استايل شيتها براي هر نوع تعريف فرمت و ترازبندي ميباشد. براي مثال در کد اچتمل زير که بر اساس نسخه 3/2 اچتمل ميباشد، ساختار و محتوا (تگي از نوع پاراگراف با محتواي "This is a paragraph") با اطلاعات نمايش يعني رنگ و ترازبندي (رنک قرمز متن و ترازبندي در وسط صفحه) همزمان و در کنار هم آورده شده اند و اين ادغام امکان تغيير و توسعه کد را بسيار محدود خواهد کرد:

<p align="center"><font color="red">This is a paragraph</font></p>

کد معادل مثال فوق با استفاده از استايل شيتها در اين مثال شرح داده شده است.(هر چند که اين مثال از تمامي امکانات استايل شيتها و ايجاد فايلي کاملا مستقل براي تعريف استايل استفاده نکرده است.)

کيفيت مقاله :
عالی خوب متوسط ضعيف


HTML Reference ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۲ بيننده در حال حاضر
۱۲۳۶ مراجعه امروز
۵۰۵۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
HTML Reference
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۰۵۵ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

HTML Reference
NAME W3C HTML NS MSIE DESCRIPTION
کيفيت مقاله :
عالی خوب متوسط ضعيف


رنگها در اچ تي ام ال ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۳۹ مراجعه امروز
۵۰۵۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
رنگها در اچ تي ام ال
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۰۴۸ بار مطالعه شده است
۱۶ نفر تا به حال به اين مقاله رای داده اند.
در زبان اچتمل رنگها بر اساس ترکيب سه منبع نوري قرمز(Red)، سبز(Green) و آبي(Blue) تعريف ميشوند و هر منبع نوري شدتي بين 0 تا 255 را ميتواند داشته باشد. در اين استاندارد نور سفيد رنگي است حاصل از تداخل سه منبع نوري با شدت کامل يعني 255 و رنگ سياه حاصل تداخل سه نور با شدت 0 خواهد بود.(در واقع هر نقطه رنگي يا پيکسل بر روي صفحه مانيتور حاصل برخورد سه اشعه نوري قرمز، سبز و آبي ساخته شده توسط لامپ تصوير ميباشد.)

توجه داشته باشيد که مطابق تعريف ذکر شده امکان استفاده از 256 x 256 x 256 يا حدود 16 ميليون (16,777,216) رنگ مختلف وجود داشته و در شناسه هاي مختلف به يکي از سه روش زير قادر به تعيين رنگ متن يا ناحيه اي خواهيد بود:

  1. استفاده از مقادير شدت نور در مبناي 16 با فرمت #RRGGBB که RR، GG, BB مقادير مبناي شانزده نورهاي قرمز، سبز و آبي ميباشند.
  2. استفاده از مقادير شدت نور در مبناي 10 با فرمت rgb(RRR,GGG,BBB) که RRR، GGG, BBB مقادير مبناي ده نورهاي قرمز، سبز و آبي ميباشند.
  3. استفاده از نامهاي استاندارد رنگها مانند red ، green و ... مطابق جدول انتهائي اين صفحه
جدول زير حاوي جندين مثال و رنگ ترکيبي در مبناي ده و شانزده ميباشد:

Color | مبناي 16 (Color HEX) | مبناي 10 (Color RGB) | نام رنگ
 | #000000 | rgb(0,0,0) | Black
 | #FF0000 | rgb(255,0,0) | Red
 | #00FF00 | rgb(0,255,0) | Lime
 | #0000FF | rgb(0,0,255) | Blue
 | #FFFF00 | rgb(255,255,0) | Yellow
 | #00FFFF | rgb(0,255,255) | Cyan
 | #FF00FF | rgb(255,0,255) | Fuchsia
 | #FFFFFF | rgb(255,255,255) | White
 | #C0C0C0 | rgb(192,192,192) | Silver

مثالهائي از نحوه استفاده از رنگها در اچتمل:
<p style="color:#FF00FF">Hello!</p> | استفاده از مقدار در مبناي 16
<p style="color:rgb(255,0,255)">Hello!</p> | استفاده از مقدار در مبناي 10
<p style="color:Fuchsia">Hello!</p> | استفاده از نام رنگ
body{ color: #444400; } | تعيين رنگ نوشته المان body در Style sheet ها
body{ background-color:#FFFFFF; } | تعيين رنگ زمينه صفحه در Style sheet ها
HR { color : #EEEECC;} | تعيين رنگ خطوط افقي در Style sheet ها
a:link {color:#c00B09;} | تعيين رنگ پيوندها در Style sheet ها
p {color:Yellow;} | تعيين رنگ متون پاراگرافها در Style sheet ها

جدول رنگهاي پايه اچتمل بر اساس مقادير هگز

#EEEEEE | #DDDDDD | #CCCCCC | #BBBBBB | #AAAAAA | #999999
#888888 | #777777 | #666666 | #555555 | #444444 | #333333
#000000 | #000033 | #000066 | #000099 | #0000CC | #0000FF
#330000 | #330033 | #330066 | #330099 | #3300CC | #3300FF
#660000 | #660033 | #660066 | #660099 | #6600CC | #6600FF
#990000 | #990033 | #990066 | #990099 | #9900CC | #9900FF
#CC0000 | #CC0033 | #CC0066 | #CC0099 | #CC00CC | #CC00FF
#FF0000 | #FF0033 | #FF0066 | #FF0099 | #FF00CC | #FF00FF
#003300 | #003333 | #003366 | #003399 | #0033CC | #0033FF
#333300 | #333333 | #333366 | #333399 | #3333CC | #3333FF
#663300 | #663333 | #663366 | #663399 | #6633CC | #6633FF
#993300 | #993333 | #993366 | #993399 | #9933CC | #9933FF
#CC3300 | #CC3333 | #CC3366 | #CC3399 | #CC33CC | #CC33FF
#FF3300 | #FF3333 | #FF3366 | #FF3399 | #FF33CC | #FF33FF
#006600 | #006633 | #006666 | #006699 | #0066CC | #0066FF
#336600 | #336633 | #336666 | #336699 | #3366CC | #3366FF
#666600 | #666633 | #666666 | #666699 | #6666CC | #6666FF
#996600 | #996633 | #996666 | #996699 | #9966CC | #9966FF
#CC6600 | #CC6633 | #CC6666 | #CC3399 | #CC66CC | #CC66FF
#FF6600 | #FF6633 | #FF6666 | #FF6699 | #FF66CC | #FF66FF
#009900 | #009933 | #009966 | #009999 | #0099CC | #0099FF
#339900 | #339933 | #339966 | #339999 | #3399CC | #3399FF
#669900 | #669933 | #669966 | #669999 | #6699CC | #6699FF
#999900 | #999933 | #999966 | #999999 | #9999CC | #9999FF
#CC9900 | #CC9933 | #CC9966 | #CC9999 | #CC99CC | #CC99FF
#FF9900 | #FF9933 | #FF9966 | #FF9999 | #FF99CC | #FF99FF
#00CC00 | #00CC33 | #00CC66 | #00CC99 | #00CCCC | #00CCFF
#33CC00 | #33CC33 | #33CC66 | #33CC99 | #33CCCC | #33CCFF
#66CC00 | #66CC33 | #66CC66 | #66CC99 | #66CCCC | #66CCFF
#99CC00 | #99CC33 | #99CC66 | #99CC99 | #99CCCC | #99CCFF
#CCCC00 | #CCCC33 | #CCCC66 | #CCCC99 | #CCCCCC | #CCCCFF
#FFCC00 | #FFCC33 | #FFCC66 | #FFCC99 | #FFCCCC | #FFCCFF
#00FF00 | #00FF33 | #00FF66 | #00FF99 | #00FFCC | #00FFFF
#33FF00 | #33FF33 | #33FF66 | #33FF99 | #33FFCC | #33FFFF
#66FF00 | #66FF33 | #66FF66 | #66FF99 | #66FFCC | #66FFFF
#99FF00 | #99FF33 | #99FF66 | #99FF99 | #99FFCC | #99FFFF
#CCFF00 | #CCFF33 | #CCFF66 | #CCFF99 | #CCFFCC | #CCFFFF
#FFFF00 | #FFFF33 | #FFFF66 | #FFFF99 | #FFFFCC | #FFFFFF

جدول رنگهاي نامگذاري شده و مقادير معادل هگز آن به ترتيب حروف الفباء

Aliceblue #F0F8FF | Antiquewhite #FAEBD7 | Aqua #00FFFF
Aquamarine #7FFFD4 | Azure #F0FFFF | Beige #F5F5DC
Bisque #FFE4C4 | Black #000000 | Blanchedalmond #FFEBCD
Blue #0000FF | Blueviolet #8A2BE2 | Brown #A52A2A
Burlywood #DEB887 | Cadetblue #5F9EA0 | Chartreuse #7FFF00
Chocolate #D2691E | Coral #FF7F50 | Cornflowerblue #6495ED
Cornsilk #FFF8DC | Crimson #DC143C | Cyan #00FFFF
Darkblue #00008B | Darkcyan #008B8B | Darkgoldenrod #B8860B
Darkgray #A9A9A9 | Darkgreen #006400 | Darkkhaki #BDB76B
Darkmagenta #8B008B | Darkolivegreen #556B2F | Darkorange #FF8C00
Darkorchid #9932CC | Darkred #8B0000 | Darksalmon #E9967A
Darkseagreen #8FBC8F | Darkslateblue #483D8B | Darkslategray #2F4F4F
Darkturquoise #00CED1 | Darkviolet #9400D3 | Deeppink #FF1493
Deepskyblue #00BFFF | Dimgray #696969 | Dodgerblue #1E90FF
Firebrick #B22222 | Floralwhite #FFFAF0 | Forestgreen #228B22
Fuchsia #FF00FF | Gainsboro #DCDCDC | Ghostwhite #F8F8FF
Gold #FFD700 | Goldenrod #DAA520 | Gray #808080
Green #008000 | Greenyellow #ADFF2F | Honeydew #F0FFF0
Hotpink #FF69B4 | Indianred #CD5C5C | Indigo #4B0082
Ivory #FFFFF0 | Khaki #F0E68C | Lavender #E6E6FA
Lavenderblush #FFF0F5 | Lawngreen #7CFC00 | Lemonchiffon #FFFACD
Lightblue #ADD8E6 | Lightcoral #F08080 | Lightcyan #E0FFFF
Lightgoldenrodyellow #FAFAD2 | Lightgreen #90EE90 | Lightgrey #D3D3D3
Lightpink #FFB6C1 | Lightsalmon #FFA07A | Lightseagreen #20B2AA
Lightskyblue #87CEFA | Lightslategray #778899 | Lightsteelblue #B0C4DE
Lightyellow #FFFFE0 | Lime #00FF00 | Limegreen #32CD32
Linen #FAF0E6 | Magenta #FF00FF | Maroon #800000
Mediumaquamarine #66CDAA | Mediumblue #0000CD | Mediumorchid #BA55D3
Mediumpurple #9370D8 | Mediumseagreen #3CB371 | Mediumslateblue #7B68EE
Mediumspringgreen #00FA9A | Mediumturquoise #48D1CC | Mediumvioletred #C71585
Midnightblue #191970 | Mintcream #F5FFFA | Mistyrose #FFE4E1
Moccasin #FFE4B5 | Navajowhite #FFDEAD | Navy #000080
Oldlace #FDF5E6 | Olive #808000 | Olivedrab #688E23
Orange #FFA500 | Orangered #FF4500 | Orchid #DA70D6
Palegoldenrod #EEE8AA | Palegreen #98FB98 | Paleturquoise #AFEEEE
Palevioletred #D87093 | Papayawhip #FFEFD5 | Peachpuff #FFDAB9
Peru #CD853F | Pink #FFC0CB | Plum #DDA0DD
Powderblue #B0E0E6 | Purple #800080 | Red #FF0000
Rosybrown #BC8F8F | Royalblue #4169E1 | Saddlebrown #8B4513
Salmon #FA8072 | Sandybrown #F4A460 | Seagreen #2E8B57
Seashell #FFF5EE | Sienna #A0522D | Silver #C0C0C0
Skyblue #87CEEB | Slateblue #6A5ACD | Slategray #708090
Snow #FFFAFA | Springgreen #00FF7F | Steelblue #4682B4
Tan #D2B48C | Teal #008080 | Thistle #D8BFD8
Tomato #FF6347 | Turquoise #40E0D0 | Violet #EE82EE
Wheat #F5DEB3 | White #FFFFFF | Whitesmoke #F5F5F5
Yellow #FFFF00 | YellowGreen #9ACD32 |

کيفيت مقاله :
عالی خوب متوسط ضعيف


برگه تقلب اچتمل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۴۲ مراجعه امروز
۵۰۵۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برگه تقلب اچتمل
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۸/۱۳۸۱ اين مقاله ۲۲۷۸ بار مطالعه شده است
۲۳ نفر تا به حال به اين مقاله رای داده اند.
تگهاي اصلي (Basic Tags)
<html></html> | ايجاد سندي اچتمل
<head></head> | ايجاد اطلاعات شناسنامه اي سند مانند عنوان و ...
<body></body> | ايجاد بدنه و قسمت قابل مشاهده سند اچتمل
تگهاي ناحيه Header
<title></title> | تعيين عنوان سند
شناسه هاي مهم تگ body
<body bgcolor=?> | تعيين رنگ زمينه بر اساس نام رنگ يا معادل هگز
<body text=?> | تعيين رنگ نوشته بر اساس نام رنگ يا معادل هگز
<body link=?> | تعيين رنگ پيوندها بر اساس نام رنگ يا معادل هگز
<body vlink=?> | تعيين رنگ پيوندهاي بازديدشده بر اساس نام رنگ
<body alink=?> | تعيين رنگ پيوند فعال بر اساس نام رنگ يا معادل هگز
تگهاي متن و نوشته
<pre></pre> | نمايش متن هاي از قبل فرمت شده (preformatted)
<hl></hl> | ايجاد بزرگترين سر تيتر
<h6></h6> | ايجاد کوچکترين سر تيتر
<b></b> | ايجاد متن توپر
<i></i> | ايجاد متن مورب و ايتاليک
<tt></tt> | ايجاد متن از نوع تله تايپي
<cite></cite> | ايجاد citation معمولا ايتاليک
<em></em> | نمايش تاکيد شده متن (توپر يا مورب)
<strong></strong> | نمايش تاکيد شده متن (توپر يا مورب)
<font size=?></font> | تعيين اندازه قلم از 1 تا 7
<font color=?></font> | تعيين رنگ قلم بر اساس نام رنگ يا مقدار هگز آن
پيوندها
<a href="URL"></a> | ايجاد پيوند
<a href="mailto:EMAIL"></a> | ايجاد پيوندي از نوع mailto
<a name="NAME"></a> | ايجاد پيوندي نامگذاري شده در يک سند
<a href="#NAME"></a> | ارجاع به يک پيوند نامگذاري شده
فرمت دهي
<p></p> | ايجاد پاراگرافي جديد
<p align=?> | ترازبندي پاراگراف در سمت left, right, or center
<br> | رفتن سر سطر جديد
<blockquote> </blockquote> | عنوان سازي متن
<dl></dl> | ايجاد فهرستهاي تعريفي
<dt> | ايجاد عنصري از يک فهرست تعريفي
<dd> | ايجاد شرح و توصيف يک عنصر فهرست تعريفي
<ol></ol> | ايجاد فهرستهاي مرتب
<li></li> | ايجاد يک قلم اطلاعاتي از يک فهرست
<ul></ul> | ايجاد فهرستي نامرتب
<div align=?> | تگي براي فرمت دهي بلوکي بزرگ از کدهاي اچتمل
المانهاي گرافيکي
<img src="name"> | ايجاد يک تصوير
<img src="name" align=?> | تراز بندي تصوير (left, right, center; bottom, top, middle)
<img src="name" border=?> | تعيين ضخامت مرز يک تصوير
<hr> | درج خطي افقي
<hr size=?> | تعيين ارتفاع خط افقي
<hr width=?> | تعيين عرض خط بر اساس مقدار واقعي يا درصدي
<hr noshade> | ايجاد خطي افقي بدون سايه
جداول
<table></table> | ايجاد جدول
<tr></tr> | ايجاد رديف در جداول
<td></td> | ايجاد خانه هاي جداول
<th></th> | ايجاد عنوان ستونهاي يک جدول
شناسه هاي جداول
<table border=#> | تعيين مقدار ضخامت مرزهاي يک جدول
<table cellspacing=#> | تعيين فاصله بين خانه هاي جدول
<table cellpadding=#> | تعيين فاصله بين محتواي يک خانه و مرزهاي آن
<table width=# or %> | تعيين عرض جدول بر اساس پيکسل و يا درصدي
<tr align=?> or <td align=?> | تعيين ترازبندي خانه هاي جدول (left, center, right)
<tr valign=?> or <td valign=?> | ترازبندي عمودي خانه هاي جدول (top, middle, bottom)
<td colspan=#> | تعيين تعداد ستون هائي که بايد يکي شوند.
<td rowspan=#> | تعيين تعداد سطر هائي که بايد يکي شوند.
<td nowrap> | باعث جلوگيري از شکسته شدن متن در خانه جدول ميشود.
فريمها
<frameset></frameset> | تعريف و ايجاد مجموعه اي از فريمها
<frameset rows="value,value"> | شناسه اي براي تعريف رديفهاي يک مجموعه فريم بر اساس اندازه واقعي بر حسب پيکسل و يا ابعاد درصدي
<frameset cols="value,value"> | شناسه اي براي تعريف ستونها يک مجموعه فريم بر اساس اندازه واقعي بر حسب پيکسل و يا ابعاد درصدي
<frame> | تعريف فريمي از مجموعه فريمها
<noframes></noframes> | تعيين متني که بايد در صورت عدم پشتيباني مرورگر از فريمها بايد نمايش داده شود.
شناسه هاي فريمها
<frame src="URL"> | تعيين سند اچتمل داخل فريم
<frame name="name"> | تعيين نام براي يک فريم
<frame marginwidth=#> | تعيين عرض حاشيه راست و چپ فريم
<frame marginheight=#> | تعريف طول حاشيه بالا و پايين فريم بر اساس پيکسل
<frame scrolling=VALUE> | تعيين اينکه فريمي از Scroll bar استفاده کند يا نه. مقادير ممکن: yes، no و auto (حالت پيش فرض)
<frame noresize> | سبب جلوگيري از تغيير اندازه يک فريم ميشود.
فرمها
<form></form> | ايجاد يک فرم
<select multiple name="NAME" size=?></select> | ايجاد يک منوي کرکره اي و تعيين تعداد اقلامي که قبل از scrolling نمايش داده خواهند شد.
<option> | تعيين هر يک از اقلام منو کرکره اي
<select name="NAME"></select> | ايجاد منوي کرکره اي
<option> | تعيين هر يک از اقلام منو کرکره اي
<textarea name="NAME" cols=40 rows=8></textarea> | ايجاد الماني براي ورود متن در بيش از يک خط با تعيين تعداد سطر و ستون ناحيه
<input type="checkbox" name="NAME"> | ايجاد چک باکسي با تعيين متن و عنوان آن
<input type="radio" name="NAME" value="x"> | ايجاد راديو باتن با تعيين متن و عنوان آن
<input type=text name="foo" size=20> | ايجاد الماني براي ورود متن با حداکثر يک سطر به همراه تعيين ابعاد بر اساس نويسه
<input type="submit" value="NAME"> | ايجاد دکمه اي از نوع ارسال و Submit
<input type="image" border=0 name="NAME" src="name.gif"> | ايجاد دکمه اي از نوع ارسال با کمک يک تصوير
<input type="reset"> | ايجاد دکمه خلاصي !! يا Reset

کيفيت مقاله :
عالی خوب متوسط ضعيف


مرجع نکات فني وب ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۴۵ مراجعه امروز
۵۰۶۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مرجع نکات فني وب
نويسنده : مدرسه وب
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۸/۱۳۸۱ اين مقاله ۲۲۲۸ بار مطالعه شده است
۱۲ نفر تا به حال به اين مقاله رای داده اند.
Anchor | پيوند، لينک، (لنگر كشتي)
Attribute | شناسه، نشان، صفت
Browser, user agent | مرورگر، شبکه نورد، بروزر
Caption | عنوان ، سرلوحه
Character | نويسه، کاراکتر، دخشه
Client | سرويس گيرنده، مشتري ، ارباب رجوع
DHTML | اچتمل ديناميک، FAQ
Division, Div | بخش، قسمت، دسته بندي
Download | گرفتن اطلاعات از وب سرور
Document | سند، متني اچتمل
Edit | ويرايش
Element | المان، عنصر
Explorer | جستجوگر، مكتشف
Extention | انشعاب فايل
FAQ | بيشترين سؤالات پرسيده شده در مورد يک موضوع
Font | قلم، خانواده حروف
Format | قالب، فرمت
Frame | قاب، چهارچوب
Frameset | مجموعه اي از فريمها
FTP | استانداردي براي مبادله فايل (File Transfer Protocol)
href | آدرس متن مختلط (hyerlink reference)
IP | Internet Protocol
JavaScript | جاوا اسکريپت، زباني براي اسکريپت نويسي
HTTP | استاندارد تبادل ابر متن ها (Hypertext Transfer Protocol)
Hyper text | ابر متن، متن مختلط
List | فهرست
Link | پيوند، لينک
Online | آنلاين، سرخط
Padding | لايه گذاري، لفافه
Page, Web page | صفحه، متن
Publish | انتشار، بردن اطلاعات روي وب سرور
Protocol | استاندارد ارتباطي، فهرست پروتوکلهاي مهم در اينترنت
Robot | نرم افزاري خودکار در وب
Site. Web site | پايگاه، سايت
Script | اسکريپت، دستخط، متن نمايشنامه
Spacing | فاصله گذاري ، فاصله
Span | محدوده، گستره، وجب
Target | هدف و مقصد
Table | جدول، آرايه
Tag | تگ، برچسب
TCP/IP | نوعي استاندارد ارتباطي (Transmission Control Protocol/Internet Protocol)
Unicode | استانداري براي محيط هاي چند زبانه
Upload | بردن اطلاعات روي وب سرور، معمولا با کمک نرم افزارهاي FTP انجام ميپذيرد.
URL | آدرس اينترنتي، خلاصه شده Uniform Resource Locator
User, Surfer | کاربر، وبگرد، بازديدکننده
Weblog | وب نويسي، تارنگاري
Webmaster | مديريت سايت
Web Server | سرويس دهنده وب، نرم افزاري که وظيفه اصليش دادن سرويس به درخواستهاي دريافت شده از وب ميباشد.
Web, WWW | وب، تار عنکبوت جهاني، خلاصه شده World Wide Web

  • سايتهائي مرجع براي يادگيري اچتمل :

    1) Welcome to HTML School
    2) Getting Started
    3) Authoring HTML Basics
    4) Getting started with HTML
    5) A Beginner's Guide to HTML
    6) HTML Tutorial
    7) HTML Tag Quick Reference Guide
    8) HTML FAQ Knowledge Base
    9) HTML 4.01 Specification

    کيفيت مقاله :
    عالی خوب متوسط ضعيف

    • ©2005 IranDevelopers. All rights reserved. E-mail this Page


حل يك مساله از طريق فايلهاي ترتيبي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۱۲ مراجعه امروز
۴۱۲۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
حل يك مساله از طريق فايلهاي ترتيبي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۸/۱۳۸۱ اين مقاله ۱۴۵۶ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

حل يك مساله از طريق فايلهاي ترتيبي

تاكنون با نحوه تشكيل فايل هاي ترتيبي و چگونگي دسترسي به اطلاعات موجود در
آن آشنا شده ايم . اكنون مساله پيچيده تري را در نظر مي گيريم : يك فايل داده به
نام old حاوي اطلاعات مربوط به دانشجويان است كه بايد بازسازي گردد . منظور از
بازسازي فايل ، حذف ركورد ، تغيير ركورد و يا اضافه نمودن ركورد جديدي به فايل
است . فرمت ركوردهاي فايل old بصورت زير مي باشد :
نمره | درس | نام دانشجو | شماره دانشجويي |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 4 20 10 2

نمونه اي از اطلاعات موجود در فايل old بصورت زير است :

نمره نام درس نام دانشجو فيلد كليد ( شماره دانشجويي )
ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1234 Ali pascal 15
2345 Ahmad pascal 19
3456 Reaz C 18
5678 Jafar C 14
6789 Jalal pascal 13
9999 zzzz zzzz 9

براي بازسازي فايل old ركوردهاي تراكنش در فايلي بنام trans قرار دارند .
فرمت ركوردهاي اين فايل بصورت زير مي باشد :
|
نمره | درس | نام دانشجو | تراكنش | شماره دانشجويي |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 4 1 20 10 2

در فرمت فوق ، تراكنش مشخص مي كند كه ركورد بايد حذف ، اضافه و يا تغيير
نمايد . اگر تراكنش برابر با I ركورد بايد اضافه گردد ، اگر برابر با D باشد
ركورد بايد حذف گردد و اگر برابر با C باشد ركورد بايد تغيير نمايد .

نمونه اي از محتويات فايل trans بصورت زير است .

نمره نام درس نام دانشجو نوع تغييرات فيلد كليد ( شماره دانشجويي )
ؤؤؤؤ ؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 20
pascal Ahmad تغيير محتويات ركورد 2345 20
C Ritchie اضافه 4567 13
pascal Jalal حذف 6789 9999 zzz zzz zzz 9

نتيجه حاصل از تركيب دو فايل oldو transو فايل جديدي بنام new است كه حاوي
جديدترين اطلاعات مي باشد و محتويات آن بصورت زير است :

نمره نام درس نام دانشجو فيلد كليد ( شماره دانشجويي )
ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1234 Ali pascal 15
2345 Ahmad pascal 20
3456 Reaz C 19
4567 Ritchie C 20
5678 Jafar C 14
9999 zzz zzz 18

چگونگي تركيب فايل هاي oldو transو و تشكيل فايل new در شكل ( الف ) مشاهده
مي گردد .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
گزارش خطا | | فايل old | o
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤ ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤ >ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ<ؤ|
برنامه بازسازي |
ؤ >ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ<ؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤ ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
فايل new | n | فايل | tatrans
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل ( الف ) . بازسازي فايل ترتيبي

همانطور كه در شكل ( الف ) مشاهده مي گردد ، اگر در حين بازسازي خطايي رخ
دهد ، مثلا" ركوردي كه در فايل old وجود نداشته باشد ولي سعي در حذف آن داشته
باشيم ، پيام خطاي مناسبي در صفحه نمايش چاپ مي شود . شكل ( ب ) نمودار سلسله
مراتبي برنامه بازسازي فايل ترتيبي را نشان مي دهد .
ؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|

ؤؤؤؤؤؤؤؤؤؤؤؤ |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | | | |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ|ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |syserr)(|||get_master_record||||get_transaction_record||do_nintial_status|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ|ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤ | |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | |
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |apply_transaction||do_final_status||copy_corresponding||put_master_record||
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | | | |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ| ؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ||copy_corresponding|| |error| |||copy_corresponding|| |get_master_record|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ| ؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ || put_master_record ||

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل ( ب ) . نمودار سلسله مراتبي بازسازي فايل ترتيبي

ليست برنامه بازسازي فايل ترتيبي . # include
# define READONLY "r"
# define WRITEONLY "w"
# define FALSE 0
# define TRUE 1
typedef int boolean;

# define NAMESIZE 21
# define SUBJECTSIZE 11
# define TRAILER 9999

# define INSERT 'I'
# define DELETE 'D'
# define CHANGE 'C'

char *prog;
FILE *fopen)(
int fclose)(/fscanf)(/fprinter
boolean get_transaction_record)(
boolean get_master_record)(
boolean put_master_record)(

void do_inital_status)(
void do_final_status)(
void apply_transation)(
void copy_corresponding)(
void syserr)(/error)(

main(argc/argv)
int argc
char *argv[]
{
cgar b[21]/c[11]
int a/d
FILE *fpold/*fptrans/*fpnew
int current_key
boolean allocated
char tran_transaction
int old_identification
tran_identification
new_identification
char old_name[NAMESIZE]
tran_name[NAMESIZE]
new_name[NAMESIZE]
char old_subject[SUBJECTSIZE]
tran_subject [SUBJECTSIZE]
new_subject[SUBJECTSIZE]
int old_grede/tran_grade
new_grade

prog=argv[0]
if(argc !=4 )syserr(1/
"usage:&s file1 file2 file3\n"/prog)

else if((fpold=fopen(argv[1]/
READONLY))==NULL)
syserr(2/
"cannot open &s\n"/argv[1])
else if(( fptrans=fopen( argv[2]/
READONL))==NULL
syserr(2/"cannot open &s\n"/argv[2])
else if (( fopew=fopen( argv[3]/
WRITEONLY))==NULL
syserr(2/"cannot open &s\n"/argv[3]);
else
{
get_master_record(fpold/
&old_identification/
old_name/old_subject/&old_grade);
get_transction_record(fptrans/
&tran_identification/
&tran_transaction/
&tran_name/tran_subject/
&tran_grade
current_key=tran_identification <
old_identification ?
tran_identification:
old_identification ;
while(current_key != TRAILER)
{
do_initial_status(current_key/
&allocated/
fpold/&old_identifcation/
old_name/old_subject/&old_grade);
*new_identification'
new_name/new_sudject/&new_grade);
while(current_key==
tran_identification
{
apply_transaction( &allocated'
tran_identification/
tran_transaction/
tran_subject/tran_grade/
&new_identification/new_name/
new_subject/&new_grade);
get_transction_record(fptrans/
&tran_identification/
&tran_transaction/tran_name
tran_subject/&tran_grade/
}
do_final_status( fpnew/allocated/
new_identification/new_name/
new_subject/new_grade);
current_key=tran_identification<
old_identification ?
tran_identification:
old_identification ;
}
copy_corresponding(
&new_identification/new_name/
new_subject/&new_grade/9999/
"zzzzzzzzzzzzzzzzzzzz"/
"zzzzzzzzzz"/9);
put_master_record(fpnew/
new_identification/
new_name/new_subject/new_grade );
fclose(fpold);
fclose(fptrans);
fclose(fpnew);
}
}

boolean get_transaction_record(fp/
identification/
transaction/ name/suhject/grade)
FILE *fp;
int *identification;
char *transaction;
char *name;
char *subject;
int *grade;
{
if( fscanf( fp/ "%4d%c%20s%10%2d"/
identification/
transaction/name/subject/grade)==5)
return(TRUE);
else
return(FALSE);

}

boolean get_master_record(fp/
identification/name/subject/grede)
FILE *fp;
int *identification;
char *name;
char *subject;
int *grade;
{
if( fscanf( fp/"%4d%20s%10s%2d"/
identification/
name/sunject/grade)==4)
return(TRUE);
else
return(FALSE);

}

boolean put_master_record(fp/
identification/name/subject/grade)
FILE *fp;
int *identification;
char *name;
char *subject;
int *grade;
{
if(fprintf(fp/
"%6d %-20s %-10s %2d\n"/
identification/name/
subject/grade)!=EOF)return(TRUE);
else
return(FALSE);
}

void apply_transaction(allocated/
tran_identification/
tran_transaction/tran_name/
tran_subject/tran_grade/
new_identification/new_name/
new_subject/new_grade)
boolean *allocated;
char tran_transaction;
int tran_identification/
*new_identification;
char *tran_name/ *new_name;
char *tran_subject/ *new_subject;
int tran_grade/ *new_grade;

{
switch(tran_transaction)
{
case INSERT:
if(*allocated==TRUE)
error(INDSERT/
"record already exists\n"/
tran_identification);
else
{
copy_corresponding(
new_identification/
new_name/new_subject/
tran_grade);
*allocated=TRUE;
}
break;
case DELETE:
if(*allocated==FALSE)
error(DELETE/
"tecord dose not exist\n"/
tran_identification);
else
*allocated=FALSE;
break;
case CHANGE:
if(*allocated==FALSE)
error(CHANFE/
"record dose not exist\n"/
tran_identification);
else
copy_corresponding(
new_identification/
new_name/new_subject/
new_grade/
tran_identification/
tran-name/tran_subject/
tran_grade);
break;
}
}

void do_initial_status(current_key/
allocated/fp/old_identification/
old_name/old_subject/old_grade/
new_identificatinl/new_name/
new_subject/new_grade)
int current_key;
boolean *allocated;
FILE *fp'
int *old_identification/
*new_identification/
char *old_name/ *new_name;
char *old_subject/ *new_subject;
int *old_grade/ *new_grade;
{
if(*old_identification==current_key)
{
copy_corresponding(
new_identification/new_name/
new_subject/new_grade/
*old_identification/
old_name/old_subject/*old_grade);
*allocated=TRUE;
get_master_record(fp/
old_identification/
old_name/old_subject/old_grade);
}
else
*allocated=FALSE;
}

void do_final_status(fp/allocated/
identification/name/subject/grade)

FILE *fp;
boolean allocated;
int identification;
char *name;
char grade;
int
{
if(allocated==TRUE)
put_master_record(fp/identification/
name/subject/grade);
}

void copy_corresponding(
dest_identification/dest_name/
dest_subject/dest_grade/
sou_identification/
sou_name/sou_subject/sou_grade)
int *dest_identification/
sou_identification;
char *dest_name/ *sou_name;
char *dest_subject/ *sou_subject;
int *dest_grade/ sou_grade;
{
*dest_identification=
sou_identification;
strcpy(dest_name/sou_name);
strcpy(dest_subject/sou_subject);
*dest_grade=sou_grade;
}

void syserr( errcode/message/argument)
int errcode;
char *message/argument ;
{
fprintf(stderr/"%s[%2d]:"/prog/
errcode);
fprintf(stderr/message/argument);
exit(errcode);
}

void error( code/message/id)
char code;
char *message;
int id;
{
printf("%c %30s %4d\n"/
code/message/id);
}

اجراي برنامه بازسازي فايل ترتيبي و محتويات فايل هاي داده :

فايل new 2345 ahmad pascal 20
3456 reza c 19
4567 richie c 20
5678 jafar c 14
9999 zzzzzzzzzzzzzzzzzzzz zzzzzzzzzz 9

فايل old 1234ali pascal 15
2345ahmad pascal 18
3456reza c 19
5678jafar c 14
6789jafar pascal 13
9999zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 9

فايل trans 2345cahmad pascal 20
4567Irichie c 20
6789Kjalal pascal 13
9999zzzzzzzzzzzzzzzzzzz

کيفيت مقاله :
عالی خوب متوسط ضعيف


دسترسي تصادفي به فايل ( ورودي خروجي تصادفي ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۸۲۴ مراجعه امروز
۴۴۱۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دسترسي تصادفي به فايل ( ورودي خروجي تصادفي )
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۸/۱۳۸۱ اين مقاله ۱۴۱۹ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

دسترسي تصادفي به فايل ( ورودي خروجي تصادفي )

دربرنامه هايي كه تاكنون نوشته اند،ازسازمان فايل ترتيبي براي ذخيره وبازيابي
اطلاعات استفاده شده است . در اين قسمت چگونگي تشكيل تصادفي مطرح شده و طريقه
دسترسي به اطلاعات موجود در آنها مورد بررسي قرار مي گيرند.
براي دسترسي تصادفي به فايل هااز تابع ()fseek استفاده مي شود.الگوي اين تابع
در فايل stdio.h قرار داشته و بصورت زير مي باشد :
int fseek( FILE *fp/ long num_byte/ int origin)

اساس كار تابع ()fseek به اين صورت است كه : با شروع از يك محل در فايل كه
توسط پارامتر origin مشخص مي شود ، " موقعيت سنج فايل " را به طول num-btbyte
بايت تغيير مكان مي دهد. يعني تغييرمكان " موقعيت سنج فايل " بطور نسبي بوده و
نسبت به محلي كه توسط origin محل 100 فايل را بعنوان مبدا حركت مشخص كند و طول num-byte
برابر با 200 باشد ، " موقعيت سنج فايل " به محل 300 منتقل خواهدشد.
مقاديري كه origin مي تواند بپذيرد در جدول ذيل آمده اند .

( مبداحركت ) origin نام ماكرويي كه بيانگراين مبدااست
ابتداي فايل SEEK_SET
موقعيت فعلي فايل SEEK_CUR
انتهاي فايل SEEK_END

مقادير معتبر پارامتر origin در تابع fseek O

جدول فوق گوياي اين است كه اگرپارامتر origin برابربا SEEK_SET باشد،"موقعيت
سنج فايل " ازابتداي فايل به طول num_byte بايت به طرف انتهاي فايل حركت ميكند.
اگرپارامتر origin برابر باSEEK_CUR باشد،"موقعيت سنج فايل " نسبت به محل خودش
به اندازه num_byte بايت به طرف انتهاي فايل حركت مي كند . اگر پارامتر origin
برابر با SEEK_END باشد، " موقعيت سنج فايل " به اندازه num_byte بايت ، طول
فايل را افزايش مي دهد و سپس به اين محل اشاره مي نمايد .
محلي كه براي هر ركورد در فايل تصادفي درنظر گرفته مي شود، "ناحيه ركورد" نام
دارد . چون هر ركورد در ناحيه مربوط به خودش نوشته مي شود . ممكن است چندين
ناحيه ركورد بين ركوردهاي فايل خالي باقي بماند. به عنوان مثال ،فرض مي كنيم در
يك فايل مربوط به كارمندان ، طول ركورد 100 بوده تعداد كارمندان 5 نفر بوده و
شماره كارمندي آنها 100 ، 500 ، 600 ، 800 ، 900 باشد . پس از قرار گرفتن
مشخصات اين كارمندان درفايل ،99 ناحيه ركورد (99x100 بايت ) قبل از ركورد اول
و 399 ناحيه ركورد قبل از ركورد دوم و ... به هدر مي روند ، اين موارد را شايد
بتوان به عنوان يكي از معايب فايل تصادفي در نظر گرفت ولي معمولا" مكانيزمهايي ي بهبود اين حالت منظور مي شود .

کيفيت مقاله :
عالی خوب متوسط ضعيف


حل يك مسئله ازطريق فايل تصادفي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۸۳۳ مراجعه امروز
۴۴۲۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
حل يك مسئله ازطريق فايل تصادفي
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۸/۱۳۸۱ اين مقاله ۱۴۹۸ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

حل يك مسئله ازطريق فايل تصادفي

در قسمت قبلي چگونگي بازسازي يك فايل ترتيبي بررسي شد . در اين قسمت مساله
بازسازي فايل تصادفي مطرح مي گردد . در بازسازي فايل هاي ترتيبي ، فايل تراكنش
بايدمرتب باشدو داده هاي جديد درفايل ديگري قرار مي گيرند امادر بازسازي فايل هاي
تصادفي ، نيازي به اين دو مورد نيست . در فايل تصادفي ، هر ركورد با يك شماره
بنام شماره ركورد نسبي مشخص مي گردد . بعنوان مثال ، اگر فايلي داراي n ركورد
باشد، شماره ركورد نسبي از 1تا nا خواهند بود . فرمت فايل تراكنش در بازسازي
فايل تصادفي ، همانند فرمت فايل تراكنش در بازسازي فايل ترتيبي است ولي فرمت
فايل داده اصلي بصورت زير مي باشد :

نمره | درس | نام | شماره دانشجويي | وضعيت |

فيلد "وضعيت " مشخص مي كند كه آيا در اين ناحيه ركورد ، داده اي وجود دارد يا
خير . اگر اين فيلد برابر باblank باشد يعني در اين ناحيه داده اي وجود ندارد.
وگرنه ، (در اينجا اگر برابر با 1 باشد) به معني وجود داده در اين ناحيه است .
تشكيل و يا سازماندهي فايل تصادفي به روش هاي مختلفي انجام مي شود ، يك روش
اين است كه شماره دانشجويي هر دانشجو ، شماره ركورد نسبي آن نيزباشد ، بعنوان
مثال ، اگر شماره دانشجويي برابر با 1234 باشد ، شماره ركورد نسبي آن نيز1234
باشد .اين امر موجب مي شود تاناحيه ركورد زيادي ، بلااستفاده باشند . يك راه براي
رفع اين مشكل ، استفاده از يك تابع در هم سازي است و مي توان انواع مختلفي از
تابع درهم سازي راانتخاب نمود . درمثالي كه مادر نظر گرفته ايم ، شماره دانشجويي
بر بزرگترين عدداول كوچكتراز تعداد دانشجويان تقسيم شده ويك واحد به باقيمانده
تقسيم اضافه شده است (تعداد دانشجويان 100 فرض شده و97 عدد اول مورد نظرميباشد)
تا شماره ركورد نسبي بدست آيد . در اين مورد ممكن است ركوردهاي زيادي ، به يك
ناحيه از ركورد مراجعه نمايند: بعنوان مثال مقادير 1234 و 2398 به ناحيه ركورد 71
مراجعه خواهند كرد : 2398 %97 + 1 = 71
1234 %97 + 1 = 71

اگراين ناحيه ركورد قبلا" توسط 1234 اشغال شده باشد ، براي قرار دادن ركوردي
با شماره دانشجويي 2398 در فايل ، ناحيه هاي بعد از 71 جستجو مي شوند تا يك محل
خالي پيدا شده و اين ركورد در آنجا نوشته شود .
دربازسازي فايل تصادفي ،ركوردهاي تراكنش ازفايل مربوطه خوانده شده وتغييرات
مورد نظر در فايل داده اصلي اعمال مي گردند (بدون اين كه نيازي به فايل جديدي
باشد) .

ليست  برنامه  بازسازي  فايل  تصادفي  :                                           # include "stdio.h"
# define READONLY           "r"
# define UPDATE             "r+"
# define FALSE               0
# define TRUE                1

typedef  int                 boolean;

# define NAMESIZE            21
# define SUBJECTSIZE         11
# define TRAILER             9999
# define ABSOLUTE            0
# define PRIME               17

# define INSERT              `I'
# define DELETE              `D'
# define CHANGE              `C'
# define ERROR-               1
# define ABSENT               0
# define OCCUPIED            `*'
# define UNOCCUPIED          ` '
typedf   struct {
int identification ;
char name[NAMESIZE] ;
char subject[SUBJECTSIZE] ;
int  grade ;
} RECORD ;
typedef  struct {
char type ;
RECORD student ;
} TRANSACTION ;
typedef  struct {
char occupied ;
RECORD student ;
} MASTER ;

char *prog ;
boolean get_transaction_record)(;
int rerad_transaction_record)(;
int write_master_record)(;
int get_master_record)(;
int put_master_record)(;

int    address )(;
int    do_initial_status)(;
void   do_final_status)(;
void   apply_transaction)(;
void   copy_corresponding)(;
void   syserr)(/error)(;

main(argc/argv)
int    argc;
char   *argv[ ];

{
FILE      *fpmas/*fptrans ;
int       current_key /
relative_record_number ;
boolean      allocated;
TRANSACTION  transaction;
MASTER       master ;
prog=argv[o];
if(argc !=3)
syserr(1/
"usage :%s filel file2 file3\n"/prog);

else if((fptrans=fopen( argv[1]/
READONLY))==NULL)
syserr(2/"cannot open %s\n" /argv[1];

else if((fpmas=fopen( argv[2]/
UPDATE))==NULL)
syserr(2/"cannot open %s\n"/argv[2];
else
{
get_transaction_record(fptrans/
&transaction );
current_key=choose_next_key(
transaction.srudent.identification);
while(current_key  != TRAILER)
{
relative_record_number=
do_inital_status(
current_key/&allocated/
fpmas/&master );
while(current_key ==
transacrion.srudent.identification)
{
apply_transaction( &allocated/
&transacrion/&master );
get_transaction_record(fptrans/
&transacrion );
}
do_final_atatus( fpmas;
relative_record_number/
allocated/&master );
current_key=choose_next_key(
transaction.student.identification);
}
fclose(fptrans);
fclose(fpmas);
}
}

boolean get_transaction_record(fp/
transaction)
FILS        *fp;
TRANSACTION *transavtion;
{
if( fscanf( fp/"%4d%c%20s%10s%2d"
&transaction->student.identification/
&transaction->type/
transaction->student.name/
transaction->student/subject/
&transaction->student.grade)==5)
return(TRUE);
else

return(FALSE);

}

int read_master_record(fp/
relative_record_number/master)
FILE    *fp ;
int     relative_record_number ;
MASTER  *master ;
{
if(fseek(fp/
(       long )relative_record_number
*sizeof(MASTER)/SEEK_SET )!=0)
{
return(ERROR );
}
else if(fread((char * )master/
sizeof(MASTER)/1/fp )!=1)
{
return(ERROR );
}
else
return(relative_record_number );
}
int write_master_record(fp/
relative_record_number/master)
FILE    *fp;
int     relative_record_number ;
MASTER  *master ;
{
if(fseek(fp/
(       long )relative_record_number
*sizeof(MASTER)/ABSOLUTE )!=0)
return(ERROR );
else if(fwrite((char * )master/
sizeof(MASTER)/1/fp )!=1)
return(ERROR );
else
return(relative_record_number );
}

int get_master_record(fp/key/master)
FILE    *fp ;
int     key ;
MASTER  *master ;
{
int k /relative_record_number ;
relative_record_number=address(key );
for(k=o ; K
     if(read_master_record(fp/
relative_record_number.master)==ERROR)
return(ERROR );
else if(maater->occupied==UNOCCUPIED
return(ABSENT );
else if(key==
master->student.identification)
return(relative_record_number );
else
relative_record_number=
relative_record_number==PRIME ? 1
:              relative_record_number+1 ;
return(ABSENT );
}

int put_master_record(fp/key/master)
FILE     *fp;
int      key;
MASTER   *master;
{
int k / relative_record_number ;
MASTER  temp_master ;
relative_record_number=address(key);
FILE        *fp;
boolean     allocated;
int         relative_record_number;
MASTER      *master ;
{
int record_number=O ;
if(allocated==TRUE)
{
if(relative_record_number  !=ABSENT)
{
master- > occupied=OCCUPIED ;
if(write_master_record(fp/
relative_record_number/
master)==ERROR)
syserr(21/"error writing %s\n"/
"master record");
}
else
{
master- > occupied=OCCUPIED ;
put_master_recors(record_number/fp/
master- > student.identification/
master );
}
}
else
{
master- > occupied=UNOCCUPIED ;
if(write_master_record(fp/
relative_record_number/
master)==ERROR)
syserr(22/
"error writing %s"/"master record");
}
}
void   copy_correspinding(destination/
source)
RECORD   *destination/*source ;
{
destination- >identification=
source- > identification;
strcpy(destination- > name/
source- > name);
strcpy(destination- > subject/
source- > subject);
destination- >grade=soure- > grade;
}
void  syserr( errcode/message/argument)
int    errcode;
char   *message/*argument ;
{
fpritf(stderr/"%s[%2d]: "/prog/
errcode);
fprintf(stderr/message/argument);
exit(errcode);
}
void  error( code/message/id)
char  code;
char  *message;
int   id;
{
printf("%c     %30s  %4d\n"/code/
message/id);

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستگاههاي ورودي خروجي استاندارد ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۱۵ مراجعه امروز
۴۱۳۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستگاههاي ورودي خروجي استاندارد
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۸/۱۳۸۱ اين مقاله ۱۳۸۴ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

دستگاههاي ورودي خروجي استاندارد

وقتي اجراي يك برنامه به زبان C آغازميشود، 5 فايل بطور اتوماتيك بازميشوند
كه اشاره گرهاي آنها در جدول زير مشاهده مي گردند .

اشاره گر دستگاه (فايل ) نام دسگاه (فايل )

stdin
دستگاه ورودي استاندارد (صحفه كليد) stdout
دستگاه خروجي استاندارد (صفحه نمايش ) stderr
دستگاه استانداردجهت ثبت پيامهاي خطا(صفحه نمايش ) stdprn
دستگاه استاندارد چاپ (چاپگر موازي ) stdaux
پورت سري (serial port)

بعنوان مثال ، مجموعه دستورات زير را در نظر بگيريد :

putc(ch/stout );( 1)
printf(stout/%d/%d"/a/b );( 2)
fscanf(stdin/"%d/%d"/&X/&Y );( 3)

دستور (1) موجب مي شود تا كاراكتر ch در صفحه نمايش نوشته شود : دستور (2)
موجب مي شود تا متغيرهاي Xو Yو از صفحه كليد خوانده شوند .
دستگاه هاي استاندارد ورودي خروجي همانطور كه بطور اتوماتيك باز مي شوند،به
طور اتوماتيك نيز بسته خواهند شد و نياز به بستن آنها توسط برنامه نويس نيست .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 1 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۰۵ مراجعه امروز
۴۵۲۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 1
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۱۵۷۲ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 1

براي ياد گرفتن اسمبلي بايد با مبناهاي عدد نويسي ، ساختمان داخلي كامپيوتر
و برنامه نويسي آشنا باشيم .
ما برنامه هايمان را مستقيما با اسمبلر Macro Assembler خواهيم نوشت و گاها از Debug
استفاده خواهيم كرد . بعلاوه چون برنامه هاي حجيم نخواهيم نوشت قالب اكثر
رنامه هاي ما COM. خواهد بود .
براي شروع ابتدا نگاهي به حافظه ميكنيم :

حافظه و آدرس دهي

هر كامپيوتر مبتني بر 8086 داراي حداقل 640 كيلوبايت حافظه است . اين 640
كيلوبايت به قطعات 64 كيلوبايتي تقسيم شده و ما اين قطعات را "قطعه " يا Segment
ميناميم . هر سگمنت هم به خانه هاي تك بايتي ديگري تقسيم شده است .

براي بدست آوردن مقدار يك بايت مشخص از حافظه ما بايد عد مربوط به سگمنت و
همچنين شماره آن بايت در سگمنت ( كه آفست Offset ناميده ميشود ) را بدانيم .
مثلا اگر مقدار مورد نظر در قطعه 0030h(h( يعني عدد در مبناي 16 است ) و آفست 13C4h
باشد ما بايد قطعه اي كه شماره آن 0030h است را بيابيم و بعد در همان قطعه
مقدار باين شماره 13C4 را بخوانيم .
براي نمايش اين حالت بين عدد سگمنت و آفست علامت (:) قرار ميدهيم . يعني
ابتدا عدد مربوط به قطعه را نوشته و سپس عدد آفست را مي آوريم :
Segment:Offset

مثال : 4D2F:َ9000 **
هميشه در آدرس دهي ها از اعداد مبناي 16 استفاده ميكنيم .

| | |

| CConvertional | 1 Segment=64K | | | | | Memory

| | | | | |
| | | |
| | | |

ثباتها Registers

رجيسترها مكان هائي از CPU هستند كه براي نگهداري داده ها (DATA) و كنترل اجراي
برنامه بكار ميروند . ما ميتوانيم آنها را مقدار دهي كرده و يا بخوانيم و يا
باتغيير محتواي آنها CPU را مجبور به انجام يك پروسه (رويه يا Procedure) كنيم

دسته اي از رجيسترها كه ما انها را "ثباتهاي همه كاره يا همه منظوره " ميخوانيم
و شامل AX/BX/CX/DX هستند ، براي انتقال مقادير بين رجيستر ها و CPU بكار ميروند.
اين ثباتها را ميتوانيم به هر نحوي تغيير دهيم و مقاديري را به آنهاارسال كنيم .

ثباتهاي ديگري هم كه نام ميبريم كاربردهاي خاص خودشان را دارند و براي مقدار دهي
آنها بايد قواعد خاصي (كه توضيح خواهيم داد) را بكار بريم .

ميكند عدد كه در اين ثبات وجود دارد شماره يك قطعه است و CPU براي يافتن DS : مخفف Data Segment . محل نگهداري متغييرها و ثابتهاي برنامه را مشخص
مقادير لازم به آن قطعه مراجعه ميكند . CS

: مخفف Code Segment است و آدرس قطعه اي كه برنامه در آن قرار گرفته را
نشان ميدهد . ES

: اين يك ثبات كمكي است و معمولا در آدرس دهي ها شماره قطعه را نگهداري
ميكند . DI

DataIndex:Dبا DS/ESا مرتبط است و عدد آفست را نگهداري ميكند . IP

: اين رجيستر معلوم ميكند كه برنامه در حال اجرائي كه در CS قرار دارد از
كدام بايت قطقه (يعني كدام آفست ) شروع ميشود . به همين دليل هميشه اين دو
ثبات را با هم و بصورت CS:IP نشان ميدهند.
و ...

تمام رجيسترهاي فوق 16 بيتي (دوبايتي ) هستند و اعداد دوبايتي را نگهداري ميكنند.
ثباتهاي همه منظوره به دو نيم ثبات تك بايتي تقسيم ميشوند . بايت بالائي ب
نماد H و بايت پائيني با نماد L نشان داده ميشود . مثلا ثبات AX داراي دو نيم -
ثبات AH/AL است :
| AH - 8 Bit | AL -8 Bit |

تمرين :
براي ديدن رجيسترها در DOS، DEBUG، را اجرا كنيد و فرمان R را صادر كنيد :

D:\MASM>DEBUG
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17AA ES=17AA SS=17AA CS=17AA IP=0100 NV UP EI PL NZ NA PO NC
17AA:0100 0F

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 10 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۰۸ مراجعه امروز
۴۵۲۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 10
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۱۱۱۹ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 10

در اين قسمت يك تمرين ديگر با هم انجام ميدهيم و برنامه اي مينويسيم كه تعداد 200
رنگ از 256 رنگ موجود در حالت 320x200 گرافيكي را نمايش دهد .
تابع شماره 00h از وقفه 10h مربوط به تعيين حالت نمايش است . كد مربوط به
حالت صفحه نمايش در ثبات AL قرار گرفته و وقفه فراخواني ميشود:

شماره تابع برابر AH=00h
حالت صفحه نمايش با استفاده از جدول AL= INT 10h

حالت صفحه نمايش در AL از جدول مخصوص موجود در كتابهاي اسمبلي بدست مي آيد.
كد مربوط به حالت 256C َ320x200 برابر 13h است بنا براين AL را برابر 13h قرار
ميدهيم .
براي نمايش و روشن كردن يك نقطه (Pixel) در حالت گرافيكي از تابع 0Ch همين
وقفه استفاده ميكنيم . يعني شماره ستون را در CX ، سماره سطر را در DX و شماره
رنگ را در AL قرار داده و وقفه را اجرا ميكنيم . براي اينكه از ستون 199 تا ستون
شماره صفر نقطه روشن كنيم ، CX را برابر 319 قرار داده و با دستور LOOP نقاط را
در يك سطر روشن ميكنيم .

MOV CX/319 ; COLUMN 319 = START COLUMN
COL:
INT 10H ; CALL INTERRUPT 10H
LOOP COL

سپس DX يا همان شماره سطر را يكواحد افزايش ميدهيم و مقدار آن را با 199 مقايسه
ميكنيم (چون از 0 تا 199 سطر داريم ) و اگر برابر نبود دوباره عمليات بالا را
انجام ميدهيم .

بعد از اينكه اين عمليات انجام شد، تابع 00h از INT 16h را فراخواني ميكنيم تا
منتظر دريافت يك كليد از صفحه كليد شود . به اين ترتيب ميتوانيم نتيجه برنامه
را مشاهده كنيم و كليدي را براي اتمام برنامه بزنيم .
در نهايت بايد حالت صفحه نمايش را به مود متني برگردانيم .
براي اينكار از همان تابع تعيين مود نمايشي استفاده ميكنيم و حالت صفحه نمايش
كه با AL مشخص ميشود را برابر 3 قرار ميدهيم .
برنامه را با روش گفته شده تايپ و كامپايل كنيد . اگر از توربو اسمبلر استفاده
ميكنيد با فرمان ASM/T.َTASM VGA256 آن را به فرم COM. ترجمه كنيد.

. MODEL SMALL
. CODE
ORG 100H
START :
MOV AH/00H
MOV AL/13H
MOV BX/00H ; PAGE NUMBER
INT 10H ; SET TO 320x200 256 COLORS

MOV AH/0CH ; PUTPIXEL FUNCTION
MOV AL/25 ; COLOR #25
MOV DX/0 ; ROW 0
ROW :
MOV CX/319 ; COLUMN 319 = START COLUMN
COL :
INT 10H ; CALL INTERRUPT 10H
LOOP COL ; DOWN TO CX=0
INC DX ; DX=DX+1
INC AL ; AL=AL+1( COLOR NUMBER )
CMP DX/199 ; IF DX=199
JNZ ROW ; ELSE JUMP TO ROW

MOV AH/00H
INT 16H

MOV AH/00H ; VIDEO MODE SET
MOV AL/03H ; 80x25 16 COLORS
INT 10H ; CALL INT .10H
INT 20H ; TERMINATE PROGRAM
END START

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 11 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۱۱ مراجعه امروز
۴۵۲۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 11
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۱۰۲۲ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 11

حتما با ثابتها در زبانهائي مثل پاسكال آشنائي داريد . بعنوان مثال با جمله
ے Const MaxLen=1024; ، ثابتي بنام MaxLen تعريف شده و مقدار آن برابر 1024 قرار
ے قرار ميگيرد . پس از آن كامپايلر در هرجا كه MaxLen را مشاهده كند عدد 1024 را
بجاي آن قرار ميدهد .
در زبان اسمبلي براي تعريف يك ثابت از معرفه EQU به شكل زير استفاده ميكنيم

مقدار EQU نام ثابت
مثلا : MaxLen EQU 1024
ے به اين ترتيب اسمبلر هميشه بجاي MaxLen عدد 1024 را قرار ميدهد . بهمين دليل
ثابتهاي برنامه را بايد قبل از جمله CODE. بنويسيم . مثال :

. MODEL SMALL
SECTORS EQU 18
SIDES EQU 2
. CODE
:
:

ے به اين خاطر ثابتها را قبل از CODE. تعريف ميكنيم كه در برنامه كامپايل شده اثري
از نام ثابت نبوده بلكه مقدار هر ثابت در جاي لازم قرار گرفته است .
مثال :

. MODEL SMALL
BELL EQU 7
. CODE
ORG 100H
MOV AH/0EH
MOV AL/BELL
INT 10H
INT 20H
END

متغيرها

ے از متغيرها براي نگهداري موقتي داده ها استفاده ميكنيم . مثلا در زبان پاسكال
ے ميتوانيم با عبارت Var يك متغير تعريف كنيم مثل Var Buffer:Byte; و در زبان
سي مثل unsigned char Buffer; .
ے متغيرها در زبان اسمبلي بايد حتما در داخل قطعه داده (DS) تعريف بشوند و در
ے برنامه هاي COM. هم از آنجائي كه قطعه داده ها و كد يكي است ميتوانيم در قطعه كد
نيز تعريف كنيم .
ے براي تعريف يك متغير بايد بعد از نام آن يكي از عبارات ..DB/DW/DD/ را
ے بياوريم . DB مشخصه نوع بايت ،DW مشخصه نوع Word (دوبايتي ) و DD مشخصه نوع
(Double Word) 4 بايتي است .
مثلا :

. CODE
SIZE DW 1024
BELL DB 7

ے در اين مثال Size يك متغير دو بايتي بوده و مقدار اوليه ان 1024 است و BELL نيز
يك متغير تك بايتي با مقدار 7 ميباشد .
ے اگر نميخواهيم به متغير مقدار اوليه بدهيم ، ميتوانيم از علامت (?) بجاي مقدار
استفاده كنيم مانند : MaxLen DW ?

ے براي تعريف يك رشته كاراكتري از معرفه DB استفاده كرده و محتواي رشته را داخل
('') يا ("") قرار ميدهيم . مثلا :

MSG DB "ASSEMBLY / A QUICK LOOK ! "

ے در اين مثال MSG يك متغير كاراكتري است . در اسمبلي ميتوانيم از كد اسكي
ے كاراكتر ها نيز استفاده كنيم . مثلا اگر در تعريف DB بخواهيم كدهاي اسكي 13و 10
را به MSG اضافه كنيم ميتوانيم با كاما اين كار را انجام دهيم :

MSG DB "ASSEMBLY / A QUICK LOOK ! "/13/10

يا : MSG DB "ASSEMBLY / A QUICK LOOK ! "/0Ah/0Dh

يا حتي : MSG DB "ASSEMBLY / A QUICK LOOK ! "/0Ah/0Dh/'$'

اين تركيبها همه يك رشته كاراكتري معرفي ميكنند .

براي تعريف آرايه ها نيز از روشي مشابه و به شكل زير استفاده ميكنيم :

(مقدار اوليه )DUP تعداد عناصر DB/DW/DD نام متغير
مانند: BUFFER DB 1024 DUP(0 )

كه ارايه اي يك كيلوبايتي تعريف كرده و همه عناصر آن را با 0 پر ميكند.
اگر نخواهيم مقدار اوليه اي در نظر گرفته شود از ? استفاده ميكنيم .
مانند: BUFFER DB 1024 DUP(? )

و براي تعريف يك آرايه حرفي بايد با يك حرف يا عبارت آن را پر كنيم : BUFFER DB 1024 DUP("A" )

و حتي : BUFFER DB 1024 DUP("STACK" )

ے گفتيم كه متغيرها هميشه (در برنامه هاي COM.) در قطعه كد و بعد از CODE. نوشته
ے ميشوند ، بنا براين اسمبلر هميشه سعي خواهد كرد كه آنها را بصورت يك كدماشين
ے قابل اجرا تفسير كند. به همين دليل هميشه بايك دستور JMP از روي آنها پرش
ميكنيم . مثال :

. MODEL SMALL
RDISK EQU 2
. CODE
ORG1 100H
START :
JMP MAIN
BUFFER DB 512 DUP(0 )
MSG DB "DISK DUP."/13/10/'$'
MAIN :

مجموعه كدهاي اجرايي برنامه :
: END START

همانطور كه ميبينيد با دستور JMP MAIN از قسمت تعريف داده ها پرش كرده ايم .

در قسمت بعد نحوه استفاده از متغيرها و بافرها (Buffers) را مطالعه
ميكنيم . با همين معلومات برنامه اي براي نمايش محتواي سكتوهاي ديسك
مينويسيم و پيغامهاي لازم را به آن اضافه ميكنيم .

پيروز باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 12 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۱۴ مراجعه امروز
۴۵۳۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 12
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۹۰۵ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 12

در اين قسمت نحوه دسترسي به مقادير متغير ها را ياد ميگيريم .
ے وقتي كه ميخواهيم مقدار يك متغير را به يك متغير يا ثبات ديگر منتقل كنيم بايد
ے به اندازه آن توجه داشته باشيم . مثلا اگر متغيري بصورت LOCATE DB 10 تعريف كرده
ے باشيم ، به دليل تك بايتي بودن ، نميتوانيم آن را به يك ثبات كامل مثل AX يا
متغير دوبايتي كه با DW تعريف شده است ارسال كنيم .
ے اما انتقال آن به يك نيم ثبات مثل ALيا AHا و ... مجاز است مانند . MOV BH/LOCATE

ے از متغيرها بيشتر براي نگهداري موقت داده ها استفاده ميشود . مثلا وقتي كه
ے برنامه اي براي كار با قطاعهاي ديسك مينويسيم ، بايد يك محل موقتي براي ذخيره
ے محتواي قطاع هاي خوانده شده ايجاد كنيم . در اين موقع يك متغير به شكل (ترجيحا)
آرايه تعريف ميكنيم .
ے وقتي به اين شكل با متغيرها برخورد ميشود، به دانستن آدرس آن نياز پيدا ميكنيم
فرض كنيد ميخواهيم جمله A QUICK START TO ASSEMBLY PROGRAMMING را چاپ كنيم .
در قدم اول بايد متغيري تعريف كرده و اين جمله را داخل آن قرار دهيم .
پس : MSG DB 'A QUICK START TO ASSEMBLY PROGRAMMING'/13/10/'$'

ے اعداد 13وَ10 انتهاي رشته براي انتقال مكان نما به سطر بعد هستند و كاراكتر '$'
ے از اين جهت وجود دارد كه تابع چاپ رشته انتهاي رشته كاراكتري را با بودن $
تشخيص ميدهد.
ے براي چاپ رشته كاراكتري راه هائي وجود دارد كه يكي از آنها استفاده از تابع 9h
مربوط به INT 21h ميباشد .
براي فراخواني آن بايد به اين صورت رجيستر ها را پر كنيم : AH=09H

آدرس رشته كاراكتري DS:DX = INT 21H

ے عبارت DS:DX نشان ميدهد كه مقدار قطعه (Segment) رشته كاراكتري ، يعني آن قطعه
ے اي كه متغير تعريف شده در آن قرار گرفته است ، را بايد در DS قرار بدهيم . به
همين صورت نيز مقدار آفست (Offset) آن را به DX انتقال ميدهيم .
براي بدست آوردن شماره قطعه يك متغير از عملگر SEG استفاده ميكنيم .
ے مثلا براي بدست آوردن شماره قطعه MSGاز MOV AX/Seg MSGز استفاده ميكنيم . اين
دستور شماره سگمنت MSG را پيدا كرده و در AX قرار ميدهد .
براي بدست آوردن شماره آفست هم از OFFSET استفاده ميكنيم مثلا MOV DX/OFFSET MSG
پس براي چاپ رشته MSG بايد به اين صورت عمل كنيم :

MOV AH/09H
MOV DX/OFFSET MSG
INT 21H

ے اين قطعه كاري كه ما ميخواهيم را انجام ميدهد و اگر دقت كنيد متوجه ميشويد كه
ے اصلا شماره قطعه (Segment) را محاسبه نكرده ايم . علت اينست كه متغير ما به دليل
ے COM. بودن برنامه در Code Segment ( كه با CODE. مشخص ميشود) تعريف شده پس خود
ے بخود DS حاوي مقدار سگمنت آن هست . ( باز هم ياد آوري ميكنيم كه CS حاوي شماره
ثبات كد و DS حاوي ثبات داده ها است و در برنامه هاي COM. مقدار برابر دارند)

ے يك دستور خلاصه براي بدست آوردن عدد آفست وجود دارد بنام LEA .كل كاري كه اين
ے دستورالعمل انجام ميدهد اينست كه ديگر احتياج به نوشتن OFFSET نخواهد بود . به
عنوان مثال MOV DX/OFFSET MSGبا LEA DX/MSGا برابر است .
با اين تفاسير كل برنامه به اين شكل خواهد بود .

. MODEL SMALL
. CODE
ORG 100H
START :
JMP MAIN ; skip to main codes
MSG DB 'A QUICK START TO ASSEMBLY PROGRAMMING'/13/10/'$'
MAIN :
LEA DX/MSG ; get MSG offset
MOV AH/09 ; write string function
INT 21H ; call interrupt 21h
INT 20H ; terminate program
END START

تمرين :
ے براي اينكه تمرين بهتري داشته باشيم ، ميخواهيم خودمان و فقط با استفاده از وقفه
ے مربوط به چاپ كاراكتر همين جمله را چاپ كنيم . قبلا گفتيم كه تابع 0Eh از وقفه
ے 10h يك كاراكتر را در محل مكان نما چاپ كرده و مكان نما را يك خانه به راست
انتقال ميدهد. ميخواهيم رشته كاراكتري بالا را تا رسيدن به علامت $ چاپ كنيم .
ے بهترين كار اينست كه عدد آفست را در BX قرار بدهيم . در اينموقع آفست اولين
ے كاراكتر در BX است . مقدار داخل اين آفست را بصورت MOV al/[bx] به ثبات AL
ے منتقل كرده و بعد چاپ ميكنيم . براي كاراكتر بعدي يكواحد به BX اضافه ميكنيم و
ے دوباره همان كارهاي قبلي ... . اين عمليات را بايد تا رسيدن به كاراكتر '$' ادامه
بدهيم .
ے ** اين برنامه را خودتان و بدون توجه به راه حل ارائه شده بنويسيد و فايل COM.
آن را بسازيد.

. MODEL SMALL
. CODE
ORG 100H
START :
JMP MAIN ; jump to MAIN
MSG DB 'A QUICK START TO ASSEMBLY PROGRAMMING'/13/10/'$'
MAIN :
LEA BX/MSG ; get MSG offset
MOV AH/0EH ; write char function
LOOP :_
MOV AL/[BX] ; move [BX] to AL: charactre code
CMP AL/'$' ; if al is equal with '$'
JE END _; then jump to END _
INT 10H ; otherwise call interrupt 10h
INC BX ; BX=BX+1
JMP LOOP _; jump to next caharcter
END :_
INT 20H ; terminae program
END START

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي يلد بگيريم - 13 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۱۷ مراجعه امروز
۴۵۳۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي يلد بگيريم - 13
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۷۵ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي يلد بگيريم - 13
در اين قسمت يك تمرين جديد انجام داده و بوسيله آن تجربيات خودمان را افزايش
ميدهيم . اين تمرين اولين برنامه ما هست يك عمليات سطح پائين سيستم ، يعني
دسترسي به ديسك ، را انجام ميدهد .

تابع شماره 2(AH=2() از وقفه 13h كه وقفه ديسك ميباشد ، براي خواندن سكتورهاي
ديسك بكار ميرود . وقتي شماره هد، شيار،سكتور و ... را مشخص كرده و وقفه را
فراخواني نموديم ، محتواي قطاع خوانده شده در محلي كه با جفت ثبات ES:BX مشخص
ميشود قرار ميگيرد. به همين دليل ما يك آرايه تعريف ميكنيم وآدرس آن را در ES:BX
قرار ميدهيم تا اطلاعات خوانده شده در آن قرار بگيرد. BUF DB 512 DUP(0)

در اين مثال ما ميخواهيم برنامه اي بنويسيم كه محتواي قطاع بوت كننده ديسكي را
خوانده و نمايش دهد . چون ميخواهيم يك سكتور را بخوانيم و اندزه هر قطاع 512
بايت است ، پس آرايه اي با 512 عنصر تك بايتي تعريف كرده ايم .
در قدم بعدي شماره شيار (0-79) را در CH، شماره قطاع (1-18) را در CL، شماره
درايو را در DL(.../.:0=A ) ، رويه ديسك را در DH(0=1st Side() و تعداد قطاعهائي
كه بايد خوانده شوند را در AL قرار ميدهيم .

MOV AX/0201H
MOV CH/0 ;TRACK NUMBER
MOV CL/1 ;SECTOR NUMBER
MOV DH/0 ; SIDE #1
MOV DL/0 ; 0=A / 1=B /( ...DRIVE NUMBER )

حالا بايد آدرس بافر تعريف شده (BUF) را به ES:BX منتقل كنيم . گفتيم كه براي
بدست آوردن شماره سگمنت هر متغير از Seg و براي بدست آوردن مقدار آفست از Offset
استفاده ميكنيم . چون برنامه ما COM. است ، پس عدد سگمنت بطور خودكار در
ثبات DS هست و احتياجي به يافتن آن نداريم . بلكه فقط بايد آن را به ES منتقل
كنيم .
گفتيم كه نميتوانيم ثبات ESو DSو را مستقيما و با MOV به هم منتقل كنيم ، بلكه
بايد از يك ثبات همه منظوره مثل AX كمك بگيريم . بنا براين و براي اينكه مقدار
فعلي ثبات AX از بين نرود، ابتدا AX را در Stack قرار داده و مقدار DS را در آن
قرار ميدهيم : PUSH AX ; SAVE AX
MOV AX/DS

و پس از آن محتواي AX را به ES داده و دوباره مقدار AX را از پشته POP ميكنيم : MOV ES/AX
POP AX

پس از آن با دستور LEA مقدار آفست BUF را بدست مي آوريم : LEA BX/BUF

و در نهايت فراخواني اينتراپت 13h. INT 13H

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

MOV AL/BUF[BX]
CMP AL/32
JB SKIP
:
:
SKIP :
MOV AL/'.'
INT 10H
:
:

ليست كامل :

.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
BUF DB 512 DUP(0)
MAIN:
MOV AX/0201H
MOV CH/0 ;TRACK NUMBER
MOV CL/1 ;SECTOR NUMBER
MOV DH/0 ; SIDE #1
MOV DL/0 ; 0=A / 1=B /( ...DRIVE NUMBER)
PUSH AX ; SAVE AX
MOV AX/DS
MOV ES/AX
POP AX
LEA BX/BUF
INT 13H

MOV BX/1
MOV AH/0EH ; WRITE CHAR.
PRINT:
MOV AL/BUF[BX]
CMP AL/32
JB SKIP
INT 10H
JMP CONT
SKIP:
MOV AL/'.'
INT 10H
CONT:
INC BX
CMP BX/513
JNZ PRINT
INT 20H
END START

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 14 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۲۰ مراجعه امروز
۴۵۳۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 14
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۳۶ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 14
عملگرهاي بيتي

عملگرهاي بيتي مانند عملوندهاي حسابي هستند با اين تفاوت كه روي بيت ها كار
ميكنند. اين عملگرها عبارتند از : ... AND/OR/XOR/SHR/SHL/RCL/RCR/ .

عملگر AND : اين اپراتور بيتهاي دو عدد(متغير) را با هم AND كرده و حاصل را در
متغير (يا ثبات ) سمت چپ قرار ميدهد . اگر فرض كنيم كه هميشه 1 بودن بيت به
معناي Trueو 0و بودن آن به معناي False است ، AND هميشه در صورتيكه هر دوبيت
مقايسه شونده 1 باشند، حاصل 1يا Trueا را بر ميگرداند .
جدول ارزشي AND :
X | Y | X and Y |

1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |

پس وقتي ما عملوند AND را با دو رجيستر بكار ميبريم ، بصورتي كه گفته شد بيتها
با هم مقايسه شده و حاصل مقايسه در محل متناظر بيتها در ثبات سمت چپ قرار
ميگيرند . مثلا اگر دستور AND Ah/Dh را اجرا كنيم ، حالتي نظير شكل زير را داريم :
AH : 01101010
DH : 01111101

AH :AH AND DH : 01101000

به نتيجه بدست آمده توجه كنيد .
هر وقت كه بخواهيم بيت هاي خاصي از يك رجيستر را 0 كنيم ، يك عدد باينري كه
همه بيتهاي آن ، بجز بيتهاي مورد نظر 1 هستند را در نظر گرفته با رجيستر مورد نظرAND
ميكنيم .مثلا اگر بخواهيم بيتهاي دوم و سوم ثبات AX را صفر كنيم : AND AX/11111001b

عملگر OR :
اين عملوند بيتهاي دو عدد را با هم مقايسه كرده و اگر يكي از آن دو 1 بود ، بيت
متناظر در ثبات سمت چپ را 1 ميكند . مثلا با دستور OR AH/DH بيتهاي AHبا DHا
مقايسه شده و هر دو بيت متناظر كه با هم 0 بودند ، بيت تناظر در AHهم 0 ميشود
AH : 01101010
DH : 01111100

AH : AH OR DH : 01111110

هرگاه كه بخواهيم بيت هاي خاصي از يك متغير يا رجيستر را 1 كنيم ، يك عدد
باينري كه همه بيتهاي آن غير از بيتهاي مورد نظر 0 هستند در نظر گرفته و با ثبات
مورد نظر OR ميكنيم . مثلا اگر بخواهيم دو بيت پائين AHرا 1ا كنيم منويسيم : OR AH/00000011b

عملگر : XOR
عملوند XOR تنها در صورتي نتيجه 1 ميدهد كه دو بيت مقايسه شونده غيرهم ارزش
باشند . يعني يكي 1 و ديگري 0 باشد .
بعنوان مثال با اجراي XOR AH/DH اين عمليات روي بيتها انجام ميشود
AH : 01101010
DH : 01111100

AH : AH XOR DH : 11101001

وقتي بخواهيم يك مقدار ثبات را برابر صفر قرار بدهيم ، معمولا از آن را با خودش XOR
ميكنيم . مثلا XOR CX/CX محتواي ثبات CX را برابر 0 قرار ميدهد .

عملگرهاي SHRو SHLو :

اين عملگرها، بيتها را به راست و چپ شيفت ( انتقال ) ميدهند .
SHR Reg.nnum و SHL Reg.nnum
.Reg اسم يك ثبات است مثلا AXو numو معلوم ميكند كه چند بيت بايد به طرف
راست يا چپ انتقال پيدا كند . مثلا SHR AX/6 بيتهاي AXرا 6ا واحد به راست
انتقال داده و بيتهاي چپ را با 0 پر ميكند . AX :10100010
AX :SHR AX/4 : 00001010

SHL
هم عكس اين عمل را انجام ميدهد . يعني بيتها را به چپ شيفت داده و از
طرف راست با 0 پر ميكند . AX :10100010
AX :SHR AX/4 : 00100000

مثال : اگر بخواهيم كه محتواي نيم ثبات CL را به نيم ثبات CH منتقل كنيم ،
كافيت كه CXرا 8ا بيت به سمت چپ شيفت بدهيم . يعني SHL CX/8

CL CH | 10110100 | 00101101 |

محتواي اوليه CX CX

CL CH | 00101101 | 00000000 |

محتواي CX بعد از SHL CX/8
انتقال

ادامه اين بحث را در قسمت بعد انجام ميدهيم .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 15 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۲۳ مراجعه امروز
۴۵۳۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 15
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۵۷ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 15

در قسمت قبلي چند عملگر بيتي را ديديم . در اين قسمت هم اين مبحص را دنبال
ميكنيم .
عملگر Not : عملوند Not ارزش همه بيتهاي يك بايت يا كلمه را برعكس ميكند .
يعني تمام بيتهاي 1را 0ا و تمام بيتهاي 0را 1ا ميكند . بعنوان مثال اگر AH حاوي
مقدار 10101101 باشد، بعد از اجراي Not Al ، محتواي AL بصورت 01010010 خواهد
بود.

جدول ارزشي Not Not X X N
F | T
T | F

عملگر Neg . اين اپراتور معمولا با Not اشتباه ميشود در صورتي كه كمتر شباهتي بين
آنها وجود دارد . Neg ارزش عددي يك عدد علامتدار را برعكس ميكند . يعني يك عدد
منفي را مثبت ميكند و برعكس . در اعداد علامتدار ( همانطور كه بعدا هم خواهيم
ديد )، اولين بيت سمت چپ ( بيت هشتم ) بيت علامت است . 1 بودن آن نشاندهنده
منفي بودن و 0 بودن آن نشان دهنده مثبت بودن است .
عملگر Neg با عكس كردن بيت علامت ، ارزش عدد را عكس ميكند .
اين عملوند را در مبحث اعداد علامتدار مفصلا ميخوانيم .
مثال : ميخواهيم برنامه اي بنويسيم كه تمام حروف كوچك يك عبارت را به حروف
بزرگ تبديل كند . از نظر مقدار عددي ، تفاوت حروف كوچك و بزرگ در اينست كه
بيت پنجم در حروف بزرگ برابر 0 و در حروف كوچك 1 است . مثلا كداسكي حرف a
به باينري برابر 01100001 و كد A برابر 01000001 است . پس برنامه اي مينويسيم
كه تمام كاراكترهاي رشته كاراكتري مورد نظر را خوانده و بيت پنچم آنها را 0 كند
. در قسمت قبلي ديديم كه براي 0 كردن يك بيت ، يك عدد باينري كه تمام بيتهاي
آن 1 ، و بيت مورد نظر (براي 0 كردن ) 0 باشد را با عدد مورد نظر AND ميكنيم .

. MODEL SMALL
. CODE
ORG 100H
START :
JMP MAIN
MSG DB ' this is an example/ ..$'
MAIN :

بدست آوردن آدرس رشته ; LEA BX/MSG LOOP :_

قرار دادن كاركتر در AL ; MOV AL/[BX]
آيا كاراكتر $ است ? ; CMP AL/'$'
بله ، به MAIN برو ; _JZ END
بيت پنجم را صفر كن ; AND [BX]/11011111B
يكواحد به BX اضافه كن - كاراكتر بعدي ; INC BX JMP LOOP _;
END :_

قرار دادن آفست رشته در DX ; MOV DX/BX
تابع 9 براي نمايش رشته ; MOV AH/9
قفه 21h ; INT 21H
پايان برنامه ; INT 20H END START

معمولا برنامه هائي كه پيغامهاي خود را كد ميكنند ( مثل ويروسها ) از اين روش يا
روشي مشابه براي Decode كردن پيغامها استفاده ميكنند .

مثال :
بايت وضعيت صفحه كليد كه مربوط به وضعيت كليد هاي كنترلي CapsLock/NumLock
در بايوس هاي AT/PS2 در آدرس 0017h:0040h قرار دارد.
بيتهاي اين بايت نشان ميدهد كه كدام كليد فعال است . 1 بودن به معني روشن بودن
و 0 به معني خاموش بودن آن است . در مثال زير بيت ششم براي كليد CapsLockرا 1ا
ميكنيم تا Capslock روشن شود .

.MODEL SMALL
.CODE
ORG 100h
START:
PUSH ES
MOV AX/0040h
MOV ES/AX
MOV AL/ES:[17h]
OR AL/32
MOV BYTE PTR ES:[17h]/AL
POP ES
MOV AH/1
INT

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 16 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۲۶ مراجعه امروز
۴۵۴۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 16
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۹۰۳ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 16

ضرب و تقسيم با 8088
8088
براي ضرب دو عدد از دستورالعمل MUL با كد ماشين F7h استفاده ميكند .
اين دستورالعمل روي كلمه ها ( دوبايتي ها) كار ميكند . بنا براين حاصلضرب دو عدد16
بيتي ميتواند 32 بيتي يا 2 كلمه اي باشد . به همين دليل براي ذخيره نتيجه ضرب
يك ثبات تنها كافي نيست . MUL
هميشه محتواي يك ثبات را در محتواي ثبات AX ضرب كرده و حاصلضرب را در
جفت ثبات DX:AX ذخيره ميكند . به اينصورت كه دوبايت بالا را در DX و كلمه
پائين را در AX قرار ميدهد. وقتي از حساب 8088 صحبت ميكنيم ، نوشتن DX:AX به
معني نگهداري عدد 32 بيتي در آن جفت ثبات است نه محلي از حافظه كه با DX:AX
مشخص ميشود.
براي ضرب محتواي يك رجيستر در AX ( هميشه در AX ضرب ميشود) از MUL بصورت زير
استفاده ميكنيم : MUL Register

كه منظور از رجيستر يك ثبات مانند DXيا BXا است .
چون هميشه محتواي رجيستر مورد نظر در AX ضرب ميشود، نيازي به نوشتن AX نداريم .

بعنوان مثال اگر AX برابر 100hو BXو برابر 7C4Bh باشد ، حاصل MUL BX برابر 7C4B00h
ميشود و چون اين مقدار يك عدد 32 بيتي است ، در جفت ثبات DX:AX
نگهداري ميشود به شكلي كه DX=7C4Bhو AXو برابر 0000h باشد.

عمل تقسيم هم به شيوه مشابهي انجام ميشود.
وقتي كه دوعدد را به هم تقسيم ميكنيم حاصل تقسيم ( قسمت صحيح يا خارج قسمت ) در AX
و باقيمانده در DX قرار ميگيرد.

براي تقسيم كردن دو ثبات به هم ، از دستور DIV استفاده ميكنيم . وقتي از DIV براي
تقسيم استفاده ميكنيم ، CPU محتواي جفت ثبات DX:AX را بر محتواي ثبات ذكر
شده تقسيم ميكند بنا براين در هنگام استفاده از DIV فقط نام همان ثبات را ذكر
ميكنيم . مثلا اگر بخواهيم ( برعكس ضربي كه در بالا انجام داديم ) عدد 7CB400h را
بر 100h تقسيم كنيم ، BX را برابر 100h و جفت ثبات Dx:Ax را برابر 7CB4100h
قرار ميدهيم . براي اينكار عدد 7CB4100h را به دو نيمه 007Ch و 4100h تقسيم كرده
و در DXو AXو قرار ميدهيم . (/ DX:007Ch AX=4100h) . در نهايت با DIV BX عمل
تقسيم را انجام ميدهيم .
بعد از انجام تقسيم 7C4Bhدر AXر و 0000hدر DXر قرار ميگيرد.

مثال براي ضرب

براي ديدن مطالب گفته شده ، همان دو عدد 100hو 4CBhو را با ديباگ در هم ضرب
ميكنيم .
بنا براين Debug را اجرا كرده و سطرهاي زير را وارد ميكنيم .

17AA:0100 mov ax/100
17AA:0103 mov bx/4cb
17AA:0106 mul bx
17AA:0108 int 20
17AA:010A
- t

پس از وارد كردن برنامه بالا ، از دستور T ( مخفف Trace) كه براي رديابي اجراي
برنامه بكار ميرود استفاده ميكنيم . با هربار اجراي اين دستور يك خط از برنامه
اجرا شده و محتواي ثباتها بعلاوه وضعيت فلاگها نمايش داده ميشوند.

در اين سطر محتواي AX برابر 0100 است

AX=0100 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17AA ES=17AA SS=17AA CS=17AA IP=0103 NV UP EI PL NZ NA PO NC
17AA:0103 BBCB04 MOV BX/04CB
- t

محتواي BX برابر 0$CB شده ...

AX=0100 BX=04CB CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17AA ES=17AA SS=17AA CS=17AA IP=0106 NV UP EI PL NZ NA PO NC
17AA:0106 F7E3 MUL BX
- t

بعد از انجام ضرب ، محتواي DX برابر 4 و محتواي AX برابر CB00 شد ه . بنابراين
جفت ثبات DX:AX مقدار 4CB00 را نشان ميدهد . يعني همان عددي كه قبلا هم بدست
آورده بوديم .

AX=CB00 BX=04CB CX=0000 DX=0004 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17AA ES=17AA SS=17AA CS=17AA IP=0108 OV UP EI PL NZ NA PO CY
17AA:0108 CD20 INT 20
- t
- q

تمرين :

همين عمل را براي تقسيم نيز با ديباگ انجام بدهيد .

در قسمت بعدي نوشتن رويه ها و برنامه هاي واحدي را
ياد ميگيريم .

پيروز باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 17 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۲۹ مراجعه امروز
۴۵۴۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 17
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۳۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 17
رويه ها (Procedures) .

در برنامه نويسي با زبانهاي سطح بالا ، با زيربرنامه ها يا پروسيجر ها آشنا شديم .
مثلا در زبان بيسيك به آنها Subroutine ميگوئيم يا در زبان پاسكال Procedure و..

رويه ها نوشت برنامه هاي واحدي را ممكن و آسان ميسازند و از تكرار كدهاي
برنامه جلوگيري ميكنند .

در زبان اسمبلي براي ساختن يك زيربرنامه از اعلان Proc در مقابل نام آن استفاده
ميكنيم . مثلا براي تعريف رويه Print آن را با Print Proc تعريف ميكنيم .
در واقع Proc يك برچسب ( از نوع Near) است كه اسمبلر توجه بيشتري نسبت به
يك برچسب عادي به آن ميكند.

وقتي يك اعلان زيرروال را تعريف كرديم ، كد اجرائي آن را مينويسيم . مثلا اگر
بخواهيم زير روال ما كاراكتر مشخص شده با AL را چاپ كند ميتوانيم با استفاده از
تابع 0Eh از وقفه 10h چنين چيزي بنويسيم :

Print Proc
Mov Ah/0Eh
Int 10h
:
:

وقتي به انتهاي كد مورد نظر رسيديم ، با يك دستور Ret به محلي از برنامه اصلي كه
زيرروال فراخواني شده بود برميگرديم .

Print Proc
Mov Ah/0Eh
Int 10h
Ret
:

و در پايان هم دوباره نام پروسيجر را به همراه يك كلمه End به معني پايان كار
زيرروال مي آوريم . در مورد مثال ما

: Print End Print Proc
Mov Ah/0Eh
Int 10h
Ret
Print End

نكته مهمي كه بايد به آن توجه كنيم اينست كه اعلان Proc مانند يك برچسب است و
در صورتي كه از روي آن با دستور JMP جهش نكنيم ، داخل پروسيجر هم اجرا خواهد شد
بنا براين هميشه بعد از Org 100h يا پروسيجر ها را نوشته و با يك فرمان JMP از
روي آنها به كداصلي پرش ميكنيم .

. MODEL SMALL
. CODE
ORG 100H
START :

JMP MAIN
پرش به | اعلان پروسيجر Print Proc
قسمت اصلي | Mov Ah/0Eh
برنامه | Int 10h Ret |

| پايان رويه Print End
:MAIN :
:
END START

پس از آن ميتوانيم با يك فرمان Call رويه مورد نظر را فراخواني كنيم .
مثلا Call print . قبل از فراخواني رويه مورد نظر بايد پارامترها و شراي اجراي آن
را فراهم كرده باشيم . مثلا در مورد رويه Print بايد هميشه ثبات AL كه حاوي كد
اسكي كاراكتر براي چاپ است ، مقدار دهي صحيح شده باشد .
مثال :

MAIN :
Mov Al/65 ;'A'
Call Print
:
END START

مثال : اين همان برنامه چاپ كاراكترهاي اسكي با كد 128 تا 255 است كه قبلا بدون
استفاده از رويه ها نوشتيم :

. MODEL SMALL
. CODE
ORG 100H ; IP points to 100h / starting offset
START
JMP MAIN ; Jump over the procedure
Print Proc ; procedure declaration
Mov Ah/0Eh
Int 10h
Ret ; procedure ends
Print End
MAIN :; main program
MOV BH/128
LOOP :_
MOV AL/BH ; AL = Ascii character code
CALL PRINT ; Call procedure
INC BH
CMP BH/255
JNP LOOP _; Jmp LOOP _if BH is below 255
INT 20H ; otherwise terminate normally
END START ; program ends according the START label

**

معمولا كد اصلي برنامه را هم بصورت يك Procedure مينويسند . مثلا در مثال بالا
بعد از برچسب Main ميتوان يك Prog proc و در انتهاي برنامه هم يك Prog End
قرار داد . اين امر تفاوتي در اجراي برنامه نخواهد داشت ولي معمولا و براي داشتن
انعطاف بيشتر در نوشتن برنامه اين كار را انجام ميدهند.
**
اگر دستور Ret را در برنامه اصلي بكار ببريم ، برنامه پايان مي يابد .

در قسمت بعدي با استفاده از رويه ها و اعمال بيتي و محاسباتي كه
خوانديم ، رويه هائي براي چاپ اعداد در مبناهاي مختلف مينويسيم .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 18 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۳۲ مراجعه امروز
۴۵۴۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 18
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۵۸ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 18
برنامه نويسي صفحه كليد

ميخواهيم با مطالبي كه تا حالا ياد گرفتيم ، به برنامه نويسي اجزاي PC بپردازيم
براي شروع هم ابتدا برنامه ريزي صفحه كليد را مطالعه ميكنيم .
براي استفاده از صفحه كليد معمولا از توابع داس (Int 21h) يا BIOS استفاده ميشود
با اينحال برنامه هاي حرفه اي و مخصوصا برنامه هاي رزيدنت از دسترسي مستقيم به
بافر صفحه كليد سود ميبرند . بنا براين بعد از يادگيري توابع داس و بايوس ،
روش دستيابي به بافر صفحه كليد را هم خواهيم خواند.

تابع 1 از وقفه / INT 21h دريافت كاراكتر همراه با نمايش
ورودي خروجي AH=1
=AL كد اسكلي كليد فشرده شده
كليد فشرده شده در صفحه هم به نمايش در مي آيد

اولين و اساسي ترين روش خواندن كليد ها همين تابع از بايوس است . اين تابع
كليدي را از صفحه خوانده و همزمان آن را در صفحه نير نشان ميدهد ضمن اينكه ^C
را هم تست ميكند. بعد از فراخواني وقفه كد اسكي (ASCII) كليد فشرده شده در AL
قرار ميگيرد.
بعلاوه 3 تابع ديگر ( مجموعا 4 تا ) نيز در DOS براي خواندن كاراكتر ها داريم كه
در جدول زير ميبينيد :

ECHO دارد | تست | CCtrl-C متظر ميماند | شماره تابع
1 | x | x | x
6 | | |
7 | x | |
8 | x | x |

براي فراخواني هر كدام از اين توابع ، عدد مربوط به تابع را در AH قرار داده و
وقفه 21h را اجرا ميكنيم . پس از آن كد اسكي كليد فشرده شده در AL قرار ميگيرد.
مثلا : MOV AH/01
INT 21h

اگر پس از خواندن كليد ، عدد 0در ALر قرار بگيرد ، يعني يكي از كليد هاي گسترش
يافته مثل SHitيا Altا و .. فشرده شده است . وقتي اين امر صورت بگيرد 2 بايت
كه محتوي يك 0 و كد اسكي كليد است در بافر صفحه كليد قرار ميگيرد . بنا براين
براي خارج كردن بايت دوم از بافر صفحه كليد ، يك بار ديگر همان تابع را اجرا
ميكنيم :

MOV AH/1 ; Read Key with echo / ^C sensitivity
INT 21H ; Call int 21h
CMP AL/0 ; Enhanced key pressed?
JNZ CONT ; No! jump to CONTinue
INT 21H ; otherwise read the 2nd byte
CONT :

مثال : ميخواهيم برنامه بنويسيم كه يك رشته كاراكتري را گرفته و چاپ كند.
در اين برنامه GETKEY يك پروسيجر است . اين رويه كاراكتري را با استفاهده از
سرويس 1 داس ميخواند و كد آن را در AL قرار ميدهد . وقتي كه كاراكتري را به اين
صورت خوانديم ، كد آن را به انتهاي رشته Str اضافه ميكنيم . سپس تست ميكنيم
كه آيا كليد فشرده شده برابر 13 يا همان Enter است ? اگر اينچني باشد ، از حلقه
خارج شده و با استفاده از سرويس 9 مربوط به Int 21h رشته دريافت شده را چاپ
ميكنيم .( قبل از آن يك كاراكتر $ با انتهاي رشته كاراكتري اضافه كرده ايم )

ENTER EQU 13
.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
GETKEY PROC ; getkey reads a key from keyboard
MOV AH/1
INT 21H
RET
GETKEY ENDP
PUTCHAR PROC ; displays a character
MOV AH/0EH
INT 10H
RET
PUTCHAR ENDP

STR DB 255 DUP(0) ; Buffer
MAIN:
LEA BX/STR ; 1st CHARACTER
LOOP:_
CALL GETKEY
MOV [BX]/AL
INC BX
CMP AL/ENTER ; if Enter pressed then jump over the loop
JNZ LOOP_

MOV AL/'$' ; END OF STRING
MOV [BX]/AL

LEA DX/STR ; get the Str address

MOV AL/10 ; CR
CALL PUTCHAR

MOV AL/13 ;LF
CALL PUTCHAR

MOV AH/9 ; Display Str

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 19 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۳۵ مراجعه امروز
۴۵۵۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 19
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۷۸۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 19
برنامه نويسي صفحه كليد
دريافت رشته كاراكتري

نوشتن رويه اي كه با استفاده از توابع دريافت كاراكتر ، رشته اي كاراكتري را
دريافت كند مشكل است . مخصوصا اگر بخواهيم بوسيله كليد BackSpace اشتباهات را
هم جبران كنيم .

خود Dos تابعي براي دريافت رشته كاراكتري دارد: تابع شماره 0Ah از وقفه 21h

ورودي خروجي
AH=0Ah
كليد هاي تايپ شده در بافري كه با DS:DX Ds:Dx
طول بافر مشخص ميشود قرار ميگيرند.

كليد هاي تايپ شده در صفحه نمايش ديده ميشوند . و ميتوان با كليد Ctrl-C به عمل
ريافت رشته كاراكتري بطور غير نرمال پايان داد.

براي دريافت رشته كاراكتري بوسيله اين تابع ، ابتدا AH را برابر 0Ah قرار ميدهيم
بايتي كه DS:DX به آن اشاره ميكند ( اولين بايت بافر) برابر بيشترين كاراكتر
مجاز است . مثلا اگر بخواهيم طول رشته كاراكتري از 100 حرف تجاوز نكند بايد
اين بايت را با 100 پر كنيم . مانند اينكه در زبان پاسكال يك متغير را به شكل String[100]
تعريف كنيم .
بايت دوم بعد از اينكه عمل دريافت رشته را با Enter پايان داديم پر ميشود.
به اين صورت كه تعداد كاراكتر هاي تايپ شده در آن بايت قرار ميگيرند.
مثلا اگر كلمه تايپ شده ALI باشد ، بايتي كه در DS:DX+1 قرار دارد برابر 3
ميشود . هنگام دريافت رشته ، ميتوان با كليد BackSpace كاراكترهاي قبلي را پاك
كرد .

كاراكترهاي تايپ شده از اينجا در بافر قرار ميگيرند DS:DX | |

|1|2|3| .................................... | | | | |

| |
DS:DX
به اين بايت اشاره ميكند و(حداكثر طول باف ) |

تعداد كاراكترهائي كه كاربر تايپ كرده

مثال :
برنامه زير يك بافر 100 حرفي بنام BUF تعريف كرده و با استفاده از اين
تابع ، يك رشته كاراكتري را دريافت ميكند
تمرين :
به همين برنامه قسمتي اضافه كنيد كه رشته كاراكتري دريافت شده را چاپ
كند
راهنمائي :
بعد از دريافت رشته كاراكتري بايد به انتهاي آن يك كاراكتر $ اضافه
كنيد تا قابل چاپ توسط تابع 9 از وقفه 21h بشود . همچنين آفست شروع رشته كه در DS:DX
قرار دارد را به DS:DX+2 تبديل كنيد تا بايتهاي اول و دوم كه مربوط به طول
شته و تعداد كاراكتر ها هستند چاپ نشوند.

.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
BUF DB 101 DUP(0)/'$'

MAIN:
LEA DX/BUF
MOV BX/DX
MOV AL/100
MOV [BX]/AL
MOV A

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 2 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۳۸ مراجعه امروز
۴۵۵۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 2
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۹۷۲ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 2

خوب ، رجيسترها را ديديم و آشنائي كلي با آنها پيدا كرديم .
حالا ميخواهيم به رجيتسرها مقدار بدهيم و آنها را بخوانيم و ... . ما معمولا در
ےزبانهاي ديگر از علامت =(يا =ا:) براي مقدار دهي استفاده ميكنيم ولي در زبان
ےاسمبلي اين كار ممكن نيست . در عوض از دستورالعمل MOV كمك ميگيريم . با MOV
ميتوانيم داده ها را بين رجيسترها يا خانه هاي حافظه انتقال بدهيم . به اين صورت
MOV in_it/Value

در اينجا In_it به معناي يك رجيستر، نام يك متغير، يا آدرس يك مكان از حافظه
است و Value هم يك مقدار عددي يا حرفي ، نام يك رجيستر و ... ميباشد .
ےمانند MOV AX/200 كه عدد 200 دسيمال را به رجيستر AX منتقل ميكند . (هميشه از
سمت راست به چپ ) .

در زبان اسمبلي ما ميتوانيم با مبناهاي 2وَ10وَ16 كار كنيم . اعداد به طور پيش
فرض مبناي 10 هستند . براي نشان دادن عدد هگزا (مبناي 16) در انتهاي عدد يك
حرف H ( يا h ) و در انتهاي اعداد باينري علامت (b) قرار ميدهيم . مثلا براي نشان
دادن عدد AC1 مبناي 16 بايد حتما آن را بصورت AC1h بنويسيم . به همين ترتيب عدد110b
همان عدد 6 خودمان است .

با اين تفاسير براي دادن مقدار 4Ch به رجيستر AX از دستور زير استفاده ميكنيم :
mov ax/4Ch

به همين شكل ميتوانيم به نيم ثباتها هم مقدار بدهيم . مثلا ميتوانيم براي مقدار
دهي AH بنويسيم : mov ah/20h . در اين حالت مقدار نيم ثبات AL ثابت بوده و
محتواي AH برابر 20h ميشود . چون نيم ثباتها تك بايتي هستند ما نميتوانيم عدد
خارج از محدوده 0 تا 255 يا 128- تا 127 به آنها ارسال كنيم . در مورد اعداد منفي
هم بايد از طريق تبديل به مكمل دو عمل كنيم كه به زودي آن روش را توضيح خواهيم
اد .
مثلا ما نميتوانيم mov ah/100h را انجام دهيم چون 100h برابر 256 بوده و از محدوده
تعريف شده خارج است .
به همين شكل ميتوانيم محتواي ثباتها را هم منتقل كنيم . مثلا براي كپي كردن محتواي
ثبات CXبه DX ميتوانيم بنويسيم : mov dx/cx ، يعني مقدار داخل Cx را به Dx كپي
كن .
ےباز هم بايد به يك يا دوبايتي بودن ثباتها توجه كنيم . به عبارت ديگر ما
ےنميتوانيم مقدار يك ثبات تك بايتي را به يك ثبات كامل دوبايتي منتقل كنيم .
مثلا عبارت mov DX/AL قابل قبول نيست چون AL يك بايتي بوده و DX دوبايتي است .
به عبارت ساده و كامل تر دو طرف عملوند MOV بايد از نظر اندازه برابر باشند.
بنابر اين :
MOV DL/AL
و MOV CL/BHوM درست ولي MOV DS/AH نادرست است .

به علاوه ما فقط ميتوانيم ثباتهاي همه منظوره AXتا DX را به اين صورت مقدار دهي
ےكنيم . در صورتي كه بخواهيم ثباتهائي مثل ..DS/ES/ را مقدار دهي كنيم بايد از
رجيستر AX به عنوان واسطه استفاده كرده و مقدار را از طريق آن انتقال دهيم .
مثلا:
نميتوانيم بنويسيم mov ds/20h
ولي ميتوانيم داشته باشيم :
mov ax/20h
mov ds/ax

ےبه اين ترتيب مقدار 20hبه DS انتقال پيدا ميكند ( گرچه تغيير دادن DS ايده خوبي
نيست !)

ےحالا مطالب گفته شده را تمرين ميكنيم . ما ميتوانيم با DEBUG اسمبلي بنويسيم و
حتي برنامه هاي COM. درست كنيم . بنا براين در DOS، DEBUG، را اجرا كنيد .
D:\LNG\ASM> DEBUG

ےيك خط تيره به صورت - ظاهر ميشود . اين خط تيره اعلان DEUBG براي وارد كردن
دستورات است .
حرف A (به معني شروع وارد كردن دستورات اسمبلي ) را وارد كرده و Enter را بزنيد .
ےعددي بصورت xxxx:0100 ظاهر ميشود . اين عدد براي شما (فعلا) مهم نيست ، پس به
آن توجه نكنيد .
حالا ميتوانيد دستورات زير را وارد كنيد :

MOV AX/100
MOV BX/AX
MOV ES/AX

بعد از وارد كردن خط آخر يكبار ديگر كليد Enter را بزنيد تا اعلان (-) دوباره ظاهر
شود .
در سطر اول ما عدد 100h ( پيش فرض اعداد در Debug هگزا است ) را به AX منتقل
كرديم . بعد مقدار AXبه BX و سپس مقدار AXبه ES منتقل شده . به اين ترتيب همه
ثباتهاي AX/BX/ES بايد در نهايت برابر 100h باشند .
براي ديدن صحت اين مطلب دستور T ( به معناي Trace) را وارد كنيد .
با هر بار اجراي اين دستور يكي از سطرهاي برنامه اجرا ميشود . بعلاوه شما ميتوانيد
محتواي رجيسترها را هم ببينيد .
با اولين فرمان T ، سطر اول اجرا ميشود . بازهم فرمان T را وارد كنيد . الان مقدار100h
به BX داده شد و اگر به محتواي رجيستر AX توجه كنيد خواهيد ديد كه مقدار آن
(همانطور كه انتظار داشتيم ) برابر 100h است . دوبار ديگر هم فرمان T را صادر
كنيد و در نهايت مقدار ثباتهاي AX/BX/ES را ببينيد . هر سه ثبات (حالا) برابر 100h
هستند .
براي خارج شدن از Debug هم فرمان Q به معني Quit را وارد كنيد .
******

پس امروز ياد گرفتيم گه چطور مقادير و داده ها را بين ثباتها منتقل كنيم .
خودتان همين تمرينات را با DEBUG انجام داده و در مورد MOV مطالعه كنيد .
در قسمت بعد چيزهاي بيشتري رو خواهيم خواند و ياد خواهيم گرفت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 20 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۴۱ مراجعه امروز
۴۵۵۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 20
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۷۸۸ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 20 ----------------------
بافر صفحه كليد و بافرحلقوي

صفحه كليد از طريف وقفه سخت افزاري 9h كنترل ميشود . وقتي كه كليدي فشرده شده يا
رها شود اين وقفه فراخواني خواهد شد.
صفحه كليد هم مانند بسياري از وسايل جانبي مثل ديسك درايو و ... از طريق پورت
مخصوص به خودش با CPU مرتبط ميشود. وقتي كه كليدي فشرده ميشود پردازنده مخصوص
صفحه كليد كه يك تراشه 8048 است كدي موسوم به كد اسكن توليد كرده و در پورت 60h
قرار ميدهد. پس از آن وقفه 9h اين مقدار را از پورت 60h خوانده و در بافر صفحه
كليد قرار ميدهد . با فرصفحه كليد در ناحيه داده هاي بايوس يعني سگمنت شماره 40h
قرار دارد.

بافر حلقوي ----------

بافر صفحه كليد يك ناحيه 16 كلمه اي (32 بايتي ) در ناحيه داده هاي
كاراكتر بعدي از آنجا خوانده خواهد شد . كلمه ديگري بنام Tile هم به موقعيتي
اشاره ميكند كه كاراكتر بعدي كه تايپ ميشود در آن محل قرار ميگيرد.
وقتي يك كاراكتر تايپ ميشود head حركت ميكند و وقتي يك كاراكتر وارد ميشود Tile
يك خانه به جلو ميرود و وقتي هركدام به انتها رسيد به جاي اولش برميگردد. به
شكلي كه هميشه head در تعقيب tile است و وقتي بافر خالي باشد به آندو برهم منطبق
ميشوند . به خاطر اين شكل عملكرد بافر به آن بافرخلقوي ميگوئيم .

دستيابي به ناحيه داده ها و بافر صفحه كليد -----------------------------------------

براي دستيابي به يك سگمنت بايد دو موضوع جديد را ياد بگيريم . يكي تعريف يك
ناحيه بعنوان يك سگمنت و ديگري منطبق كردن يك ناحيه تعريف شده بر يك سگمنت حافظه
براي تعريف يك سگمنت از كلمه Segment استفاده ميكنيم . توجه داريم كه اين تعريف
حتما بايد قبل از code. باشد.

Bios_Data SEGMENT
:
:
Bios_Data Ends

به اين ترتيب يك ناحيه داده اي جديد به اسم Bios_data تعريف كرديم .
براي اينكه اين ناحيه را بر سگمنت 40h يا همان ناحيه داده هاي بايوس منطبق كنيم
راهنماي AT را هم به انتهاي تعريف سگمنت اضافه ميكنيم . Bios_Data SEGMENT AT 40H
:
Bios_Data Ends

حالا در داخل سگمنت تعريفي چند متغير را در آدرسهاي مخصوص تعريف ميكنيم . چون
بايتهاي مربوط به صفحه كليد در آفست 1Ah قرار دارند يك org 1Ah در نظر گرفته و
متغيرها را تعريف ميكنيم .

Bios_Data SEGMENT AT 40H
ORG 100H
HEAD DW ?
TAIL DW ?
BUFFER DW 10 DUP(?)
Bios_Data Ends
org 1ah

به اسمبلر ميگويد كه همه متغيرهائي كه در زير تعريف ميشوند را منطبق
بر آدرس 1ah قرار بدهد . اين كار باعث ميشود كه هميشه متغير head حاوي دوبايت 1ah
و 1bhو باشد.
ون هميشه مقدار آدرسها نسبت به محتواي DS سنجيده ميشوند ( مثلا mov al/[bx] با mov al/ds:[bx]
برابر است ) بايد به اسمبلر بگوئيم كه داده ها در كجا هستند.
براي اين منظور از ASSUME استفاده ميكنيم . به اين صورت

Bios_Data SEGMENT AT 40H
ORG 100H
HEAD DW ?
BUFFER DW 10 DUP(?)
Bios_Data Ends
. CODE
ORG 100H
START:
ASSUME DS:BIOS_DATA

بعد آدرس ناحيه Bios_data را به DS لود ميكنيم . ( با استفاده از رجيستر واسطه ) MOV BX/BIOS_DATA
MOV DS/BX

حال تست ميكنيم كه اگر headو tail برهم منطبق باشند يعني بافر خالي است و
شروع به خواندن كليد ها ميكنيم اما اگر برهم منطبق نباشند محتواي بافر را خوانده
و آن را خالي ميكنيم .

GETCHAR:
MOV BX/HEAD
CMP BX/TAIL
JE GETCHAR

واگر بافر خالي نبود BX محل آخرين كاراكتر داخل بافر را نشان ميدهد . پس محتواي
آن قسمت را خوانده و سپس Tail را هم به همان آدرس تنظيم ميكنيم كه Tailو Headو
بر هم منطبق شوند . ( يعني بافر خالي بشود) MOV DX/[BX]

و ميتوانيم تست كنيم كه اگر كليد خوانده شده Q ( به معني Quit) بود از برنامه
خارج شويم و در غير اينصورت يك كليد ديگر را بخوانيم و در صفحه چاپ كنيم .

آيا كاراكتر Q است ? ; CMP DDL/'Q' JE BYE ;

آيا كاراكتر q است ? ; CMP DL/'q' JE BYE ;

تابع 2 براي خواندن كليد ; .MOV AH/2 ; READ A CHAR
وقفه داس ; INT 21H
پرش به روتين برنامه ; JMP GETCHAR BYE :INT 20H ;

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 21 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۴۴ مراجعه امروز
۴۵۶۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 21
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۲۱ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 21
برنامه نويسي صفحه تصوير
ے بايوس كامپيوتر هاي PC شامل روالهائي براي كنترل و برنامه نويسي صفحه نمايش
هستند. متداولترين آنها وقفه 10h است و در زير متداولترين توابع آن را شرح ميدهيم

سرويس 2 براي تنظيم محل مكان نما
ورودي ها: AH=2

سطر و ستون موقعيت جديد DH/DL=
شماره صفحه BH=
ے شماره صفحه در حالت پيش فرض 0 است (BH=0) و گوشه بالا و سمت چپ صفحه نمايش
ے هم با مختصات (0/0) سنجيده ميشود . بنا براين درحالت 80x25 حداكثر شماره سطر و
ستون برابر 79x24 است .

سرويس 3 . دريافت موقعيت مكان نما
ورودي ها AH=3

شماره صفحه BH=
بعد از فراخواني وقفه 10h اين مقادير برگشت داده ميشوند:
سطر و ستون فعلي مكان نما DH/DL=

مثال

MOV AH/2 ; Set curson position .
MOV DH/20 ; X
MOV DL/10 ; Y
XOR BH/BH ; BH=0
INT 10H ; Call Interrupt 10h

لغزاندن صفحه به بالا يا پائين
ے با استفاده از دو تابع زير ميتوانيم بخشي از صفحه تصوير را به بالا يا پائين حركت
داده يا آن قسمت را پاك كنيم .
براي فراخواني اين توابع بايد رجيسترها را بصورت زير تنظيم كنيم
لغزش بطرف بالا AH=6
لغزش بطرف پائين AH=7
تعداد سطرهائي كه بايد حركت كند AL=
سطروستون گوشه سمت چپ و بالا Ch/Cl=
سطرو ستون گوشه سمت راست و پائين Dh/Dl=
مشخصه رنگ Bh=

ے اگر AH برابر 6 باشد محدوده تعريفي بطرف بالا و در صورتي كه 7 باشد بطرف پائين
حركت داده ميشود .
AL مشخص ميكند كه محدوده مورد نظر چند سطر بايد حركت كند .
ے اگر AL برابر 0 باشد محدوده تعريفي پاك ميشود . مثلا فرمان CLSدر DOSر از همين
وقفه استفاده كرده و كل صفحه نمايش را پاك ميكند.
ے مشخصه رنگي كه با BH تعريف ميشود معلوم ميكند كه فضاي خالي كه بعد از حركت دادن
محدوده بوجود مي آيد بايد با چه رنگي پر شود. اين مقدار از رابطه زير بدست
مي آيد:
رنگ زمينه +16*رنگ متن BH=
مثلا براي اينكه رنگ سفيد روي آبي داشته باشيم : BH=15+1*16=31

نوشتن كاراكتر و خصوصيات در محل مكان نما
ے با استفاده از تابع شماره 9h ميتوانيم كاراكتري را با خصوصيات مورد نظر در محل
مكان نما چاپ كنيم .
AH=9

كد اسكي AL=
شماره صفحه BH=
خصوصيات كاراكترBL=
تعداد دفعاتي كه كاراكتر چاپ ميشودCX=

ے خصوصيات كاراكتر از روشي كه در بالا توضيح داديم بدست مي آيد. رجيستر CX معلوم
ے ميكند كه كاراكتر مشخص شده با AL چند بار بايد چاپ شود. معمولا اين مقدار را 1
قرار ميدهيم .
مثال : چاپ رشته كاراكتري بصورت سفيد روي آبي

.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
MSG DB ' THIS IS AN EXAMPLE FOR INT 10H/FUNCTION 9H$'

SETCURSOR PROC ; SET CURSOR POSITION
MOV AH/2 ; FUNCTION 2 / INT 10H
MOV DH/10 ; ROW:10
PUSH BX ; SAVE BX VALUE
MOV BH/0
INT 10H
POP BX
RET
SETCURSOR ENDP

WRITE PROC ;WRITE A CHARACTER USING FUNCTION 9H/INT 10H
MOV AH/09
PUSH BX
XOR BH/BH
MOV BL/31
MOV CX/1
INT 10H
POP BX
RET
WRITE ENDP

MAIN:
LEA BX/MSG ; GET MSG ADDRESS
MOV DL/10 ; COLUMN : 10
CALL SETCURSOR
LOOP:_
MOV AL/[BX]
CMP AL/'$'
JZ QUIT
CALL WRITE
INC BX
INC DL ; SET NEW CURSOR LOCATION
CALL SETCURSOR
JMP LOOP_
QUIT:
INT 20H ; TERMINATE
END START

سرويس 0Eh براي چاپ بصورت تله تايپ

ے وقتي ميخواهيم با استفاده از سرويس 9h كاراكتري را چاپ كنيم خودمان بايد محل
ے مكان نما را معين كنيم . مثلا براي چاپ يك رشته كاراكتري بعد از چاپ هر كاراكتر
يكواحد به شماره ستون مكان نما اضافه كرده ، محل جديد آن را تنظيم مكنيم و... .
اما سرويس 0E بعد از چاپ هر كاراكتر مكان نما را يكخانه با راست انتقال ميدهد
به خاطر همين خصوصيت به اين روش چاپ " تله تايپ " ميگويند.
ے قبلا با اين سرويس كار كرده ايم بنا براين تنها به ياد آوري پارامترهاي لازم اكتفا
كرده و از آوردن مثال خودداري ميكنيم . ( مثال : فايل ALLCHAR.ASM)

بايد تنظيم شود: AH=0Eh

كد اسكي كاراكترAL=
شماره صفحه BH =

کيفيت مقاله :
عالی خوب متوسط ضعيف


برنامه نويسي در مد گرافيك ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۴۷ مراجعه امروز
۴۵۶۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برنامه نويسي در مد گرافيك
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۳۱ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.
برنامه نويسي در مد گرافيك

ے تنها امكاني كه بايوس براي انجام كارهاي گرافيكي در اختيار ما قرار ميدهد روشن
ے كردن يك نقطه (Pixel) است . با استفاده از تابع مربوطه بايد زيربرنامه هائي
براي رسم ساير اشكال گرافيكي مثل مربع ، دايره و ... بنويسيم .

ے قبل از اينكه يك شكل گرافيكي رسم كنيم ، بايد ايتدا صفحه نمايش را در مد
ے گرافيكي قرار بدهيم . به عبارت ديگر چون در حالت عادي تعداد سطر و ستونهاي صفحه
ے تصوير كم ( مثلا در مد 25x80 برابر 2000 تا) است ، نميتوان شكل گرافيكي رسم كرد .
بهمين دليل صفحه نمايش را در مد گرافيكي مثلا 480x640 نقطه قرار ميدهيم و ... .

سرويس 0 از وقفه 10h براي تنظيم حالت صفحه نمايش =================================================

ے براي تنظيم حالت صفحه نمايش به يك حالت متني يا گرافيكي خاص بايد اين
پارامتر ها را تنظيم كنيم . AH=0

مود مورد نظر AL=

مود مورد نظر از جدولي بدست مي آيد كه خلاصه آن را در زير مي آوريم .

كد | وضوح | تعداد رنگ
16 | Text Mode | 03h
16 | 320x200 | 0Dh
16 | 640x200 | 0Eh
Mono | 640x350 | 0Fh
16 | 640x350 | 10h
2 | 640x480 | 11h
16 | 640x480 | 12h
256 | 320x200 | 13h

سرويس 0Ch از وقفه 10h براي نوشتن نقطه گرافيكي =============================================

براي روشن كردن يك پيكسل از تابع 0Ch استفاده ميكنيم .
AH= 0Ch

شماره رديف بسته به مود تصويري DX=
شماره ستون بسته به مد تصويري CX=
عدد رنگ بسته به مد تصويري AL=
شماره صفحه ، شماره 0 معمولا استفاده ميشودBh=

ے به عنوان مثال براي روشن كردن نقطه اي كه ( مد 640x480 ) در وسط صفحه است به
اينصورت بايد وقفه را فراخواني كنيم .

MOV AH/0CH
MOV DX/240
MOV CX/320
XOR BH/BH

ے مثال : برنامه زير200 رنگ از رنگهاي موجود در حالت 320x200 نقطه و 256 رنگ را
نمايش ميدهد.

.MODEL SMALL
.CODE
ORG 100H
START:
MOV AH/00H
MOV AL/13H
MOV BX/00H ; PAGE NUMBER
INT 10H ; SET TO 320x200 256 COLORS

MOV AH/0CH ; PUTPIXEL FUNCTION
MOV AL/25 ; COLOR #25
MOV DX/0 ; ROW 0
ROW:
MOV CX/319 ; COLUMN 319 = START COLUMN
COL:
INT 10H ; CALL INTERRUPT 10H
LOOP COL ; DOWN TO CX=0
INC DX ; DX=DX+1
INC AL ; AL=AL+1( COLOR NUMBER)
CMP DX/199 ; IF DX=199
JNZ ROW ; ELSE JUMP TO ROW

MOV AH/00H ; GET KEY
INT 16H

MOV AH/00H ; VIDEO MODE SET
MOV AL/03H ; 80x25 16 COLORS
INT 10H ; CALL INT .10H

INT 20H ; TERMINATE PROGRAM
END START

سرويس 10h از اينتراپت 10h براي تنظيم پالت رنگ ================================================

ے با استفاده از اين سرويس ميتوانيم رنگهاي فعلي سيستم را بصورت دلخواه خودمان
ے تعريف كنيم . در هر كارت گرافيكي مبتني بر VGA ثباتي بنام رجيستر DAC وجود
دارد كه مشخصات رنگ را بصورت زير نگهداري ميكند.
6 bytes

DAC Register : RRRRRRGGGGGGBBBBBB

6 bytes 6 bytes

ے هر رنگ از سه رنگ اصلي قرمز (R) ، سبز (G) و آبي (B) تشكيل ميشود . ثبات DAC
ے كه بصورت يك متغير 18 بيتي است ، مقدار هر كدام از رنگهاي اصلي كه در رنگ
ے مورد نظر شركت دارند را معين ميكند . هر كدام از اين مقدار ها يك داده 6 بيتي
ے هستند ، بنا براين عددي بين 0 تا 63 را نشان ميدهند . براي تنظيم اين رجيستر از
سرويس 10 استفاده ميكنيم .
AH= 10H
AL= 10H

كد مربوط به رنگ (0-255) BX=
شدت رنگ سبز CH=
شدت رنگ آبي CL=
شدت رنگ قرمز CH=

ے منظور از شدت رنگ ، همان عدد 6 بيتي است كه در بالا گفتيم . مثلا اگر بخواهيم كه
ے رنگ شماره 1 كه در حالت عادي آبي است را به قرمز تند تبديل كنيم از اين كد
استفاده ميكنيم .

MOV AX/1010H
MOV BX/1
MOV CH/1
MOV CL/1
MOV CH/60
INT 10H

پايان قسمت بيست ودوم

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 23 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۵۰ مراجعه امروز
۴۵۶۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 23
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۲۸ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 23
دسترسي مستقيم به حافظه ويدئو

ے در اين قسمت ميبينيم كه چطور در اسمبلي بدون استفاده از وقفه ، كاراكترها را در
صفحه نمايش چاپ كنيم . به همين صورت نوشتن نقاط گرافيكي را انجام ميدهيم و ..

ے كارت هاي گرافيكي مبتني بر CGA/EGA/VGA داراي قطعه حافظه ي مخصوصي هستند كه
ے اطلاعات صفحه نمايش در آن نگهداري ميشود . به عبارت ديگر هر چيزي در اين قسمت
از حافظه نوشته شود ، روي صفحه نمايش ائير صفحه نمايش ميگذارد .
ے در حالت گرافيكي اين قطعه از آدرس A000h و در مود متني از B000h يا B8000h شروع
ے ميشود . در حالت متني قطعه ويدئو در هر سگمنتي كه باشد ، هميشه بايتهاي زوج ( با
ے شروع از صفر) مربوط به كد اسكي كاراكتر بوده و بايتهاي فرد ( با شروع از يك )
ے مربوط به خصلت كاراكتر است . يعني خصلت كاراكتري كه در آفست n ام قرار دارد
در آفست n+1 ام قرار ميگيرد و ... .
خصلت مربوط به هر كاراكتر از فرمول زير محاسبه ميشود :
رنگ زمينه +16*رنگ متن = خصلت

بعنوان مثال اگر بخواهيم كه كاراكتر چاپ شونده با رنگ سفيد روي زمينه آبي ديده
شود داريم : = 31 َ= 15+1*16 خصلت .

( كد اسكي كاركتر) آفست 0
( بايت خصيصه ) آفست 1 | | |
| |
0 1 2 3 4 5 ......................................

| | | | | | | |

ے در كارتهاي گرافيكي تك رنگ (Monochrome) مانند CGA/MDA و ... قطعه حافظه ويدئو (
براي مود متني ) از آدرس B000h و در كارتهاي رنگي از آدرس B800h شروع ميشود .
ے مثال : برنامه زير تمام صفحه نمايش را با كاراكتر (.) و به رنگ سفيد روي زمينه
آبي پر ميكند.

مشخصه كاراكترها ; EQU 31 ATTR E
آدرس قطعه ويدئو ; VIDSEG EEQU 0B800H . MODEL SMALL
. CODE
ORG 100H
START :
JMP MAIN
DPRINT PROC
PUSH ES
MOV AX/VIDSEG
MOV ES/AX ;

كاراكتر براي چاپ MOV AL/'.' ; MOV ES:[BX]/AL ;

آفست قرار گيري بايت خصيصه INC BX ; MOV AL/ATTR
MOV ES:[BX]/AL
POP ES
RET
DPRINT ENDP

MAIN :

آفست شروع = صفر ; XOR BX/BX LOOP :_
CALL DPRINT

كاراكتر بعدي ; INC BX CMP BX/4000 ;( 80X25)x2
JNZ LOOP _
INT 20H
END START

ے در برنامه بالا محل آفست ها با BX مشخص ميشود . بنابراين ابتدا كد اسكي كاراكتر
را در آدرس ES:[BX] نوشته و سپس بايت مشخصه را در ES:[BX+1] قرار ميدهيم و..
ے چون صفحه نمايش داراي 80x25 عنصر بوده و هر كاراكتر 2 بايت ( كد كاراكتر و
ے بايت مشخصه ) اشغال ميكند بنا براين 80x25x2=4000 بايت طول دارد . بنا براين در
پايان برنامه تست ميكنيم كه آيا BX با آفست 4000 ام رسيده يا نه .

تمرين : برنامه اي بنويسيد و در آن پروسيجري طراحي كنيد كه يك رشته كاراكتري
را با اين روش بنويسد.

ے با همين روش ميتوانيم قسمتي از صفحه نمايش را ذخيره و بازيابي كنيم . برنامه
ے هائي كه در آنها از منوها و پنجره ها استفاده شده همگي از اين روشها استفاده
ے ميكنند . به اينصورت كه قبل از نمايش يك پنجره ( مثل يك Dialog box) ابتدا
محتواي پشت آن را ذخيره كرده و بعدا دوباره در همان محل قرار ميدهند.
برنامه زير ابتدا كل صفحه نمايش را در بافري ذخيره كرده و مجددا نمايش ميدهد

VIDSEG EQU 0B800h
.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
BUF DB 4000 DUP(0)
MSG DB ' NOW PRESS ANY KEY TO RESTORE SCREEN IMAGE$'
MAIN:
XOR BX/BX
PUSH ES
MOV AX/VIDSEG
MOV ES/AX
LOOP1:
MOV AL/ BYTE PTR ES:[BX]
MOV BUF[BX]/AL
INC BX
CMP BX/4000
JNZ LOOP1

; Clera screen.
MOV AL/0
MOV DH/24
MOV DL/79
XOR CX/CX
XOR BH/BH
MOV AH/7
INT 10H

; DISPLAY MESSAGE
MOV AH/9
LEA DX/MSG
INT 21H

; Wait for a key
MOV AH/0
INT 16H

XOR BX/BX
LOOP2:
MOV AL/BUF[BX]
MOV BYTE PTR ES:[BX]/AL
INC BX
CMP BX/4000
JNZ

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 24 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۵۳ مراجعه امروز
۴۵۶۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 24
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۱۳ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 24

دستورات مربوط به رشته ها

قبلا تا حدودي نحوه كار با كاراكتر ها و رشته هاي كاراكتري را ديديم و ميتوانيم
آنها را از طريق ورودي دريافت كرده يا روي صفحه نمايش چاپ كنيم .
بعلاوه عمليات فوق ، امكانات و دستورات ديگري هم در نظر گرفته شده اند . مثلا
پردازنده 8086 دو رجيستر SI/DI را براي پردازش رشته هاي كاراكتري در نظر گرفته .
اين دو براي انتقال داده ها بين دو آدرس مختلف يا انتقال محتواي يك رشته
كاراكتري به رشته كاراكتري ديگر بكار ميروند.
هميشه DS:SI(SI( مخفف Source Index است ) به رشته مبدا و ES:DI(Destination Index)
به رشته مقصد (يا آدرس مقصد) اشاره ميكند. وقتي كه يك بايت (يا كلمه ) بوسيله
دستورات مخصوص اينكار انتقال پيدا كرد، خود بخود SI يكواحد افزايش (يا كاهش )
پيدا ميكند.
*
دستور MOVSB

دستور MOVSB يك بايت را از آدرس DS:SI به آدرس ES:DI منتقل ميكند.
براي انتقال يكبايت ، ابتدا ثباتهاي DS:SI را به رشته مبدا و ES:DI را به رشته
مقصد تنظيم كرده و با تشكيل يك حلقه (Loop) به تعداد مورد نياز داده انتقال
ميدهيم .
در مثال زير ميخواهيم تمام محتواي رشته كاراكتري S1 را به رشته كاراكتري S2
انتقال داده و S2 را چاپ كنيم .
بنا براين دو رشته كاراكتري (با طول 20 حرف ) تعريف ميكنيم .

S1 DB ' THE SOURCE STRING $'
S2 DB ' $'

سپس ds:di را به طوري تنظيم ميكنيم كه به S1 اشاره كند. چون برنامه ما com. است
و محتواي ds ثابت ، فقط مقدار آفست s1 را به SI انتقال ميدهيم : lea ax/s1
mov ds/ax

براي تنظيم كردن آدرس مقصد، مقدار DS كه حاوي عدد قطعه S2 است را به ES انتقال
ميدهيم : mov ax/ds
mov es/ax

سپس مقدار آفست S2 را بدست آورده و در DI قرار ميدهيم : lea ax/s2
mov di/ax

الان آدرسهاي مبدا و مقصد معلوم شده اند، بنا براين كافيست 20 بار (براي انتقال 20
بايت ) ، دستور movsb را اجرا كنيم : mov cx/20 ; loop counter
loop :_
movsb
loop loop _

سپس با استفاده از تابه 9h از وقفه 21h محتواي S2 را چاپ ميكنيم و خواهيم ديد
كه عبارت داخل S1 چاپ ميشود .

ليست كامل : .286c
.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
S1 DB 'THE SOURCE STRING $'
S2 DB ' $'
MAIN:
LEA AX/S1
MOV SI/AX

LEA AX/S2
MOV DI/AX
;PUSH ES
MOV AX/DS
MOV ES/AX

MOV CX/20
CLD
LOOP:_
MOVSB
LOOP LOOP_
MOV AH/09
LEA DX/S1
INT 21H
INT 20H
END START

*

دستور MOVSW

دستور MOVSW دقيقا مانند MOVSB است با اين تفاوت كه بجاي يك بايت ، يك كلمه
(َ2 بايت ) منتقل ميكند . براي انتقال دو بايت بين دو آدرس كافيست مانند
عملياتي كه براي movsb توضيح داديم ، آدرسها را تنظيم كرده و از movsw استفاده
كنيم .
بعنوان مثال ، اگر بخواهيم در برنامه بالا بجاي movsbاز movswز استفاده كنيم ،
بايد حلقه اي كه تشكيل داديم 10 بار اجرا شود:

mov cx/10
loop :_
movsw
loop loop _

دستورات CLSو SLDو

وقتي كه از movsbيا movswا استفاده ميكنيم ، مقدار ثباتهاي SIو DIو يكواحد
افزايش پيدا ميكنند . در صورتي كه بخواهيم با اتقال هر بايت (يا كلمه ) مقدار
اين ثباتها كاهش پيدا كنند، قبل از movsbيا movswا يك دستور SLD قرار ميدهيم .
مثلا:

SLD
MOV CX/10 ; LOOP COUNTER
LOOP :_
MOVSB
LOOP LOOP _

دستور CLD عكس دستور SLD عمل كرده و مقدار ثباتهاي DIو SIو با انتقال هربايت يا
كلمه ، يكواحد افزايش پيدا ميكنند. اين عمل بطور پيش فرض توسط movsbو movswو
انجام ميشود ، با اينحال براي جلوگيري از تاثر SLD هاي قبلي و اطمينان بيشتر
معمولا از آن استفاده ميشود.

CLD
MOV CX/10 ; LOOP COUNTER
LOOP :_
MOVSB
LOOP LOOP _

CLS

*
مخفف CLear Direction flagو SLDو مخفف Set Direction flag است .

دستور REP
براي راحتي كار و اينكه مجبور به ايجاد حلقه توسط دستور Loop نباشيم ، دستورالعمل REP
در 8086 تعبيه شده . اين دستور مانند دستور Loop هر بار يكواحد از محتواي CX
كم كرده و تا صفر شدن CX به تكرار عمليات ادامه ميدهد . در واقع REP يك
دستورالعمل نبوده بلكه پيشوندي براي دستورات انتقال ( مانند movsb) است .
بعنوان مثال براي انتقال 20 بايت از رشته S1 به رشته S2 ( مثال بالا) ميتوانيم
حلقه را به اين صورت بنويسيم :

CLD
MOV CX/20
REP MOVSB

در قسمت بعد ، بقيه دستورات مربوط به رشته ها را باد ميگيريم .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 25 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۵۶ مراجعه امروز
۴۵۷۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 25
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۷۶۳ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 25

دستورات مربوط به رشته ها

دستورات REPNE/REPE/CMPSW/CMPSB/CMPS

دستور CMPS براي مقايسه كردن دو رشته كاراكتري بكار ميرود. اين دستور دوبايت
واقع در ES:DIو DS:SIو را با هم مقايسه كرده و فلاگها را براساس نتيجه تنظيم
ميكند. سپس SIو DIو را افزايش (يا كاهش ) ميدهد. مثلا راي مقايسه كردن دو رشته
كاراكتري Str1وStr2و به اينصورت عمل ميكنيم : str1 db 'This is a set of chars$'
str2 db 'This is a set of chars$'

دقت كنيد كه در اين مثال دو رشته محتواي يكسان دارند . پس از آن آدرس اولين
رشته را در es:di و آدرس دومين رشته را در ds:si قرار ميدهيم .

lea si/str1
mov ax/ds
mov es/ax
lea di/str2

پس از آن چون ميخواهيم از بايت اول تا انتهاي رشته (22 بايت ) را مقايسه كنيم
ابتدا دستور CLS را براي افزاش si/di بكار برده ، و به شكل زير با تنظيم محتواي cx
به 22 ، 22 بايت دو رشته را مقايسه ميكنيم :

cld
mov cx/22
repe cmps str1/str2
jne mis_match
:
:
mis_mathc :
:

دستور Repe (مخفف Repeat while equal) تا زماني كه به اولين تفاوت برسد، بايتهاي
دو رشته كاراكتري را با هم مقايسه ميكند . وقتي به اولين مورد تفاوت برسيم فلاگ
وضعيت 1 شده و با دستور jne ميتوانيم به روال مورد نظر پرش كنيم .
تفاوت CMPSبا CMPSBاو CMPSWو در اينست كه CMPS به با توجه به نوع تعريفي رشته
ها عمل ميكند . يعني اگر رشته كاراكتري با تعريف DB ايجاد شده باشد، CMPS آندو
را بايت با بايت ، و اگر بصورت DW تعريف شده باشند، بصورت كلمه به كلمه
مقايسه ميكند .
اما CMPSB هميشه دو رشته كاراكتري را بايت به بايت مقايسه ميكند . و همينطور CMPSW
كه مقايسه را بصورت دوبايتي انجام ميدهد.
مزيت مهم cmpsbو cmpswوبر cmpsر اينست كه cmpsb/ccmpsw احتياج به اپراند ندارند
و تنها با اجراي cmpsbيا cmpswا بايتهاي لازم با هم مقايسه ميشوند .
مثال بالا را با استفاده از cmpsb مينويسيم :

:
cld
mov cx/22
RepNe cmpsb
je same
different :
:
:

ميبينيم كه در مقابل CMPSB هيچ اپراندي قرار ندارد . علاوه بر آن تغيير ديگري هم
ملاحظه ميكنيم : اينكه بجاي Repeاز Repneز (مخفف Repeat until not equal) استفاده
كرده ايم . RepNe تا وقتي كه به مورد مشابهي نرشد به مقايسه كردن رشته ها ادامه
ميدهد . وقتي به دو بايت يكسان برسد فلاگ وضعيت را طوري تغيير ميدهد كه بتوانيم
با JE به روتيني پرش كنيم كه ميخواهيم در صورت مساوي بودن رشته ها اجرا شود.
(در مثال بالا به same جهش كرده ايم ) .

دستورات SCAS/SCASB/SCASW

اين دستورات بايت واقع در AL با كلمه واقع در AX را با بايت با كلمات واقع در
رشته مقايسه ميكند . مانند CMPS، SCAS، به نوع تعريف رشته ها دقت ميكند و اگر
بصورت DB تعريف شده باشند ، بايت به بايت و اگر بصورت DW تعريف شده باشند
بصورت كلمه به كلمه جستجو ميكند . همچنين SCASBو SCASWو به اپراند احتياج ندارند
و فقط با تنظيم آدرسهاي DS:SIو ES:SIو ميتوانند بايت يا كلمه مورد نظر را جستجو
كنند.
مثال .
ميخواهيم برنامه اي بنويسيم كه محل اولين حرف 'a' را در رشته كاراكتري مورد نظر
پيدا كنيم . بنابراين ابتدا رشته كاراكتري را تعريف ميكنيم :
str db 'This is a sample text' ; 21 bytes .

سپس آدرس رشته را در DS:DI ، و 'a' را در نيم ثبات AL قرار ميدهيم .
mov al/'a'
lea di/str

پس از آن با عبارات زير عمل جستجو را آغاز ميكنيم . RepNe Scasb
JNE out
out
روتيني است كه در صورت يافته نشدن رشته كاراكتري بايد به آنجا جهش كنيم و
مثلا عبارتي مبني بر يافته نشدن رشته كاراكتري را چاپ كنيم . بدين ترتيب تمام
رشته كاراكتري را براي يافتن 'a' جستجو ميكنيم و درصورتي كه حداقل يك حرف 'a'
در رشته كاراكتري باشد ، با دستور JNE Out به روتين لازم جهش ميكنيم .

ليست كامل :

.286c
.MODEL SMALL
.CODE
ORG 100h
START:
JMP MAIN
STR1 DB 'This is a sample String' ; 25 Bytes
FOUND DB 'Match case found$'
NFOUND DB 'No Match case found$'
MAIN:
LEA DI/STR1
MOV CX/25
MOV AL/'a'
REPNE SCASB
JE OUT_
MOV AH/9
LEA DX/NFOUND
INT 21H
INT 20h
OUT:_
LEA DX/FOUND
MOV AH/9
INT 21H

INT 20H
END START

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 26 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۵۹ مراجعه امروز
۴۵۷۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 26
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۷۸۲ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 26

استفاده از ماوس

ے كاركردن با ماوس ساده تر و سريع تر از كار كردن با صفحه كليد است . بهمين علت
داشتن امكانات بكارگيري ماوس در برنامه ها، يك امتياز مهم محسوب ميشود.
ے براي اينكه برنامه اي بتواند از ماوس استفاده كند، بايد درايور مخصوص ماوس كه
ے عبارت از يك برنامه COM. (مانند MOUSE.COM) است را اجرا كنيم . اين درايور ها
روتينهاي مخصوص ماوس را در اينتراپت 33h لود ميكنند.
ے براي استفاده از ماوس ، پس از بارگذاري درايور مخصوص ، بايد ان درايور را فال
كنيم ، اين كار را با استفاده از سرويس 00h از وقفه 33h انجام ميدهيم :

براي اجرا باز ميگرداند

AX=0 =AX كد خطا
ے اگر راه اندازي ماوس موفقيت آميز باشد ، پس از فراخواني AX=0 خواهد بود در غير
ے اينصورت ، مثلا در مواقعي كه درايور ماوس نصب نشده باشد، AX حاوي كد خطا خواهد
بود.
ے مثال : اين برنامه ماوس را در صورت وجود راه اندازي ميكند و در صورت وقوع خطا
به نقطه لازم پرش ميكند: XOR AX/AX ;
INT 33H ;

آيا كد خطا وجود دارد? ; CMP AX/0
بله ، پرش به روتين خطا ; JNZ ERROR

ے بعد از آن بايد مكان نماي ماوس را نمايش بدهيم . براي اينكار كافيست كه AX را
برابر 1 قرار داده و INT 33h را اجرا كنيم . MOV AX/1
INT 33h

ے در صورتيكه درايور ماوس نصب يا راه اندازي نشده باشد، نتايج غير قابل پيش بيني
رخ خواهد بدست خواهد آمد.
ے به همين سادگي هم ميتوان مكان نماي ماوس را مخفي كرد. براي مخفي كردن مكان نماي
ماوس AX را برابر 2 تنظيم كرده و INT 33h را اجرا ميكنيم . MOV AX/2
INT 33h

ے بايد توجه كنيم كه اين سرويس را در حالتي كه مكان نماي ماوس فعال نيست اجرا
ے نكنيم . در صورتي كه عمل مخفي كردن مكان نماي ماوس را 2 بار انجام دهيم ، براي
ے ظاهر كردن آن هم بايد 2 بار متوالي سرويس راه اندازي مكان نماي ماوس را اجرا
كنيم .

ے در هنگام كار با ماوس لازم داريم كه موقعيت مكان نماي آن و هم چنين وضعيت
كليدهائي از ماوس كه فشرده يا رها شده اند را بدانيم .
ے براي دريافت اطلاعات ماوس از سرويس 3 وقفه 33h ، با پارامتر هاي زير استفاده
ميشود :
براي فراخواني برگردانده ميشود

AX=3 BX=0 هيچ دكمه اي فشرده نشده
BX=2 دكمه چپ فشرده شده است
BX=2 دكمه راست فشرده شده است
BX=3 هردو دكمه فشرده شده اند
CX: ستون فعلي مكان نما
DX: سطر فعلي مكان نما

ے همانطور كه ميبينيد، بعد از فراخواني وقفه ، رجيستر BX مشخص ميكند كه كدام
ے كليد(يا كليدها) فشرده شده اند. هم چنين موقعيت سطر و ستون مكان نما بر حسب
Pixel
بدست مي آيد.
ے بعنوان مثال اگر از ماوس در محيط گرافيكي با وضوح 480 َ640 استفاده ميكنيد ،
ے مقادير CXو DXو به ترتيب 640 و 480 خواهند بود . براي حالت متني كافيست كه
ے مقادير بدست آمده با CXو DXو را به 8 تقسيم و با 1 جمع كنيم تا موقعيت مكان
نما بر حسب سطر و ستون متني (Text) بدست بيايد.
مثال :

.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
MSG DB ' Press the Left Mouse Key to Terminate'/13/10/'$'
MAIN:
XOR AX/AX
INT 33H
MOV AX/1
INT 33H
MOV AX/3
LOOP:_
INT 33H
CMP BX/1
JNZ LOOP_
MOV AX/

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 27 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۶۲ مراجعه امروز
۴۵۷۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 27
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۷۵۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 27
بكارگيري Mouse

ے وقتي كه از سرويس 3h براي دريافت وضعيت ماوس استفاده ميكنيم ، تنها ميتوانيم
ے وضعيت ماوس در لحظه اجراي سرويس را بدست بياوريم . راه بهتر اينست كه از
ے سرويس 5h كه اعمال ماوس را در يك "صف " قرار ميدهد استفاده كنيم . در اين
ے حالت نيازي نيست كه اطلاعات فشرده شدن كليد را درست در همان لحظه دريافت كنيد
بلكه ميتوانيد آن را از "صف " برداريد.

سرويس 5h ، خواندن صف ماوس برميگردآند

AX=5 :BX تعداد دفعات فشرده شدن كليد ماوس
BX : 1: براي اطلاعات دكمه چپ :CX ستون فعلي مكان نما
0 براي اطلاعات دكمه راست :DX سطر فعلي مكان نما

ے اين سرويس به ما امكان ميدهد كه بدانيم دكمه مورد نظر بعد از آخرين دريافت
ے وضعيت چند مرتبه فشرده شده است . بهمين ترتيب ميتوانيم مختصات فعلي ماوس را
هم بدست بياوريم .
ے روش كار به اينصورت است كه ابتدا با قرار دادن 1يا 0ا در ثبات BX معلوم ميكنيم
ے كه اطلاعات كدام كليد را ميخواهيم دريافت كنيم . بعد از اجراي وقفه ، اطلاعات
ے كليد درخواستي از طريق ثبات BX و مختصات فعلي مكان نماي ماوس از طريق CX/DX
بدست مي آيد .

مثال :
ے اين مثال منتظر ميماند كه شما يكي از كليد هاي ماوس را فشار دهيد و در نهايت
به شما اعلام ميكند كه چند بار كليد سمت راست را فشار داده ايد.

.MODEL SMALL
.CODE
ORG 100H
START :JMP TOP
ANSWER DB " Number of times right botton was pressed"
TOP:
XOR AX/AX
INT 33H

MOV AX/1
INT 33H

MOV AH/7
INT 21H ; WAIT FOR A KEY

MOV BX/1
MOV AX/5
INT 33H

LEA DX/ANSWER
MOV AH/9
INT 21H

INT 20H
END START

ے سرويس 5h هنوز هم داراي محدوديتي است . به اين ترتيب كه موقعيت مكان نما در
ے زمان اجراي وقفه را برميگرداند. به همين خاطر مجبور خواهيد بود كه مرتبا با اجراي
ے اين سرويس ، اطلاعات ماوس را دريافت كنيد . براي حل اين مشكل از سرويس 6 كه
مكمل سرويس 5h است استفاده ميكنيم .

سرويس 6h از اينتراپت 33h

بايد تنظيم كنيم برميگرداند

AH=6h BX تعداد دفعات رها شدن دكمه ماوس
BX=1
اطلاعات دكمه چپ CX شماره ستون مكان نما در آخرين رها شدن
BX=0 اطلاعات دكمه راست DX شماره سطر مكان نما در آخرين رها شدن

ے مانند سرويس 5h بايد با قرار دادن 0يا 1ا در ثبات BX معلوم كنيم كه اطلاعات
ے كدام كليد را لازم داريم . اگرBX=1 باشد اطلاعات دكمه سمت چپ و در غير اينصورت
اطلاعات دكمه سمت راست بدست مي آيد.
ے بعد از فراخواني وقفه ، ثبات BX معلوم ميكند كه دكمه مورد نظر ، بعد از آخرين
ے دريافت وضعيت چند بار رها شده است . در مواقعي كه ميخواهيم چيزي را با ماوس
ے روي صفحه نمايش حركت بدهيم (مانند حركت دادن يك آيكون در ويندوز) رها شدن
دكمه هاي ماوس را هم بايد در نظر بگيريم .

حركت دادن مكان نماي ماوس

بعلاوه ميتوانيم مكان نماي ماوس را در موقعيت خاصي از صفحه نمايش قرار بدهيم .
كافيست كه از سرويس 4h به اين شكل استفاده كنيم . AX=4h

CX ستون جديد مكان نما
DX سطر جديد مكان نما

بعد از اجراي وقفه ، مكان نماي ماوس در محل مورد نظر قرار ميگيرد.
مثال :

.MODEL SMALL
.CODE
ORG 100H
START:
XOR AX/AX
INT 33H

MOV AH/7
INT 21H

XOR CX/CX
XOR DX/DX
MOV AX/4
INT 33H

MOV AH/7
INT 21H

INT 20H
END START

مويد باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 28 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۶۵ مراجعه امروز
۴۵۸۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 28
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۰۳ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 28
بكارگرفتن فايلها
ے تا قبل از DOS V.2 سيستم عامل داس براي كنترل فايلها از (Control Block
ے File)FCB استفاده ميكرد . اطلاعات هر فايل (شامل نام ، طول ، مسير و ... ) در
ے FCB قرار داشت و اين باعص ميشد نام فايل هميشه به 12 حرف محدود باشد. بنا
ے براين امكان ذكر مسير فايل به همراه اسم آن نبود . مثلا نميشد فايل SAMPLE.DAT
ے كه در C:\ قرار داشت را بصورت C:SSAMPLE.DAT نوشت . به همين دليل با انجام
ے تغيراتي در ساختار فايل گرداني DOS ، شناسه فايل (File Handle) ابداع شد و در
نگارشهاي 3/3 به بالاي DOS مورد استفاده قرار گرفت .
ے شناسه فايل يك كلمه (Word) 16 بيتي و معرف يك فايل در DOS است . هنگامي كه
ے ميخواهيد با فايلي كاركنيد ، نام آن را به DOS ميدهيد و DOS يك File Handle
به شما ميدهد . بعد از آن فقط با شناسه فايل كار داريم .

ے DOS بهمراه وقفه مخصوص خودش (Int 21h) ، سرويسهائي را بهمراه دارد كه براي
كاربا فايلها بكار ميرود .
ے اساسي ترين كار اينست كه بتوانيم يك فايل ايجاد كنيم . براي ايجاد فايل از
سرويس 3Ch به شكل زير استفاده ميكنيم .
AH=3CH

خصوصيات فايل CX=
اشاره به رشته كاراكتري محتوي نام فايل و مختوم به 0: DS:DX:

ے نام فايل بايد حتما به كاراكتر اسكي 0 مختوم باشد . CX مشخص كننده خصلت فايل
است و از جدول زير بدست مي آيد :
0
: فايل ساده 1
: فايل فقط خواندني 2
: فايل مخفي 4
: فايل سيستمي 8
: اسم ديسك اين خصلت را دارد 10h
: سابدايركتوري

ے مثال : در اين مثال يك فايل به اسم DUMMY.TXT ميسازيم . بعد از اجراي برنامه اگر
ے دستور DIR در سيستم عامل را اجرا كنيد ، فايلي به اسم DUMMY.TXT با طول صفر بايت
مشاهده ميكنيد.

.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
FILE DB 'DUMMY.TXT'/0
MAIN:
LEA DX/FILE
MOV AH/3CH
XOR CX/CX
INT 21H
INT 20H

END START

ے قدم بعدي نوشتن اطلاعات در فايل است . براي نوشتن در فايل ابتدا شناسه فايل را در
ے BX قرار ميدهيم . موقعيت محلي از حافظه كه داده ها از آن خوانده خواهند شد
ے با DS:DX و تعداد بايتهائي كه بايد منتقل شود با CX مشخص ميشود. در نهايت بايد
سرويس 40h را اجرا كنيم .
AH= 40H

اشاره به بافر DS:DX=
تعداد بايتها براي نوشتن CX=
شناسه فايل BX=

ے هر وقت يك فايل را ايجاد يا باز ميكنيم ، بايد آن را ببنديم مقداري از داده هاي
ے آن كه در حافظه مانده اند در فايل نوشته شده و حافظه اختصاص يافته به آن هم آزاد
ے شود . براي بستن يك فايل شناسه فايل را در BX قرار داده و وقفه 21h را با AH=3Eh
اجرا ميكنيم .

مثال :
ے قبلا در برنامه نويسي سيستم تصوير ديديم كه صفحه نمايش VGA در حالت 80x25
ے شامل 4000 بايت (80x25x2) براي كاراكتر و مشخصه است كه از آدرس 0000:َB800 شروع
ے ميشود . در اين مثال برنامه اي مينويسيم كه كل صفحه نمايش را از اين محل خوانده
و در فايل DUMMY.TXT ذخيره كند.

.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
BUF DB 4000 DUP(0)
FILE DB 'DUMMY.TXT'/0
HANDLE DW 0
MAIN:
LEA DX/FILE
MOV AH/3CH
XOR CX/CX
INT 21H
MOV HANDLE/AX

PUSH ES
MOV AX/DS
MOV ES/AX
LEA DI/BUF
PUSH DS
MOV AX/0B800H
MOV DS/AX
XOR SI/SI
MOV CX/4000
REP MOVSB
POP DS
POP ES

MOV AH/40H
MOV BX/HANDLE
MOV CX/4000
LEA DX/BUF
INT 21H

MOV AH/3EH
INT 21H

INT 20H
END START

ے ما همچنين ميتوانيم داده هاي يك فايل را بخوانيم و در محل خاصي از حافظه (معروف
ے به Buffer) قرار دهيم . براي خواندن از فايل سرويس 3Fh را با اين پارامترها بكار
ميبريم .
AH=3FH

شناسه فايل BX=
تعداد بايتها براي خواندن CX=
آدرس بافر براي انتقال داده هاDS:DX=

ے مثال : حالا برنامه اي مينويسيم كه فايل DUMMY.TXT ايجاد شده در مثال قبل را
ے خوانده و داده هاي آن را به بافر صفحه تصوير منتقل كند . به اين ترتيب محتواي
ے صفحه نمايش كه در هنگام اجراي SAVEFILE.COM ( برنامه مثال قبل ) ذخيره شده بود ،
مجددا نمايش داده ميشود.

.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
BUF DB 4000 DUP(0)
FILE DB 'DUMMY.TXT'/0
HANDLE DW 0
MAIN:
LEA DX/FILE
MOV AH/3DH
MOV AL/0 ; READ-ONLY
INT 21H
MOV BX/AX

MOV AH/3FH
MOV CX/4000
LEA DX/BUF
INT 21H

LEA SI/BUF
PUSH ES
MOV AX/0B800H
MOV ES/AX
XOR DI/DI
MOV CX/4000
REP MOVSB
POP ES

MOV AH/3EH
INT 21H

INT 20H
END START

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۶۸ مراجعه امروز
۴۵۸۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۹۴۶ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.
در اين قسمت ميخواهيم با استفاده از مطالبي كه در بخشهاي قبلي ياد گرفتيم
برنامه اي بنويسيم كه كامل و قابل استفاده باشد . با اين برنامه ميتوانيم
فلاپي ديسكهاي خودمان را با سرعت كپي كنيم ! امروز برنامه را به شكلي مينويسيم كه
بتواند ديسكهاي 1.44 را بوسيله درايو A كپي كند . بيشتر نياز ما در كپي (تكثير)
ديسكها هم به همين شكل هست . با اينحال در قسمت بعدي نگارش (Version) جديدتري از
برنامه را مينويسيم و قابليت تشخيص نوع ديسك و قابليت مشخص كردن درايو را به آن
اضافه ميكنيم .
بهترين كاري كه ميتوانيم بكنيم اينست كه بتوانيم داده هاي خوانده شده از
ديسك را در حافظه EMS بنويسيم (در اين نسخه روي هاردديسك مينويسيم ) . وقتي كه
نحوه كار را حافظه گسترش يافته (Extended Memory) را هم ياد گرفتيم ، برنامه
خود را كامل كرده و از آن بعنوان اولين دستختمان در برنامه نويسي اسمبلي لذت
ميبريم .
ليست برنامه در زير قرار دارد و توضيحات برنامه را روي آن ميبينيم
قبل از آن ياد آوري ميكنم كه هر ديسك HD َ1.44 داراي دو طرف و در هر طرف 80 شيار
(Track) بوده و هر شيار هم به 18 بخش بنام قطاع (Sector) تقسيم ميشود . برنامه
ما بايد محتواي تمام اين قطاعها را خوانده و در فايلي روي ديسك سخت ذخيره كند.
سپس همين داده ها را از فايل خوانده و مجددا روي ديسك جديد بنويسد.

طول هر قطاع 512 بايت است EQU 512 SECTORSIZE
تعداد شيار ها 80 شيار (79- 0-) است EQU 79 MAXTRACK
هر ديسك دو طرف دارد EQU 2 NUMSIDES
تعداد سكتور در هر شيار 18 تا است EQU 118 SECTOR_PER_TRACK E
.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN

بافر براي ذخيره (0)BUF DB SECTORSIZE*SECTOR_PER_TRACK DUP
داده ها . اندازه آن به اندازه بايتهاي يك شيار است
معرف رويه فعلي ديسك SIDE D DB 0
معرف تراك جاري TRACK DDB 0
هندل (مشخصه ) فايل HANDLE DW 0

اسم فايل براي دخيره موقت داده ها FILENAME DB 'C:TTEMP.$$$'/0

MSG1 DB 'ENTER A DISK INTO DRIVE A :THEN PRESS A KEY'/13/10/'$'
MSG2 DB 'ENTER A NEW DISK INTO DRIVE A :THEN PRESS A KEY'/13/10/'$'

رويه ReadTrack داده هاي يك شيار را بطور كامل ميخواند . براي خواندن يك شيار
كامل از Int 13h/Ah=02h استفاده كرده ايم . داده ها بعد از خوانده شدن در محلي
كه با ES:BX مشخص ميشود ذخيره ميشوند . (به مرجع اينتراپيتها مراجعه كنيد) قبلا
كار با اين وقفه را توضيح داده ايم (برنامه Boots.asm را ببينيد)

READTRACK PROC ;READ A TRACK
PUSH ES
MOV AX/DS
MOV ES/AX
LEA BX/BUF
MOV AH/2
MOV DL/0 ;DRIVE A:
MOV DH/SIDE
MOV CH/TRACK
MOV CL/1 ;THE 1st SECTOR
MOV AL/SECTOR_PER_TRACK
INT 13H
POP ES
RET
READTRACK ENDP

اين رويه داده هاي موجود در BUF را خوانده و در يك شيار كامل كه با متغير Track
مشخص ميشود مينويسد . براي اينكار از INT 13h/AH=03h استفاده شده است . آدرس
متغير BUF را بايد در ES:BX قرار بدهيم .

WRITETRACK PROC
LEA BX/BUF
PUSH ES
MOV AX/DS
MOV ES/AX

شماره تابع براي نوشتن MOV AH/03
تعداد سكتورها براي نوشتن MOV AL/SECTOR_PER_TRACK
شماره تراك MOV CH/TRACK
شماره سكتور شروع MOV CL/1
رويه ديسك (طرف ديسك ) MOV DH/SIDE
شماره درايو كه اينجا A است MOV DL/0 INT 13H
POP ES
RET
WRITETRACK ENDP

اين پروسيجر به اندازه يك تراك كامل از فايل خوانده و در متغير BUF قرار ميدهد
READFILE PROC
MOV BX/HANDLE

اندازه يك تراك MOV CX/SECTORSIZE*SECTOR_PER_TRACK
آدرس بافر براي ذخيره كه DS:DX است LEA DX/BUF MOV AH/3FH
INT 21H
RET
READFILE ENDP

اين پروسيجر كليه داده هاي داخل BUF كه به اندازه يك تراك كامل (18*512 بايت )
است را خوانده و در فايل مينويسد تا بعدا مجددا خوانده و روي ديسك جديد بنويسد

WRITEFILE PROC
MOV BX/HANDLE
MOV CX/SECTORSIZE*SECTOR_PER_TRACK
LEA DX/BUF
MOV AH/40H
INT 21H
RET
WRITEFILE ENDP

منتظر ميماند تا كليدي فشرده شود WAIT PPROC
تابع خواندن كليد MOV AH/0 INT 16H
RET
WAIT _ENDP

اين رويه فايل با هندل مشخص شده را ميبندد CLOSEFILE PROC MOV AH/3EH
MOV BX/HANDLE
INT 21H
RET
CLOSEFILE ENDP

شروع برنامه اصلي . MAIN:

در اين قسمت اعذم ميكنيم كه ديسكي را در درايو A قرار دهده و كليدي را
برنند . MOV AH/9
LEA DX/MSG1
INT 21H

مكث براي دريافت كليد _CALL WAIT

ساختن فايل براي ذخيره داده ها MOV AH/3CH
LEA DX/FILENAME
MOV CX/0
INT 21H

MOV SIDE/0
MOV HANDLE/AX
MOV TRACK/1

موتور ديسك خوان مدت زماني لازم دارد تا به سرعت كافي برسد . بنا براين بايد
يك يا دو بار قبل از خواندن ديسك ، تابع خواندن را اجرا كنيم تا موتور ديسك در
حالت مناسب قرار بگيرد.
CALL READTRACK ; START UP THE CASSETTE-MOTOR
COPY:
MOV TRACK/0
COPYTRACK:

خواندن شيار CALL READTRACK
نوشتن داده هاي خوانده شده در ديسك CALL WRITEFILE
شيار بعدي INC TRACK
آيا شيار80 هستيم / CMP TRACK/80
نه ، شيار بعدي TRACKS َ; COPY 80 JNZ COPYTRACK

طرف بعدي ديسك INC SIDE
آيا طرف دوم ديسك هستيم ? CMP SIDE/1
نه ، پس ادامه بده JZ COPY
وگر نه فايل را ببند CALL CLOSEFILE

حالا اعلام ميكنيم كه ديسك جديد را در درايو A قرار دهد و كليدي را بزند MOV AH/09H
LEA DX/MSG2
INT 21H
CALL WAIT_

MOV SIDE/0

همان فايل را براي خواندن باز ميكنيم . وقتي كه فايلي را ميسازيم تنها ميتوانيم
در آن فايل بنويسيم . بنا براين براي خواندن از فايل ، بايد آن را بسته و مجددا
براي خواندن باز كنيم . LEA DX/FILENAME
MOV AH/3DH
MOV AL/0
INT 21H

مشخصه فايل در Handle قرار ميگيرد MOV HANDLE/AX

MOV TRACK/1
MOV SIDE/0

اجراي تابع نوشتن براي راه اندازي موتور ديسك CALL WRITETRACK
WRITE:
MOV TRACK/0
WRITE_ON_TRACK:

داده هارا از فايل بخوان CALL READFILE
داده ها را روي شيار بنويس CALL WRITETRACK
شيار بعدي INC TRACK
آيا شيار 80 هستيم ? CMP TRACK/80
نه ، پس ادامه بده JNZ WRITE_ON_TRACK
بله ، طرف بعدي ديسك INC SIDE
آيا الان طرف دوم را هم خوانده ايم ? CMP SIDE/1
نه ، پس شيار بعدي را بنويس JZ WRITE
بله ، فايل را ببند CALL CLOSEFILE

فايلي كه ساخته بوديم فضائي از ديسك سخت را اشغال كرده ، بنا براين بهتر است
آن را با استفاده از وقفه 21h و تابع 3Ah حذف كنيم . LEA DX/FILENAME
MOV AH/3AH
INT 21H ;ERASE THE TEMPORARY FILE
INT 20H
END START

تمام (:

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 3 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۷۱ مراجعه امروز
۴۵۸۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 3
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۴۴ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 3

تا اينجا ياد گرفتيم كه چطور مقادير را بين ثباتها منتقل كنيم : با فرمان MOV.
با همين دستور ميتوانيم مقادير را از محلهاي حافظه خوانده يا در آنجا بنويسيم .
براي كار با حافظه دوحالت ممكن است وجود داشته باشد : 1
- آدرس مورد نظر در سگمنت جاري باشد . در برنامه هاي COM. كل برنامه (غالبا)
از يك سگمنت تشكيل ميشود . 2
- آدرس مورد نظر خارج از سگمنت جاري باشد .

ثبات DS هميشه به قطعه اي اشاره ميكند كه داده هاي مورد نياز برنامه در آن
هستند . اين قطعه در برنامه هاي EXE. يك قطعه مستقل است ولي در برنامه هاي COM
. ، قطعه داده هاي و قطعه كد برنامه در يك سگمنت هستند . بنا براين مقدار
ثبات DS در يك برنامه COM. ثابت است .
در حالت كلي آدرس يك محل از حافظه بصورت DS:address مشخص ميشود. DS حاوي
آدرس سگمنت داده ها بوده و address آفست را مشخص ميكند .
چون همانطور كه گفتيم DS در برنامه هاي COM. ثابت است ، پس در صورتي كه آدرس
مورد نظر در همين قطعه باشد از نوشتن DS صرفنظر ميكنيم .
به عنوان مثال اگر قطعه داده هاي برنامه ما 9000h باشد و ما بخواهيم آفست 24h
ام در همين قطعه را بدست بياوريم ، ميتوانيم از يكي از دو شكل زير استفاده
كنيم :
DS:24h
or
24h

البته چون اسمبلر منظور ما از نوشتن عدد 24h را نخواهد فهميد شكل دوم يك خطاي
هنگام ترجمه توليد خواهد كرد ولي ما روش صحيح را هم خواهيم گفت .
ما آدرس ها (يا اشاره گرها) را براي اين ميخواهيم كه بتوانيم به يك خانه از
حافظه دسترسي پيدا كنيم . براي اينكه نشان بدهيم منظور ما از عدد مشخص شده ،
آدرس است نه خود عدد (مثل 24h در مثال قبلي ) آن عدد را داخل [] قرار ميدهيم .
بنا براين :
mov ah/24h عدد 24h را به AX منتقل ميكند ولي ....
mov ah/[24h] محتواي آفست 24h را به AX منتقل ميكند .

در شكل دوم هر مقداري كه در آفست 24h ام سگمنت جاري موجود باشد به ثبات Ah
منتقل ميگردد.
به همين صورت ميتوانيم يك مقدار را به يك خانه از حافظه منتقل كنيم : mov [24h]/ah
: محتواي ثبات AH را به آفست 24h ام منتقل ميكند .
ے اگر آدرس مورد نظر خارج از محدوده سگمنت جاري بوده و در قطعه اي جدا قرار داشته
باشد ، ميتوانيم از DSيا ESا (ترجيحا) براي دستيابي به حافظه استفاده كرد:
مثال : mov ax/9000h
mov ds/ax
mov ah/ds:[89h]

به اين ترتيب ما به آفست 89h از سگمنت 9000h دسترسي پيدا ميكنيم .
البته دستورات فوق مارا به مقصودمان ميرسانند ولي ما نميتوانيم به دلخواه خودمان DS
را تغيير دهيم چون همانطور كه گفتيم DS به قطعه داده هاي برنامه اشاره ميكند و
برنامه ، داده ها و مقادير متغير ها را از سگمنتي كه با DS مشخص شده ميخواند .
بنا براين ما نبايد مقدار DS را تغيير بدهيم مگر اينكه آن را دوباره به حالت اول
برگردانيم . براي ذخيره و بازيابي محتواي رجيسترها، يك روش ساده و عمومي وجود
دارد كه به زودي خواهيم گفت ولي در اين مثال ما ميتوانستيم مقدار قبلي DS را در
يك رجيستر ديگر مثل CX نگهداريم :

انتقال محتواي dsبه AX mov ax/ds
انتقال محتواي AXبه CX mov cx/ax
دادن مقدار9000hبه AX mov ax/9000h
انتقال محتواي AXبه DS mov ds/ax
خواندن آدرس mov ah/ds:[89h]
بازيابي مقدار DS mov ax/cx mov ds/ax

اگر بخواهيم آفست آدرس را با يك رجيستر مشخص كنيم بايد به نكات زير توجه
كنيم : 1
- اگر آدرس سگمنت با DS مشخص شده ، يا آدرس در سگمنت جاري باشد ، بايد
مقدار آفست را در ثبات BX قرار دهيم . مثلا mov cx/[BX]يا mov cx/ds:[bx]ا .
2
- اگر از ES به عنوان مقدار سگمنت استفاده ميشود بايد از DI به عنوان آفست
استفاده كنيم مثل mov cx/es:[di] .

چون ما با برنامه هاي COM. سرو كار داريم ، پس از شكل اول و BX استفاده خواهيم
كرد .
دستيابي به مكانهاي حافظه نكته هاي جالب ديگري هم دارد كه در قسمت بعدي ياد
خواهيم گرفت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 30 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۷۴ مراجعه امروز
۴۵۹۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 30
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۳۷ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 30
دسترسي به پورتهاي كامپيوتر

تا اينجا برنامه نويسي خيلي از اجزاي كامپيوتر مثل صفحه كليد ، صفحه نمايش ،
ديسك و .. را ديديم . براي برنامه ريزي اينها از وقفه هاي BIOSيا DOSا استفاده
كرديم . وقفه هاي ياد شده همه زير برنامه هائي هستند كه به محض اجرا ، زير
برنامه هاي ديگري كه در بخشي از ROM كامپيوتر قرار دارند را به اجرا در مي
آورند . اين بخشها همگي داراي آدرسهائي هستند كه خارج از حوزه آدرس دهي CPU
قرار دارند . يعني نميتوان با الگوي Segment:Offset به آنها دسترسي پيدا كرد . در
عوض داراي شماره خاصي هستند كه به شماره Port معروفست . از طريق اين پورتها
ميتوانيم مستقيما و بدون واسطه به راهبري اجزاي كامپيوتر بپردازيم . مثلا ميتوانيم
با استفاده از پورت شماره 60h ، كار صفحه كليد را كنترل كنيم يا اينكه پورتهاي
...37Ah/379h/ به كنترل پورت موازي و چاپگر بپر دازيم . همينكار را وقفه 17h
(دسترسي به چاپگر) هم انجام ميدهد اما اين وقفه فقط براي كار با چاپگر طراحي شده
و نميتوانيم با استفاده از آن كار ديگري انجام بدهيم .

دستورات مربوط به پورتها

به هر پورتي ميتوان يك عدد تك بايتي فرستاد يا از آن خواند. براي نوشتن
در يك به روش زير عمل ميكنيم :
1- اگر عدد پورت كوچكتر از 255 باشد ، ميتوانيم با استفاده از دستور OUT و
بطور مستقيم عدد را به پورت بفرستيم . يعني بصورت OUT Portnumber/Value

مثال : OUT 80h/60
2
- اگر عدد مربوط به پورت از 255 ( يك بايت ) بيشتر باشد ، بايد ابتدا آن
را در ثبات DX قراردهيم ، سپس با استفاده از OUT ، مقدار را به پورت
بنويسيم .
مثلا براي نوشتن در پورت 3F8h ابتدا آن را در DX قرار ميدهيم و بعد عدد
را به پورت مشخص شده با DX انتقال ميدهيم . mov dx/3F8h
out dx/0FFh

در اين حالت يك بايت قابل انتقال است . براي ارسال يك عدد دوبايتي بايد
به سراغ نيم ثبات AL برويم . به اينصورت كه ابتدا 8 بايت سمت پائين
(سمت راست ) را در AL قرار داده و به پورت ميفرستيم . بعد بلافاصله 8 بايت
بالا را به همين ترتيب در پورت قرار ميدهيم . مثلا فر ض كنيد ميخواهيم عدد 0AFDh
را به پورت 61h بفرستيم :

mov ax/0AFDh
out 61h/al
shr ax/8
out 61h/al

براي خواندن پورت هم اگر شماره پورت از 255 بزرگتر باشد ، آن را در DX قرار
ميدهيم . وقتي ميخواهيم پورتي را بخوانيم ، بايد حتما اين كار را با كمك نيم
ثبات AL ، و با استفاده از دستور IN انجام دهيم . يعني بصورت :
IN AL/PortNo .

مثلا براي خواندن پورت 71h ، عبارت IN AL/71h را بكار ميبريم .

مثال :
عددي كه در پورت 61h قرار دارد براي بكار انداختن بلند گوي كامپيوتر بكار ميرود
( و برعكس براي از كار انداختن ) . اگر 3 بيت انتهائي آن 1 باشند ، بلندگوي
كامپيوتر ( با مشخصاتي كه در پورت هاي 41h و 43h قرار ميدهيم ) شروع به توليد
صوت ميكند . و اگر آن بيتها را بازهم 0 كنيم ، بلندگوي كامپيوتر از كار باز مي
ايستد . در اين برنامه بلند گوي كامپيوتر به كار مي افتد و بعد از فشردن يك
كليد مجددا" خاموش ميشود.

.MODEL SMALL
.CODE
ORG 100H
START:
IN AL/61H
OR AL/00000111B
OUT 61H/AL

XOR AH/AH
INT 16H

IN AL/61H
AND AL/11111000B
OUT 61H/AL

INT 20H
END START

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 4 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۷۷ مراجعه امروز
۴۵۹۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 4
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۱۸ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 4

وقتي كه ما به روش گفته شده مقداري را از حافظه ميخوانيم ، يك داده تك بايتي
از حافظه گرفته ميشود . اما ممكن است بخواهيم كه يك كلمه يا كلمه
مضاعف ( 4بايتي ) را بخوانيم يا بنويسيم . در اين صورت ميتوانيم از
پيشوند هاي زير استفاده كنيم :
Byte Ptr
: براي دست يابي به يك بايت Word Ptr
: براي دستيابي به يك كلمه (2بايت ) Dword Ptr
: براي دست يابي به يك مقدار 4 بايتي

اين پيشوند ها را بايد قبل از آدرس مورد نظر قرار دهيم . به عنوان مثال براي
خواندن يك بايت از آفست 10h ميتوانيم بنويسيم : mov al/byte ptr ds:[10h]

و براي خواندن دو بايت بصورت : mov ax/byte ptr ds:[10h] .
ميتوانيم از همين روش استفاده كرده و مقداري را به حافظه انتقال دهيم . مثلا
ميخواهيم يك كلمه دوبايتي را به آفست 34h (در سگمنت برنامه ) منتقل كنيم . كافي
است بنويسيم :

mov word ptr [34h]/1FCAh .
مثال :
mov bx/34h
mov ax/ds
mov cx/ax
mov ax/00h
mov ds/ax
mov ax/word ptr ds:[bx]
mov ax/cx
mov ds/ax

جمع و تفريق

بحث ما در مورد روشهاي دستيابي و انتقال داده ها (فعلا) به پايان ميرسد . حالا
ميخواهيم ببينيم كه چطور عمل جمع و تفريق ، و بعدا ضرب و ... ، را روي مقادير
انجام دهيم .

دستورالعمل ADD به ميزان خواسته شده به محتواي يك رجيستر يا متغير اضافه ميكند .
ےمثلا ADD AH/20 عدد 20 را به AH اضافه كرده و مجددا در AH قرار ميدهد . اگر مقدار
فعلي AH برابر 30 باشد بعد از اجراي آن دستور برابر 50 ميشود .
بايد توجه كنيم كه حاصل بدست آمده از محدوده مجاز تجاوز نكند . در اين مثال اگر
حاصل جمع عدد 20 با محتواي AH بزرگتر از 255 باشد ، خطاي سرريز (Over Flow) رخ
ميدهد .
مثال : اين دستورات را در ديباگ وارد كنيد : mov ax/5
add ax/4
int 20

(به معني سطر آخر توجه نكنيد) . حالا يكبار ديگر Enter را بزنيد تا خط اعلان Debug
ظاهر شود . حرف G را بزنيد تا برنامه شما اجرا شود . حالا فرمان آشناي R را براي
ديدن محتواي رجيسترها وارد كنيد و مقدار AX را ببينيد .

دستورالعمل SUB برعكس ADD بوده و به مقدار خواسته شده از محتواي يك ثبات يا
متغير كم ميكند . مثلا SUB AX/100h به اندازه 256 (100h) از AX كم كرده و نتيجه را
دوباره در AX قرار ميدهد .

مثال : mov bbx/100h SUB bx/50

در اين مثال حاصل bx را از 100 به 50 كاهش داده ايم .
فرمان INC يك حالت خاص از ADD بوده و تنها يكواحد به محتواي ثبات اضافه ميكند
مثلا inc cx يعني يك واحد به cx اضافه كن .
و برعكس اين ، دستور dec يكواحد از محتواي ثبات كم ميكند . مانند : dec cx .
ے بايد توجه كنيم كه اين دستورات تنها روي ثباتهاي همه منظوره DX.AX.D قابل
استفاده هستند .

پس امروز مطالب مربوط به اينها رو ياد گرفتيم :
byte ptr / word ptr / dword ptr
add / sub / inc / dec

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 5 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۸۰ مراجعه امروز
۴۵۹۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 5
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۱۰۵۲ بار مطالعه شده است
۱۲ نفر تا به حال به اين مقاله رای داده اند.

اسمبلي ياد بگيريم - 5

وقفه ها (Interrupts) CPU
براي اينكه بتواند كارهاي مختلفي را انجام دهد،از وقفه ها استفاده ميكند . يك
ےوقفه درخواستي از CPU است كه در طي آن زير برنامه اي اجرا ميشود. وقتي كه وقفه
فراخواني ميشود، CPU اعمال ديگر را متوقف كرده و آن اينتراپت را پردازش ميكند
به طور كلي وقفه ها به دودسته تقسيم ميشوند:
ےَ1- وقفه هاي سخت افزاري (Hardware Interrupts) . وقفه هائي هستند كه از سوي
ے ادوات سخت افزاري كامپيوتر مانند كيبورد و ... اجرا ميشوند. مثلا با فشرده يارها
شدن هر كليد ، يكبار وقفه شماره 9 فراخواني ميشود. 2
- وقفه هاي سخت افزاري (SoftWare Interrupts). اين وقفه ها در بايوس (BIOS)
كامپيوتر قرار دارند. بايوس كامپيوتر يك تراشه (IC) قابل برنامه ريزي است كه
بنا بر نوع پردازنده بر روي برد اصلي كامپيوتر قرار ميگيرد . بعلاوه خود DOS
نيز وقفه اي (وقفه 21h) را اداره ميكند كه به وقفه DOS معروف است . اين توابع
توسط MSDOS.SYS تعريف ميشوند ولي در نهايت به بايوس مراجعه ميكنند.
هر وقفه داراي يك شماره خاص خود است و از صفر شروع ميشود . وقفه 21h (سرويس DOS
) نيز داراي 255 سرويس ديگر است .
براي اينكه بتوانيم يك برنامه خوب و مفيد بنويسيم بايد بتوانيم از اينتراپتها
به نحو صحيح استفاده كنيم . پس هر برنامه نويس اسمبلي بايد يك مرجع كامل
اينتراپت در اختيار داشته باشد.
وقتي ميخواهيم يك وقفه را فراخواني كنيم ، ابتدا (درصورت لزوم ) ثباتهاي خاصي را
مقدار دهي ميكنيم . معمولا نيم ثبات AH ، از اين جهت كه اكثر اينتراپتها
داراي چند سرويس مختلف هستند ، شماره تابع را مشخص ميكند . بهمين صورت ، و
اگر لازم باشد ، ثباتهاي ديگر را هم مقدار دهي ميكنيم . مثلا فرض كنيد ميخواهيم
كليدي را از صفحه كليد بخوانيم . تابع شماره 0 از وقفه 16h ميتواند اين كار را
انجام دهد . وقتي ميگوئيم تابع شماره 0 ، يعني بايد به AH مقدار 0 بدهيم و بعد
اينتراپت 16h را فراخواني كنيم .
فراخواني اينتراپت به سادگي و با دستورالعمل INT انجام ميشود. به صورت :
INT int_no

كه int_no شماره اينتراپت ميباشد . در مورد اين مثال بايد دستورات زير را انجام
دهيم : mov ah/0
int 16h

وقتي يك وقفه فراخواني ميشود ، ممكن است روي ثباتها تاثير گذاشته و مقدار آنها
را عوض كند. به اين وسيله ما ميتوانيم وضعيت اجراي وقفه را بدست بياوريم . در
مورد اين مثال ، پس از خوانده شدن كليد ، كد اسكي (ASCII) كليد در ثبات AL قرار
ميگيرد . مثلا اگر حرف A تايپ شود ، مقدار AL برابر 65 خواهد بود.
حالا اگر عدد AH را قبل از فراخواني وقفه بجاي 1 برابر Eh قرار دهيم و وقفه 10hرا
اجرا كنيم ، بجاي خواندن كليد، يك كاراكتر را چاپ ميكند . به اين صورت كه كد
اسكي كاراكتر در ثبات AL و عدد Eh در ثبات AH قرار گرفته و وقفه 10h فراخواني
ميشود . mov AX/0E07h
in 10h

به سطر اول توجه كنيد !. وقتي ما يك عدد دوبايتي (Hex) را به AX ارسال ميكنيم ،
دوبايت بالا در AH و دوبايت پائين در AL قرار ميگيرد . پس در اين مثال كاراكتر
شماره 7 بايد چاپ شود و چون اين كد مربوط به كاراكتر Bell است ، صداي بيپ
شنيده خواهد شد.

خاتمه دادن به برنامه :
وقتي كه يك برنامه به انتها رسيد يا اگر خواستيم اجراي برنامه را متوقف
كنيم ، ميتوانيم از اينتراپت 20h استفاده كنيم . DOS هميشه و بمحض اجراي اين
وقفه ، اجراي برنامه را متوقه ميكند.
اينراپت 20h فقط با برنامه هاي COM. درست كار ميكند و در مورد برنامه هاي EXE.
درست جواب نميدهد . در عوض سرويس 4Ch از اينتراپت 21h در هر دونوع برنامه
بخوبي كار ميكند .
خوب ، حالا با مطالبي كه ياد گرفتيم يك برنامه اسمبلي نوشته و فايل COM. آن را
ميسازيم .
بنابر اين در محيط DOS، DEBUG، را اجرا كنيد .
D:\MASM>DEBUG

سپس دستورد A را به معني شروع دستورات اسمبلي وارد كنيد : - A
xxxx:0100

به عدد آدرسي كه ديده ميشود توجه نكرده و دستورات زير را تايپ كنيد . mov ah/2
mov al/7
int 16
int 20

بعد از تايپ آخرين سطر، يكبار ديگر هم كليد Enter را بزنيد تا اعلان debug مجددا
ظاهر شود. حالا دستور N را براي نامگذاري برنامه بكار ببريد: - N BELL.COM

بعد از آن بايد طول برنامه را ، برحسب بايت ، مشخص كنيم . طول برنامه در ثبات CX
نگهداري ميشود پس از فرمان RCX براي مقدار دهي استفاده ميكنيم . (طول برنامه 8
بايت است ) . - RCX
8

و در نهايت فرمان w براي نوشتن روي ديسك و Q براي خروج . حالا ما يك فايل COM.
داريم كه به محض اجرا يك صداي Beep توليد ميكند .

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 6 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۸۳ مراجعه امروز
۴۵۹۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 6
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۹۸۵ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 6
در اين قسمت طرز استفاده از ماكرواسمبلر را ياد ميگيريم و برنامه هايمان را بدون
استفاده از Debug مينويسيم .
براي استفاده از اسمبلر بايد يك اديتور اسكي مثل EDITيا PE2ا داشته باشيد تا
بتوانيد برنامه هايتان را توسط آن تايپ كنيد . هر برنامه اسمبلي داراي يك فايل
منبع (Source) حاوي دستورالعملهاي اسمبلي است . ما اين فايل را با يك ويرايشگر
تايپ كرده و به ماكرواسمبلر MASM.EXE ميدهيم تا فايل مفعولي (OBJ.) آن را بسازد
. اين فايل هم بايد با برنامه Link.exe به فرم EXE. تبديل شود . چون ما ميخواهيم
برنامه هاي COM. بتويسيم بايد فايل exe. توليد شده را با EXE2BIN.COMيا EXE2COMا
به فرم com. تبديل كنيم .
فرض كنيد در محيط ويرايشگر(مثلا EDIT ) هستيم و ميخواهيم يك برنامه اسمبلي
بنويسيم .
هر برنامه از 3 قطعه (سگمنت ) تشكيل ميشود : 1
-قطعه داده ها يا DATA SEGMENT . متغيرهاي برنامه و ساير داده هاي مورد نياز در
اين سگمن قرار ميگيرند . 2
- قطعه كد يا Code Segment . كدها و دستورات اسمبلي در اين قسمت هستند . 3
- بخش انباره يا Stack Segment . اين قطعه زير برنامه ها و مقادير موقتي را
نگهداري ميكند . ما حتي ميتوانيم محتواي ثباتها را به پشته (Stack) منتقل كرده و
بعد دوباره از آن خارج كنيم .
در يك برنامه COM. قطعه داده ها و قطعه مد در يك سگمنت قرار دارند بنا براين
ما قطعه داده ها را تعريف نميكنيم . بعلاوه قطعه سگمنت هم براي يك فايل COM.
وجود ندارد بلكه خود DOS اين محيط را فراهم ميكند . به همين دلايل است كه نوشتن
برنامه هاي COM. آسانتر است . با اين حال ما با محدوديتي مواجه هستيم و آن
اينست كه سايز يك برنامه COM. نميتواند بيش از 64 كيلو بايت باشد .
فرض كنيد ميخواهيم همان برنامه اي كه صداي Beepتوليد ميكرد را با اسمبلر بنويسيم
پس يك فايل (مثلا bell.asm) ميسازيم : EDIT BELL.ASM
حالا ما در محيط ويرايشگر هستيم . برنامه ما به اين شكل خواهد بود :

. MODEL SMALL
. CODE
MOV AH/0EH
MOV AL/7
INT 10H
INT 20H
END

در سطر اول ، جمله model small. يك رهنمود مترجم است . رهنمودهاي مترجم
كداجرائي نيستند ولي اسمبلر را در ترجمه برنامه راهنمائي ميكنند . MODEL SMALL.
به اسمبلر ميگويد كه ما ميخواهيم برنامه com. بنويسيم و قطعه داده ها و كدها
مشترك است . اين جمله بايد هميشه وجود داشته باشد. CODE
. ميگويد كه قسمت كدهاي اجرائي شروع ميشود . ما بايد هميشه دستوراتمان را
بعد از يك CODE. شروع كنيم و در انتها نيز جمله END را به معني اتمام برنامه
بنويسيم .
بعد از اتمام اين مراحل از ويرايشگر خارج شده و با MASM.EXE فايل برنامه را ترجمه
ميكنيم : MASM BELL.ASM
در پرسشهاي masm كليد enter را بزنيد . اگر برنامه را صحيح تايپ كرده باشيد بايد
اين پيغامها را دريافت كنيد :

Microsoft( R )Macro Assembler Version 5.10
Copyright( C )Microsoft Corp 1981/ 1988 .All rights reserved.
50084 + 396073 Bytes symbol space free
0 Warning Errors
0 Severe Errors

حالا فايل BELL.OBJ ساخته شده و بايد آن را لينك كنيم : LINK BELL.OBJ

و نتيجه اين خواهد بود:

Microsoft( R )Overlay Linker Version 3.69
Copyright( C )Microsoft Corp 1983-1988 .All rights reserved.

:Run File [ASM6.EXE]
فقط Enter بزنيد | :List File [NUL.MAP]
:Libraries [.LIB] LINK : warning L4021 :no stack segment

سطر آخر يك پيغام خطا است ولي دقيقا همان چيزي است كه انتظار داريم . يعني
وجود نداشتن قطعه پشته (Stack) . به همين دليل برنامه EXE. توليد شده توسط Link
قابل اجرا نيست . پس با EXE2COM آن را به يك فايل COM. تبديل ميكنيم . EXE2COM BELL.EXE

و داريم :

EXE2COM Version 1.0( - c )Computer Magazine
ASM6.EXE converted to ASM6.COM( 8 Bytes )
Warning :Program begins at Offset 0( Entry point .)
ASM6.COM cannot be called directly!

الان فايل COM. هم توليد شد ولي EXE2COM ميگويد كه ما نميتوانيم برنامه را
فراخواني و اجرا كنيم . چرا!?
اگر بياد داشته باشيد وقتي ميخواستيم در DEBUG اسمبلي بنويسيم ، دستوراتمان هميشه
از آدرس xxxx:0100h شروع ميشد. دليل آن اينست كه DOS هميشه يك فضاي 256 بايتي
بنام PSP در ابتداي برنامه ايجاد كرده و اطلاعات فوق العاده مهمي را در آن
نگهداري ميكند . بنا براين برنامه ما بايد حتما از آدرس 100h شروع شود . اين
قانون اسمبلر براي نوشتن برنامه هاي COM. است . پس كد برنامه را به شكل زير
اصلاح كنيد :

. MODEL SMALL
. CODE

دستورالعمل جديد ORG 100H MOV AH/0EH
MOV AL/7
INT 10H
INT 20H
END

راهنماي Org 100hبه DOS ميگويد كه برنامه بايد از آدرس 100h شروع شود . ما اين
كد را اجبارا در همه برنامه ها قرار خواهيم داد . حالا برنامه را با تغييرات اعمل
شده ذخيره كرده و با انجام مراحل قبلي دوباره ترجمه كنيد . پس از ترجمه فايل BELL.COM
را اجرا كرده و نتيجه را مشاهده كنيد %

امروز برنامه اي با اسمبلر نوشيتم . از اين پس نيز تمام برنامه هاي را با
اسمبلر مينويسيم و از توانائيهاي آن استفاده ميكنيم .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 7 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۸۶ مراجعه امروز
۴۶۰۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 7
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۷۳ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 7
پرشهاي غير شرطي

ے اگر با زبانهائي مثل Basicيا Pascalا برنامه نويسي كرده باشيد حتما از دستور Goto
ے هم استفاده كرده ايد . بوسيله اين فرمان ، ما ميتوانستيم روال اجراي برنامه را به
يك نقطه مشخص انتقال بدهيم بدون اينكه نياز به برقراري شرط خاصي باشد .
در زبان اسمبلي هم چنين دستوري داريم : دستورالعمل JMP (مخفف JUMP) .
دستور JMP به اين شكل استفاده ميشود:
برچسب JMP
ے منظور از برچسب مكاني از برنامه است . در اسمبلي براي اينكه يك نقطه از برنامه
ے را علامت بزنيم ، نام برچسب مورد نظر را مينويسيم و براي اينكه اسمبلر آن را با
ے يك دستورالعمل اجرائي اشتباه نكند، كاراكتر (:) را در مقابل آن قرار ميدهيم
مانند: :Start
سپس ميتوانيم با دستور JMP به آنحا پرش كنيم : Start :
:
:
Jmp Start

دقت كنيد كه بعد از Start ي كه در مقابل JMP نوشتيم علامت : قرار نداده ايم .
ے اين JMP ها از نوع JUMP NERA هستند و نوعي ديگر بنام JUMP FAR هم داريم كه بزودي
آن را هم ياد ميگيريم .
ے مثال : برنامه اي كه در مثالهاي قبل نوشتيم را در نظر بگيريد . اگر ما از روي
دستورالعملهاي برنامه با JMP پرشي انجام دهيم هيچكدام از آن كدها اجرا نخواهندشد:

1] JMP Quit _
2] mov ax/0E07h
3] int 10h
4] Quit :_
5] int 20h

برنامه از روي سطرهاي 2وَ3 پرش خواهد كرد .

ثبات پرچم (Flags)

ے ثبات پرچم يك ثبات 16 بيتي است كه 1يا 0ا بودن بيتهاي آن نشانه درست يا
ے نادرست بودن يك شرط است . مثلا اگر با دستورالعمل خاصي (ميخوانيم ) تست كنيم
كه آيا ثبات BX مقدار 0 را دارد ، در اين صورت بيت 6 برابر 0 ميشود و ... .
از اين 16 بيت فقط 9 بيت استفاده ميشود كه به شرح زير هستند :
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
* * * * * O D I T S Z * A * P * C

علامت * به معناي بي استفاده بودن است .

ے 1- پرچم نقلي يا (CF) . بيت 0 در نتيجه اجراي وقفه ها يا بعضي اعمال حسابي تغيير
ميكند .
ے 2-پرچم توازن (ZF) . بر اساس يك عمل مقايسه اي يا حسابي تغيير ميكند . اگر
نتيجه يك عبارت 0 باشد مقدار 1 و اگر نتيجه 1 باشد مقدار 0 ميگيرد.
ے 3-پرچم وقفه (IF) . اگر 0 باشد هيچ وقفه اي نميتواند اجرا شود و اگر 1 باشد
ميتوان وقفه ها را فراخواني كرد .

ے و ... . 6 پرچم ديگر را فعلا لازم نداريم بنا براين توضيحي براي آنها ارائه
نميكنيم .

دستور مقايسه اي CMP

ے براي مقايسه مقاديراز دستور CMP (مخفف CoMPare) استفاده ميكينم . اين دستور
ے مقدار داخل يك ثبات يا متغير را با مقداري ديگر مقايسه كره و روي ثبات هاي
ے CFو ZFو تاثير ميگذارد . بعد از مقايسه ميتوانيم بر حسب وضعيت پرچمها پرش
لازم را انجام دهيم .

ے مثلا CMP BX/0 تست ميكند كه آيا مقدار BX برابر 0 است يا نه . در صورتي كه برابر
0
باشد ،پرچم ZF برابر 1 ميشود .
با همين دستور CMP ميتوانيم كوچكتر،بزرگتر و .... را هم تست كنيم .

پرشهاي شرطي

براي پرشهاي شرطي از دستورهاي زير درست مثل JMP استفاده ميكنيم .
ے JE/JZ : اگر محتواي ZF صفر باشد جهش ميكند . اگر دو مقداري كه مقايسه كرده ايم
برابر باشيند پرش انجام ميشود.
ے JNE/JNZ : برعكس JZو JEو هستند و اگر ZF يك باشد (بعبارتي دو مقداري كه مقايسه
كرديم برابر نباشند) جهش انجام ميشود.
ے JA/JNBE . اگر محتواي ثبات يا متغيري كه مقايسه كرده ايم بزرگتر از عدد مورد نظر
باشد پرش انجام ميدهد . مثلا :

mov bh/1
cmp bh/10
ja Dest

ے مقدار BH برابر 1 است و در سطر دوم تست آن را با 10 مقايسه ميكنيم . در سطر سوم
چون BH بزرگتر از 1 نيست ، پس پرش JA Dest انجام نميشود .

JAE/JNB . اگر بزرگتر يا مساوي باشد ، پرش انجام ميشود.
JB/JNAE: در صورتي كه كوچكتر باشد پرش انجام ميشود.
JBE : در صورتي كه كوچكتر يا مساوي باشد پرش انجام ميشود .

مثال :
ے ميخواهيم برنامه اي بنويسيم كه تمام كاراكترهاي بين 128 تا 255 را
چاپ كند.

. MODEL SMALL
. CODE
ORG 100H
START :

كاراكتر 128 براي شروع ; MOV CH/128 CHARS :

كداسكي را درAL قرار ميدهيم تا چاپ شود ; MOV AL/CH
سرويس 0Eh براي چاپ كاراكتر ; MOV AH/0EH
اينتراپت 10h ; INT 10H
يكواحد به CH اضافه كن ; INC CH
مقايسه CH با 255 ; CMP CH/255
اگر مساوي نباشد به CHARS پرش ميكند ; JNZ CHARS
پايان ; INT 20H END START

ے تمام برنامه ساده و روشن است ولي در سطر آخر نكته جديدي وجود دارد . بعد از
ے END نام برچسب Start را آورده ايم . نكته اي كه در نوشتن برنامه هاي اسمبلي بايد
ے مراعات كنيم اينست كه : اگر از برچسبي در برنامه استفاده ميكنيم ، اسمبلر بايد
ے يك برچسب را به عنوان نقطه آغاز كدبرنامه ببيند . به همين خاطر علاوه بر برچسب
ے CHARS يك برچسب بنام Start هم در ابتداي برنامه تعريف كرده و براي اينكه
ے اسمبلر بداند مما كدام برچسب را براي انيكار اينخاب كرده ايم ، نام آن را در
مقابل END مي آوريم ، يعني END START .

ے نكته ديگر اينكه ، در اسمبلر هر چيزي كه بعد از كاراكتر (;) باشد ، توضيح
ے (Comment) فرض شده و اصلا ترجمه نميشود . (مثل REM در بيسيك و .. ) . هر comment
ے بايد در يك سطر جاي داده شود و اگر از اين مقدار بيشتر بود ميتوانيم در سطر بعد
هم يك كاراكتر (;) درج كرده و ادامه توضيحات را بعد از آن بياوريم .

پايان يخش هفتم

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 8 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۸۹ مراجعه امروز
۴۶۰۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 8
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۸۲۰ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 8

امروز ميخواهيم با مطالبي كه خوانده ايم يك برنامه تمريني بنويسيم . برنامه اي
براي تعريف رنگهاي جديد!
اگر داراي كارت ويدئوي VGA و طبعا VGA BIOS باشيد ، ميتوانيد از تابع 10H مربوط
به اينتراپت 10h (كه مربوط به سرويسهاي تصويري است ) براي تعريف پالت هاي جديد
استفاده كنيد . تعداد رنگهائي كه ميتوان آنها را تغيير داد به نوع كارت گرافيك
و VGA BIOS مربوط است و در حالت عادي رنگهاي شماره 0تا 7ا قابل تعريف هستند .
پالت رنگ را به اين صورت بايد تعريف كنيم : AH=10H
AL=10H

شماره رنگ از 0تا BX= 7ا
عدد رنگ سبز CH=
عدد رنگ آبي CL=
عددرنگ قرمز DH=

رنگهائي كه ديده ميشود ، تركيبي از سه رنگ اصلي قرمز،سبز و آبي (RGB) هستند .
براي تعريف يك رنگ جديد نيز بايد مقدار هر رنگ اصلي در پالت مورد نظر را در
نيم ثباتهاي CH/CLو DHوC قرار دهيم . اين مقادير 6 بيتي و در محدوده 1 تا 63
هستند .
پس از مقداردهي ثباتها اينتراپت 10h را فراخواني ميكنيم . در مثال زير ما رنگ
شماره 1 كه آبي ميباشد را تغيير داده ايم .

تمرين : برنامه را براي رنگهاي شماره 2تا 7ا نيز با مقادير دلخواه تكميل كنيد

. MODEL SMALL
. CODE
ORG 100H
START :
MOV AH/010H
MOV AL/010H
MOV BX/1 ; COLOR NUMBER
MOV CH/12 ; GREEN VALUE
MOV CL/24 ; BLUE VALUE - THE 16-BIT NUMBER
MOV DH/14 ; RED VALUE
INT 10H ; VIDEO BIOS INT .
INT 20H ; TERMINATE PROGRAM
END START

ما در اينجا وجود VGA BIOS را تست نكرده ايم و اگر اين برنامه روي كامپيوتري
با كارت گرافيك EGA و ... اجراشود نتايج غيرقابل پيش بيني بدست خواهد آمد.
يك راه ساده براي تست وجود كارت VGA وجود دارد . به اينصورت كه مقدار ثباتهاي AH
و ALو را به ترتيب برابر 1Ah و 00h قرار داده و اينتراپت 10h را اجرا ميكنيم
اگر بعد از فراخواني وقفه ، AL برابر 1Ah بود يعني كارت VGA فعال است .
پس در برنامه اي كه نوشتيم ميتوانيم با يك دستور CMP ساده از بوجود آمدن خطاي
نبود VGA BIOS جلوگيري كنيم .
بنا براين برنامه را به اين صورت تكميل ميكنيم :

. MODEL SMALL
. CODE
ORG 100H ; BEGINING OFFSET : 100H
START :

MOV AH/1AH
اين قسمت را | MOV AL/00
اضافه كرده ايم | INT 10H CMP AL/1AH ; VGA BIOS EXIST? |

; NO UJUMP TO THE END JNZ NOVGA
MOV AH/010H
MOV AL/010H
MOV BX/1 ; COLOR NUMBER
MOV CH/12 ; GREEN VALUE
MOV CL/24 ; BLUE VALUE - THE 16-BIT NUMBER
MOV DH/14 ; RED VALUE
INT 10H ; VIDEO BIOS INT.
NOVGA:
INT 20H ; TERMINATE PROGRAM
END START

در برنامه بالا اگر بعد از اجراي وقفه 10h مقدار AL برابر 1Ah نباشد، نميتوانيم
از سرويس تعريف رنگ استفاده كرده و مجبوريم برنامه را با پرش به NOVGA خاتمه
دهيم .

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلي ياد بگيريم - 9 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۹۲ مراجعه امروز
۴۶۰۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلي ياد بگيريم - 9
نويسنده : مديريت سايت
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۸/۱۳۸۱ اين مقاله ۴۴۲۱ بار مطالعه شده است
۶۰ نفر تا به حال به اين مقاله رای داده اند.
اسمبلي ياد بگيريم - 9
دستورالعمل LOOP

تا اينجا هروقت كه ميخواستيم يك حلقه ايجاد كنيم از دستورالعمل CMP و پرشهاي
شرطي استفاده ميكرديم . راه ساده تري براي اجراي مكرر دستورالملها وجود دارد و آن
استفاده از LOOP است . دستور LOOP به تعداد دفعاتي كه با ثبات CX مشخص ميكنيم
حلقه اي را ايجاد ميكند .
براي ايجاد چنين حالتي ابتدا مقدار لازم را در ثبات CX قرار ميدهيم . دستور Loop
هميشه از مقدار CX يك واحد،يك واحد كم ميكند تا به 0 برسد . وقتي كه مقدار CX
برابر 0 شد ، از حلقه خارج ميشود . بنا براين براي ايجاد حلقه اي كه 100 بار
تكرار شود، CX را برابر 100 قرار ميدهيم . MOV CX/100

حلقه مورد نظر بين دستور loop و يك برچسب انجام ميشود . برچسب ، در ابتداي حلقه
و دستور loop در انتهاي آن قرار ميگيرد.

MOV CX/100
LPCNT :
:
:
:
LOOP LPCNT

در بالا با mov cx/100 ميخواهيم حلقه اي داشته باشيم كه 100 بار انجام بشود. وقتي
به loop lpcnt ميرسيم ، يكواحد از مقدار CX كاسته شده و مجددا به lpcnt پرش
ميكنيم .
به همين سادگي ! .
تمرين : برنامه اي بنويسيد كه كاراكتر هاي با كد اسكي 32 تا 255 را نمايش دهد.

راهنمائي :
چون هميشه CX در حال كاهش است ، براي اينكه بتوانيم از 32 تا 255 برويم ، بايد
عدد داخل CX را برابر 31=224-َ255 قرار بدهيم تا تعداد 254 حرف چاپ بشود. سپس
مقدار CX را از 255 كم كرده و داخل AL قرار ميدهيم تا با تابع 0Eh ار وقفه 10h
چاپ شود . اين وقفه را در برنامه ALLCHR.ASM توضيح داديم .

پشته (Stack) ، ذخيره و بازيابي ثباتها

ما تعدادي ثبات براي نگهداري و انتقال اعداد و مقادير داريم ولي كافي نيستند .
بخصوص در DEBUG كه نميتوانيم متغيرتعريف كنيم . يا در برنامه پيش مي آيد
بخواهيم براي يك كار خاص و بطور موقت مقدار ثبات را تغيير دهيم ،در اين مواقع
مقدار ثبات را در پشته ذخيره كرده و بعدا مجددا بازيابي ميكنيم .
در برنامه هاي EXE. پشته يا Stack يك سگمنت مستقل است و آدرس آن در ثبات SS
(Stack Segment) قرار دارد . در برنامه هاي COM. پشته به آنصورت وجود ندارد و
خود DOS فضاي لازم را براي برنامه فراهم ميكند . در هر صورت ما به اينكه پشته در
كجاست كاري نداريم و به يك شكل مقادير را به پشته فرستاده (PUSH) يا از آن
خارج ميكنيم (POP) .
خاصيت مهمي كه در PUSHو POPو كردن مقادير به پشته وجود دارد اينست كه هميشه
اولين مقداري كه به پشته فرستاده ميشود، آخرين مقداري است كه از پشته خوانده
ميشود . مثلا فرض كنيد كه ابتدا AX و بعد CX را به پشته ميفرستيم . حال براي خارج
كردن درست اين مقادير، ابتدا CX و بعد AX را خارج ميكنيم .
اين قانون اسمبلي است و به (FILO=First In Last Out) معروف است .

براي فرستادن مقدار يك ثبات به پشته از دستور PUSH استفاده ميكنيم .
مثلا براي قرار دادن AX مينويسيم : PUSH AX . PUSH
نميتواند مقدار يك نيم ثبات را در پشته قرار دهد و حتما بايد يك ثبات
كامل دوبايتي باشد .
وقتي ثباتي را PUSH كرديم ، مقدار آن در Stack نگهداري ميشود و ميتوانيم مقدار آن
را تغيير دهيم .
پس از آن ، از دستور POP براي خارج كردن ثبات از پشته استفاده ميكنيم مانند . POP AX

مثال :

1] MOV AX/0AH ; ax = 0Ah
2] MOV BX/0BH ; bx = 0Bh
3] PUSH AX ; push ax to stack
4] PUSH BX ; hold bx in stack
5] MOV AX/5 ; now ax=5
6] MOV BX/2AH ; and bx=2Ah
7] : ; other commands and
8] : ; statements ...
9] POP BX ; POP bx from stack
10] POP AX ; read ax from stack

در سطر 3وَ4 مقادير axو bxو را به پشته ميفرستيم . در سطر 5و 6و مقادير جديد به ax
bx/ ميدهيم و بعد از آن يكسري دستورات ديگر هستند ... . در سطر 10 مقدار BX
از داخل Stack بيرون كشيده ميشود . توجه داشته باشيد كه bx را بعد از ax در پشته
قرار داده ايم ولي در هنگام خارج كردن به ترتيب عكس عمل ميكنيم .

بعلاوه دستور PUSHF به معني PUSH FLAGS ، ثبات پرچم را در پشته قرار ميدهد . نحوه
كار با آن هم مثل PUSH معمولي است ولي آرگومان ندارد .
مثال : PUSHF

در قسمت بعد، اين مطالب را تمرين ميكنيم و چند برنامه نمونه ميبينيم ، حتي
يك برنامه گرافيكي با 256 رنگ مينويسيم و در آن از دستورات LOOPو PUSHو
استفاده ميكنيم .

کيفيت مقاله :
عالی خوب متوسط ضعيف


وابع كتابخانه اي ( قسمت اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۵۵۷ مراجعه امروز
۴۱۴۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
وابع كتابخانه اي ( قسمت اول )
نويسنده : مديريت سايت
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲/۹/۱۳۸۱ اين مقاله ۱۵۶۳ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.

توابع كتابخانه اي ( قسمت اول )

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


زمينه هاي پيدايش جاوا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۹۶ مراجعه امروز
۴۲۱۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
زمينه هاي پيدايش جاوا
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۲۴۶۹ بار مطالعه شده است
۴۳ نفر تا به حال به اين مقاله رای داده اند.

زمينه هاي پيدايش جاوا

تاريخچه زبانهاي برنامه نويسي بشرح زير است : زبان B منجر به ظهور زبان C و C
زمينه پيدايش C++ شد و در نهايت زبان جاوا متولد شد . درك زبان جاوا مستلزم :
درك زمينه هاي لازم براي ايجاد جاوا ، نيروهايي كه اين زبان را شكل داده اند و
مشخصاتي است كه اين زبان از اسلاف خود به ارث برده است . نظير ساير زبانهاي
برنامه نويسي موفق ، جاوا نيز عناصر بارث برده از اسلاف خود را با ايده هاي
ابتكاري كه ناشي از محيط منحصر بفرد اين زبان بوده درهم آميخته است . فصول بعدي
جنبه هاي عملي زبان جاوا شامل دستور زبان (syntax) و كتابخانه ها (libraries)
و كاربردهاي جاوا را توصيف مي كند . فعلا" چگونگي و علت ظهور جاوا و اهميت آن
را بررسي مي كنيم .
اگر چه جاوا تفكيك ناپذيري با محيط هاي همزمان اينترنت پيوستگي دارد ، اما
بخاطر بسپاريد كه جاوا قبل از هر چيز يك زبان برنامه نويسي است . ابداعات و
پيشرفت ها در زبانهاي برنامه نويسي كامپيوتر بدو دليل بروز مي كنند :
- تطابق با تغييرات محيط ها و كاربردها .
- ايجاد پالايش و پيشرفت در هنر برنامه نويسي .
همانطوريكه بعدا" مشاهده مي كنيد ، تولد جاوا از اين دو دليل بطور يكسان .

کيفيت مقاله :
عالی خوب متوسط ضعيف


انواع ساده The simple Types ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۹۹ مراجعه امروز
۴۲۱۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انواع ساده The simple Types
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۸۴۹ بار مطالعه شده است
۲۲ نفر تا به حال به اين مقاله رای داده اند.

انواع ساده The simple Types

جاوا هشت نوع ساده ( يا ابتدايي ) از داده را تعريف مي كند : short bbyte int
، long،، char،، float،، double،، boolean، اين انواع را مي توان در چهار
گروه بشرح زير دسته بندي نمود :
ؤ integers ( اعداد صحيح ) : اين گروه دربرگيرنده byte، short،، int،و longو
ميباشد كه مختص ارقام علامتدار مقدار كل (whole-valued signed numbers) ميباشد.
ؤ floating-point numbers ( اعداد اعشاري ) : اين گروه دربرگيرنده float و double
است كه معرف اعدادي است با دقت زياد .
ؤ characters ( كاراكترها ) : اين گروه فقط شامل char بوده كه نشانه هايي
نظير حروف و ارقام را در يك مجموعه خاص از كاراكترها معرفي مي كند .
ؤ Boolean ( بولي ) : اين گروه فقط شامل boolean است . كه نوع خاصي ازمعرفي
و بيان مقادير صحيح / ناصحيح مي باشد .
شما مي توانيد از اين انواع همانطوريكه هستند استفاده كرده ، يا آرايه ها و
انواع كلاسهاي خود را بسازيد .
انواع اتمي معرف مقادير تكي و نه اشيائ پيچيده هستند . اگر چه جاوا
همواره شي ئ گرا است ، اما انواع ساده اينطور نيستند . اين انواع ، مشابه انواع
ساده اي هستند كه در اكثر زبانهاي غير شي ئ گرا مشاهده مي شود . دليل اين امر
كارايي است . ساختن انواع ساده در اشيائ سبب افت بيش از حد كارايي و عملكرد
مي شود .
انواع ساده بگونه اي تعريف شده اند تا يك دامنه روشن و رفتاري رياضي داشته
باشند . و زبانهايي نظير Cو C++و امكان مي دهند تا اندازه يك عدد صحيح براساس
ملاحظات مربوط به محيط اجرايي تغيير يابد . اما جاوا متفاوت عمل مي كند . بدليل
نيازهاي موجود براي قابليت حمل جاوا ، كليه انواع داده در اين زبان داراي يك
دامنه كاملا" تعريف شده هستند . بعنوان مثال يك int هميشه 32 بيتي است ، صرفنظر
از اينكه زير بناي خاص محيطي آن چگونه باشد . اين حالت به برنامه هاي نوشته شده
اجازه مي دهد تا با اطمينان و بدون در نظر گرفتن معماري خاص يك ماشين اجرا
شوند. در حاليكه مشخص كردن دقيق اندازه يك عدد صحيح ممكن است در برخي محيط ها
سبب افت عملكرد شود ، اما براي رسيدن به خاصيت قابليت حمل پرداخت چنين تاواني

کيفيت مقاله :
عالی خوب متوسط ضعيف


integers ( اعداد صحيح ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۰۲ مراجعه امروز
۴۲۱۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
integers ( اعداد صحيح )
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۴۸۰ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

integers ( اعداد صحيح )

جاوا چهار نوع عدد صحيح تعريف مي كند : byte، short،، int،، long، . كليه
اين اعداد داراي علامات مثبت و منفي هستند . جاوا از اعداد صحيح غير علامت دار و
فقط مثبت پشتيباني نمي كند . بسياري از زبانهاي برنامه نويسي شامل Cو C++و هم
از اعداد صحيح علامت دار و هم از اعداد صحيح فاقد علامت پشتيباني مي كنند . اما
طراحان جاوا احساس مي كردند كه اعداد صحيح فاقد علامت غير ضروري است . بويژه
آنها احساس كردند كه مفهوم فاقد علامت (unsigned) بيشتر براي مشخص كردن رفتار
بيت بالاتر از حد مجاز (high-order bit) استفاده مي شود كه علامت يك int را
هنگاميكه بعنوان يك رقم عنوان مي شود ، مشخص مي كند . بعدا" خواهيد ديد كه
جاوا مفهوم بيت بالاتر از حد مجاز (high-order bit) را بگونه اي متفاوت مديريت
مي كند ، يعني با اضافه كردن يك عملگر ويژه حركت به راست فاقد علامت unsigned)
(right shift . بدين ترتيب نياز به يك نوع عدد صحيح فاقد علامت منتفي شده است .
پهناي (widit) يك نوع عدد صحيح را نبايد با ميزان حافظه اي كه مصرف مي كند
اشتباه گرفت ، بلكه نشانه رفتاري است كه براي متغيرها و عبارات آن نوع تعريف
مي شود . محيط حين اجراي جاوا از هر اندازه اي كه نياز داشته باشد ، استفاده
مي كند ، البته تا آن اندازه اي كه انواع براساس اعلام قبلي شما رفتار كنند . در
حقيقت ، حداقل يك پياده سازي byte وجود دارد كه ، short را بعنوان مقادير 32
بيتي ذخيره مي كند تا عملكرد را توسعه دهد. زيرا آنچه درحال حاضر مورد استفاده
قرار مي گيرد ، اندازه كلمه (word size) اكثر كامپيوترهاست .
پهنا و دامنه اين انواع اعداد صحيح همانطوريكه در جدول زير مشاهده مي كنيد
طيف وسيعي دارند :
دامنه پهنا نام
long 64- 9/ 223/ 372/ 036/ 845/ 775/ 808 to 9/ 223/ 372
/036/ 854/ 775/ 807
int 32- 2/ 147/ 483/ 648 to 2/ 147/ 483/ 647
short 16- 32/ 768 to 32/ 767
byte 8- 128 to 127

اكنون نگاه دقيقتري به هر يك از انواع عدد صحيح خواهيم داشت .
byte

كوچكترين نوع عدد صحيح byte است . اين يك نوع علامت دار 8 بيتي است كه دامنه
آن از 128- تا 127 مي باشد . متغيرهاي نوع byte بويژه هنگاميكه با يك جريان
داده از يك شبكه يا يك فايل كار ميكنيد ، سودمند خواهند بود . همچنين هنگاميكه
با داده دودويي ( باينري ) خام مشغول كار هستيد كه ممكن است بطور مستقيم با
ساير انواع توكار جاوا سازگاري نداشته باشند ، بسيار سودمند هستند .
متغيرهاي byte را با استفاده از واژه كليدي byte اعلام مي كنيم . بعنوان
مثال ، در زير دو متغير byte با اسامي bو cو را اعلام كرده ايم : + byte b/ c;

short

يك نوع 16 بيتي علامت داراست . دامنه آن از 768 32/- تا 767 32/ است . short
در اصل كم استفاده ترين نوع در جاوا مي باشد ، چون طوري تعريف شده كه بايت بالاي
آن اول مي آيد ( آن را big-endian format ميگويند ). اين نوع براي كامپيوترهاي 16
بيتي كه بسرعت از رده خارج شده اند ، كاربري دارد .
در زير مثالهايي از چگونگي اعلان متغيرهاي short را مشاهده مي كنيد : + short s;
+ short t;

نكته : Endiannes توصيف كننده چگونگي ذخيره شدن انواع داده چند بايتي short int
و longو در حافظه است . اگر 2 بايت براي معرفي يك نوع short استفاده
شود ، آن بايتي كه ابتدا قرار مي گيرد ( مهمترين يا كم اهميت ترين ? )
مي گويد كه يك ماشين big-endian است ، بدان معني كه مهمترين بايت اول
آمده و بعد از آن بايت كم اهميت تر قرار دارد . ماشينهايي نظير SPARC و power pc
از نوع big-endian و ماشينهاي سري lntelx86نوع little-endianع
هستند .
int

رايجترين نوع عدد صحيح int است . اين يك نوع 32 بيتي علامت دار است كه دامنه
آن از 2/147/483/648- تا 2/147/483/647 گسترده است . علاوه بر كاربردهاي ديگر
متغيرهاي از نوع int براي كنترل حلقه ها و نمايه سازي آرايه ها مورد استفاده قرار
مي گيرند . هر بار كه يك عبارت عدد صحيح شامل byte، short،و intو و ارقام لفظي
(literal) داشته باشيد، كل عبارت قبل از انجام محاسبات به int ارتقائ مي يابد.
نوع int روان ترين و كاراترين نوع است و اكثر اوقات هنگاميكه ميخواهيد رقمي
را براي شمارش يا نمايه سازي آرايه ها يا انجام محاسبات عدد صحيح بوجود آوريد
بايد از آن استفاده نماييد . شايد بنظر آيد كه استفاده از انواع shortو byteو
سبب صرفه جويي در فضا شود ، اما هيچ تضميني وجود ندارد كه جاوا اين انواع را
بطرق داخلي به int ارتقائ ندهد . همواره بياد داشته باشيد كه نوع ، مشخص كننده
رفتار است نه اندازه . ( تنها استثنائ در اين مورد، آرايه است كه در آنجا byte
بصورت تضميني براي هر عضو آرايه فقط يك بايت ، short دو بايت و int از چهار
بايت استفاده مي كند . )
long

يك نوع 64 بيتي علامت دار است و براي مواردي مفيد است كه يك نوع int طول
كافي براي دربرگرفتن مقدار مورد نظر نداشته باشد. دامنه long كاملا" وسيع است .
اين نوع ، براي كار با اعداد خيلي بزرگ مناسب است . بعنوان مثال ، در زير
برنامه اي را مشاهده مي كنيد كه مسافت طي شده توسط نور در تعداد مشخص روز را بر
حسب مايل محاسبه مي كند .

+ // Compute distance light travels using long variables.
+ class Light {
+ public static void main(String args[] ){
+ int lightspeed;
+ long days;
+ long seconds;
+ long distance;
+
+ // approximate speed of light in miles per second
+ lightspeed = 86000;
+
+ days = 1000; // specify number of days here
+
+ seconds = days * 24 * 60 * 60; // convert to seconds
+
+ distance = lightspeed * seconds; // compute distance
+
+ System.out.print("In " + days);
+ System.out.print(" days light will travel about ");
+ System.out.println(distance + " miles .");
+ }
+ }

خروجي اين برنامه بقرار زير خواهد بود : ln 1000 days light will travel about 4730400000000 miles.

کيفيت مقاله :
عالی خوب متوسط ضعيف


اصل و نسب جاوا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۰۵ مراجعه امروز
۴۲۲۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اصل و نسب جاوا
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۸۹۲ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.

اصل و نسب جاوا

جاوا به زبان C++ ( نتيجه مستقيم زبان C ) وابسته است . بسياري از خصلتهاي
جاوا بطور مستقيم از اين دو زبان گرفته شده است . دستور زبان جاوا منتج از
دستور زبان C است . بسياري از جنبه هاي oop زبان جاوا از C++ بعاريت گرفته شده
است . در حقيقت بسياري از خصلتهاي زبان جاوا از اين دو زبان مشتق شده يا با
آنها مرتبط است . علاوه بر اين ، توليد جاوا بطور عميقي متاثر از روال پالايش و
تطبيقي است كه طي سه دهه گذشته براي زبانهاي برنامه نويسي موجود پيش آمده است .
بهمين دلايل بهتر است سير مراحل و نيروهايي كه منجر به تولد جاوا شده را بررسي
نماييم . هرنوع ابتكار و فكر جديد در طراحي زبانها براساس نياز به پشت سر نهادن
يك مشكل اصلي است كه زبانهاي قبلي از حل آن عاجز مانده اند . جاوا نيز بهمين
ترتيب متولد شد .

تولد زبان برنامه نويسي جديد : C
زبان C پس از تولد ، شوك بزرگي به دنياي كامپيوتر وارد كرد . اين زبان بطور
اساسي شيوه هاي تفكر و دستيابي به برنامه نويسي كامپيوتر را دگرگون ساخت . تولد C
ناشي از نياز به يك زبان ساخت يافته ، موثر و سطح بالا بعنوان جايگزيني براي
كدهاي اسمبلي و پياده سازي برنامه نويسي سيستم بود . هنگاميكه يك زبان برنامه
نويسي جديد متولد ميشود ، مقايسه ها شروع خواهد شد . مقايسه ها براساس معيارهاي
زير انجام مي گيرند :
ؤ راحتي كاربري در مقايسه با قدرتمندي زبان برنامه نويسي
ؤ ايمني در مقايسه با سطح كارآيي
ؤ استحكام در مقايسه با توسعه پذيري
قبل از ظهور زبان C برنامه نويسان با زبانهايي كار مي كردند كه قدرت
بهينه سازي يك مجموعه خاص از خصايص را داشتند . بعنوان مثال هنگاميكه از فرترن
براي نوشتن برنامه هاي موثر در كاربردهاي علمي استفاده مي كنيم ، برنامه هاي
حاصله براي كدهاي سيستم چندان مناسب نيست . زبان بيسيك با اينكه براحتي آموخته
مي شود ، اما قدرت زيادي نداشته و عدم ساخت يافتگي آن در برنامه هاي بزرگ مشكل
آفرين خواهد شد . از زبان اسمبلي براي توليد برنامه هاي كاملا" موثر استفاده
مي شود ، اما آموزش و كار با اين زبان بسيار مشكل است . بعلاوه اشكال زدايي
كدهاي اسمبلي بسيار طاقت فرساست .
مشكل اصلي ديگر اين بود كه زبانهاي اوليه برنامه نويسي نظير بيسيك ، كوبول
و فرترن براساس اصول ساخت يافته طراحي نشده بودند . اين زبانها از Goto بعنوان
ابزارهاي اوليه كنترل برنامه استفاده مي كردند . در نتيجه ، برنامه هاي نوشته
شده با اين زبانها توليد باصطلاح " كدهاي اسپاگتي "(spaghetti code() مي كردند
منظور مجموعه اي در هم تنيده از پرشها و شاخه هاي شرطي است كه درك يك برنامه
طولاني را ناممكن مي سازد . اگر چه زبانهايي نظير پاسكال ، ساخت يافته هستند
اما فاقد كارايي لازم بوده و جنبه هاي ضروري براي كاربرد آنها در طيف وسيعي از
برنامه ها وجود ندارد . ( بخصوص ويرايش پاسكال استاندارد فاقد ابزارهاي كافي
براي استفاده در سطح كدهاي سيستم بود . )
تا قبل از ابداع زبان C ، زبان ديگري قدرت نداشت تا خصلتهاي متضادي كه در
زبانهاي قبلي مشاهده ميشد ، را يكجا گردآوري كند . نياز به وجود يك چنين زباني
شديدا" احساس ميشد. در اوايل دهه 1970 ميلادي ، انقلاب رايانه اي در حال شكل گيري
بود و تقاضا براي انواع نرم افزارها فشار زيادي روي برنامه نويسان و تواناييهاي
ايشان اعمال ميكرد. درمراكز آموزشي تلاش مضاعفي براي ايجاد يك زبان برنامه نويسي
برتر انجام مي گرفت . اما شايد از همه مهمتر توليد و عرضه انبوه سخت افزار
كامپيوتري بود كه بعنوان يك نيروي ثانويه روي زبانهاي برنامه نويسي عمل ميكرد.
ديگر رايانه ها و اسرار دروني آنها پشت درهاي بسته نگهداري نمي شد . براي اولين
بار بود كه برنامه نويسان واقعا" دسترسي نامحدودي به اسرار ماشينهاي خود پيدا
نمودند . اين امر زمينه تجربيات آزادانه را بوجود آورد . همچنين برنامه نويسان
توانستند ابزارهاي مورد نيازشان را ايجاد نمايند . با ظهور زبان C ، زمينه
جهشهاي بزرگ در زبانهاي برنامه نويسي مهيا شد .
زبان C نتيجه توسعه تحقيقاتي درباره يك زبان قديمي تر بنام Bcpl بود . زبان C
اولين بار توسط Dennis Ritchie ابداع و روي ماشينهاي DEC PDP-11 داراي سيستم
عامل يونيكس اجرا شد . زبان Bcpl توسط Martin Richards توسعه يافته بود . Bcpl
منجر به تولد زبان B شد كه توسط Ken thompson ابداع شد و سرانجام به زبان C
منتهي شد . براي ساليان متمادي ، نسخه روايت استاندارد زبان C هماني بود كه
روي سيستم عامل unix عرضه و توسط Briian Kernighanو Dennis Ritchieو در كتاب "The C programming Language"
توصيف شده بود . بعدا" در سال 1989 ميلادي زبان C
مجددا" استاندارد شد وو استاندارد ANSI براي زبان C انتخاب شد .
بسياري معتقدند كه ايجاد زبان C راهگشاي دوران جديدي در زبانهاي برنامه نويسي
بوده است . اين زبان بطور موفقيت آميزي تناقضهاي موجود در زبان هاي برنامه نويسي
قبلي را مرتفع نمود . نتيجه فرآيند ايجاد زبان C ، يك زبان قدرتمند ، كارا و
ساخت يافته بود كه براحتي قابل آموزش و فراگيري بود . اين زبان يك ويژگي غير
محسوس اما مهم داشت : زبان C ، زبان برنامه نويسان بود . قبل از ابداع زبان C
زبانهاي برنامه نويسي يا جنبه هاي آموزشي داشته يا براي كارهاي اداري طراحي
ميشد . اما زبان C چيز ديگري بود . اين زبان توسط برنامه نويسان واقعي و درگير
با كارهاي جدي ، طراحي و پياده سازي شده و توسعه يافت . جنبه هاي مختلف اين
زبان توسط افرادي كه با خود زبان سر و كار داشته و برنامه نويسي مي كردند مورد
بررسي ، آزمايش و تفكر و تفكر مجدد قرار گرفته بود . حاصل اين فرآيند هم زباني
بود كه برنامه نويسان آن را دوست داشتند . در حقيقت زبان C بسرعت مورد توجه
برنامه نويسان قرار گرفت تا جايي كه برنامه نويسان نسبت به C تعصب خاصي پيدا
نمودند . اين زبان مقبوليت و محبوبيت زيادي در بين برنامه نويسان يافت . بطور
خلاصه زبان C توسط برنامه نويسان و براي برنامه نويسان طراحي شده است . بعدا"
مي بينيد كه جاوا نيز اين ويژگي را از اجداد خود بارث برده است .

نياز به C++
طي دهه 1970 و اوايل دهه 80 ميلادي زبان C نگين انگشتري برنامه نويسان بود و
هنوز هم در سطح وسيعي مورد استفده قرار مي گيرد . از آنجاييكه C يك زبان موفق
و سودمند بوده ، ممكن است بپرسيد چه نيازي به زبانهاي جديدتر وجود داشته است .
پاسخ شما يك كلمه يعني پيچيدگي (Complexity) است . طي تاريخ كوتاه برنامه نويسي
پيچيدگي فزاينده برنامه ها نياز براي شيوه هاي بهتر مديريت پيچيدگي را بوجود
آورده است . C++ پاسخي است به اين نياز مديريت پيچيدگي برنامه ها كه زمينه اصلي
پيدايش C++ بوده است .
شيوه هاي برنامه نويسي از زمان اختراع رايانه تاكنون بطور قابل توجهي تغيير
نموده اند . بعنوان مثال ، هنگاميكه رايانه ها اختراع شدند ، برنامه نويسي با
استفاده از دستور العملهاي باينري (Binary) ماشين انجام مي گرفت .
ماداميكه برنامه ها شامل حدود چند دستور العمل بود ، اين روش كارآيي داشت .
بموازات رشد برنامه ها زبان اسمبلي ابداع شد تا برنامه نويسان بتوانند برنامه هاي
بزرگتر و پيچيده تر را با استفاده از نشانه هايي كه معرف دستورالعملهاي ماشين
بودند ، بنويسند . اما پيشرفت و رشد برنامه ها همچنان ادامه يافت و زبانهاي سطح
بالايي معرفي شدند كه ابزارهاي مناسب براي مديريت پيچيدگي روزافزون برنامه ها را
در اختيار برنامه نويسان قرار مي دادند .
اولين زبان مطرح در اين زمينه فرترن بود . اگر چه فرترن اولين گام در اين
مسير بود، اما زباني است كه توسط آن برنامه هاي تميز و سهل الادراك نوشته ميشود.
در دهه 1960 ميلادي برنامه نويسي ساخت يافته مطرح شد . با استفاده از زبانهاي
ساخت يافته ، براي اولين بار امكان راحت نوشتن برنامه هاي بسيار پيچيده بوجود
آمد . اما حتي با وجود روشهاي برنامه نويسي ساخت يافته ، هنگاميكه يك پروژه به
اندازه معيني مي رسيد ، پيچيدگي آن از توان مديريت برنامه نويس خارج مي شد . در
اوائل دهه 1980 ميلادي بسياري از پروژه هاي مديريت برنامه نويسي از مرزهاي
برنامه نويسي ساخت يافته گذشتند . براي حل اين قبيل مشكلات ، يك روش نوين
برنامه نويسي ابداع شد . اين روش را برنامه نويسي شي ئ گرا يا باختصار oop
مي نامند . oop با جزئيات بيشتري بعدا" در همين كتاب بررسي خواهد شد ، اما
توصيف مختصر اين روش عبارت است از : oop يك نوع روش شناسي برنامه نويسي است كه
امكان سازماندهي برنامه هاي پيچيده از طريق بهره گيري از سه روش : وراثت ، كپسول
سازي و چند شكلي ، را ايجاد مي كند .
در تحليل نهايي ، اگر چه C بزرگترين و مهمترين زبان برنامه نويسي جهان است
اما محدوديتهايي در مديريت پيچيدگي برنامه ها دارد . هنگاميكه يك برنامه از
محدوده 25000 تا 100000 خط از كدها تجاوز نمايد، آنچنان پيچيده مي شود كه درك
آن بعنوان يك برنامه كلي ناممكن خواهد شد . C++ اين محدوديت را از بين برده و
به برنامه نويس كمك مي كند تا برنامه هايي از اين بزرگتر را نيز درك و مديريت
نمايد . C++
در سال 1979 ميلادي توسط Bjarne stoustrup هنگاميكه در آزمايشگاه بل در Marry Hill
ايالت New jersy مشغول كار بود ، ابداع شد . او در ابتدا اين زبان
جديد را (C with classes) ناميد . اما در سال 1983 ميلادي نام اين زبان جديد به C++
تغيير يافت . C++ تداوم زبان C بود كه جنبه هاي oop نيز به آن اضافه مي شد.
از آنجايي كه زبان C++ براساس زبان C شكل گرفته ، در بر گيرنده كليه جنبه ها
خسلتها (attributes) و مزاياي زبان C مي باشد . اين عوامل دلايل قاطعي براي
موفقيت حتمي C++ بعنوان يك زبان برنامه نويسي هستند . ابداع C++ در حقيقت تلاشي
براي ايجاد يك زبان كاملا" جديد برنامه نويسي نبود. در حقيقت پروژه C++ منجر به
افزايش تواناييهاي زبان موفق C شد .
چون C++ از ابتداي تولد تاكنون داراي روايتهاي گوناگوني شده است ، در حال
حاضر در تلاش استاندارد نمودن اين زبان هستند . ( اولين روايت پيشنهادي ANSI
براي استاندارد C++ در سال 1994 ميلادي مطرح شد . ) روال استاندارد سازي اين مچنان

کيفيت مقاله :
عالی خوب متوسط ضعيف


انواع اعداد اعشاري ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۰۸ مراجعه امروز
۴۲۲۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انواع اعداد اعشاري
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۴۳۹ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

انواع اعداد اعشاري

اعداد اعشاري يا همان اعداد حقيقي براي ارزش گذاري عبارتهايي كه نيازمند
دقت بيشتري هستند ، استفاده مي شوند . بعنوان نمونه ، محاسباتي نظير ريشه دوم
و محاسبات مثلثاتي نظير سينوس و كسينوس منجربه جوابهايي مي شوند كه براي تعيين
دقت آن نياز به نوع عدد اعشاري مي باشد . جاوا يك مجموعه استاندارد (IEEE-754)
از انواع عدد اعشاري و عملگرها را پياده سازي مي كند. دو نوع عدد اعشاري تعريف
شده يعني floatو doubleو هستند كه بترتيب معرف دقت معمولي و مضاعف مي باشند .
پهنا و دامنه آنها را در زير نشان داده ايم :
دامنه پهنا بر حسب تعداد بيت نام
double 64 1.7e-308 to 1.7e+308
float 32 3.4e-038 to 3.4e+038

هر يك از انواع اعشاري را متعاقبا" مورد بررسي قرار مي دهيم .
float

اين نوع مشخص كننده يك مقدار با دقت معمولي بوده كه از 32 بايت حافظه
استفاده مي كند . دقت معمول روي بعضي پردازنده ها سريعتر بوده و نسبت به دقت
مضاعف نيمي از فضا را اشغال مي كند ، اما هنگاميكه مقادير خيلي بزرگ يا خيلي
كوچك باشند ، دقت خود را از دست ميدهد . متغيرهاي نوع float براي زماني مناسب
هستند كه از يك عضو كسري استفاده مي كنيد اما نيازي به دقت خيلي زياد نداريد .
بعنوان مثال ، نوع float براي معرفي دلار و سنت بسيار مناسب است . + float hightemp/ lowtemp;

double

دقت مضاعف كه با واژه كليدي double معين مي شود براي ذخيره كردن يك مقدار 64
بيت فضا را اشغال مي كند . دقت مضاعف روي برخي پردازنده هاي جديد كه براي
محاسبات رياضي با سرعت زياد بهينه شده اند ، واقعا" سريعتر از دقت معمولي عمل
مي كند . كليه توابع مثلثاتي نظير ()sin ، ()cos و ()sqrt مقادير مضاعف را
برمي گردانند . هنگام اجراي محاسبات مكرر كه نياز به حفظ دقت داريد و يا هنگام
كار با ارقام خيلي بزرگ double بهترين انتخاب است .
در زير برنامه اي را مشاهده مي كنيد كه از double استفاده نمود تا محيط يك
دايره را محاسبه كند :

+ // Compute the area of a circle.
+ class Area {
+ public static void main(String args[] ){
+ double pi/ r/ a;
+
+ r = 10.8; // radius of circle
+ pi = 3.1416; // pi/ approximately
+ a = pi * r * r; // compute area
+
+ System.out.println("Area of circle is " + a);
+ }
+ }

كاراكترها
در جاوا از نوع داده char براي ذخيره كردن كاراكترها استفاده مي شود . اما
برنامه نويسان Cو C++و آگاه باشند كه char در جاوا مشابه char در زبانهاي C و C++
نيست . در زبانهاي Cو C++و ، نوع char يك نوع عدد صحيح با پهناي 8 بيت
است . اما جاوا متفاوت عمل مي كند . جاوا از كدهاي جهاني (unicode) براي معرفي
كاراكترها استفاده مي كند . كدهاي جهاني يك مجموعه كاملا" جهاني از كاراكترها
هستند كه مي توانند همه كاراكترها را معرفي نمايند . اين مجموعه شامل دهها
مجموعه كوچك تر كاراكتري نظير Latin، Greek،، Arabic،، Cyrillic،، Hebrew، Katakana
، Hangul، و امثال آن است .
براي اين منظور ، 16 بيت مورد نياز است . بنابراين char در جاوا يك نوع 16
بيتي است . دامنه charاز 0ز تا 65/536 مي باشد . در نوع char مقدار منفي وجود
ندارد . مجموعه استاندارد كاراكترها موسوم به ASCII همچون گذشته داراي دامنه
از 0 تا 127 و مجموعه كاراكترهاي 8 بيتي توسعه يافته موسوم به lso-Latin-1
داراي دامنه از 0 تا 255 مي باشند .
چون در جاوا امكان نوشتن ريز برنامه ها براي كاربري جهاني وجود دارد ، بنظر
مي رسد كه بهتر است جاوا از كدهاي جهاني براي معرفي كاراكترها استفاده نمايد .
البته بكار بردن كدهاي جهاني درمورد زبانهايي نظير انگليسي ،آلماني ،اسپانيايي
يا فرانسوي كه كاراكترهاي آنها را مي توان براحتي داخل 8 بيت جاي داد ، تا حدي
سبب نزول كارآيي خواهد شد . اما اين بهايي است كه براي رسيدن به قابليت حمل
جهاني در برنامه ها بايد پرداخت .
نكته : اطلاعات بيشتر درباره كدهاي جهاني را در آدرسهاي وب زير پيدا خواهيد
نمود : http://www .unicode .org
http://www .stonehand .com/unicode .html

در زير برنامه اي را مشاهده مي كنيد كه متغيرهاي char را نشان مي دهد :

+ // Demonstrate char data type.
+ class CharDemo {
+ public static void main(String args[] ){
+ char ch1/ ch2;
+
+ ch1 = 88; // code for X
+ ch2 = 'Y';
+
+ System.out.print("ch1 and ch2 :");
+ System.out.println(ch1 + " " + ch2);
+ }
+ }

اين برنامه خروجي زير را نشان خواهد داد : ch1 and ch2 :xy

دقت كنيد كه مقدار 88به ch1 نسبت داده شده ، كه مقدار متناظر با حرف x در
كد ASCII ( و كد جهاني ) است . قبلا" هم گفتيم كه مجموعه كاراكتري ASCII َ127
مقدار اوليه در مجموعه كاراكتري كدهاي جهاني را اشغال كرده است . بهمين دليل
كليه فوت و فنهاي قديمي كه قبلا" با كاراكترها پياده كرده ايد ، در جاوا نيز به
خوبي جواب مي دهند .
اگر چه انواع char عدد صحيح محسوب نمي شوند ، اما در بسياري از شرايط
مي توانيد مشابه عدد صحيح با آنها رفتار كنيد . بدين ترتيب قادريد دو كاراكتر
را با هم جمع نموده و يا اينكه مقدار يك متغير كاركتري را كاهش دهيد . بعنوان
مثال ، برنامه زير را در نظر بگيريد :

+ // char variables behave like integers.
+ class CharDemo2 {
+ public static void main(String args[] ){
+ char ch1;
+
+ ch1 = 'X';
+ System.out.println("ch1 contains " + ch1);
+
+ ch1++; // increment ch1
+ System.out.println("ch1 is now " + ch1);
+ }
+ }

خروجي اين برنامه بشرح زير خواهد بود : ch1 contains x
ch1 is now y

در برنامه ابتدا مقدار xبه ch1 داده ميشود . سپس ch1 افزايش مي يابد . اين
روال باعث مي شود تا ch1 حرف y را اختيار كند، كه كاراكتر بعدي در ترتيب ASCII
( و كدهاي جهاني ) مي باشد .
Boolean

جاوا يك نوع ساده موسوم به boolean براي مقادير منطقي دارد . اين نوع فقط
يكي از مقادير ممكن trueيا falseا را اختيار مي كند . اين نوعي است كه توسط
كليه عملگرهاي رابطه اي نظير b شرطي كه دستورهاي كنترلي نظير ifو forو را مديريت مي كنند ، استفاده مي شود .
در زير برنامه اي مشاهده مي كنيد كه نوع boolean را نشان مي دهد :

+ // Demonstrate boolean values.
+ class BoolTest {
+ public static void main(String args[] ){
+ boolean b;
+
+ b = false;
+ System.out.println("b is " + b);
+ b = true;
+ System.out.println("b is " + b);
+
+ // a boolean value can control the if statement
+ if(b )System.out.println("This is executed.");
+
+ b = false;
+ if(b )System.out.println("This is not executed.");
+
+ // outcome of a relational operator is a boolean value
+ System.out.println("10 > 9 is " +( 10 > 9));
+ }
+ }

خروجي برنامه فوق بقرار زير خواهد بود :

b is false
b is true
This is executed.
10>9 is true

درباره اين برنامه سه نكته جالب توجه وجود دارد . اول اينكه وقتي كه مقدار boolean
توسط ()println خارج مي شود ، مي بينيد كه "true"يا "false"ا بنمايش
درمي آيد . دوم اينكه يك متغير boolean بتنهايي براي كنترل دستور if كفايت
مي كند . ديگر نيازي به نوشتن يك دستور if بقرار زير نخواهد بود : + if(b == true... )

يك مقدار <سوم اينكه ، پي آمد يك عملگر رابطه اي نظير boolean است . بهمين
دليل است كه عبارت 9>َ10 مقدار true را نمايش مي دهد . علاوه بر اين ، مجموعه ي از پرانتزهايي كه عبارت 9>َ10 را محصور كرده اند ، ضروري است زيرا عملگر +

کيفيت مقاله :
عالی خوب متوسط ضعيف


نگاهي دقيقتر به الفاظ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۱۱ مراجعه امروز
۴۲۲۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نگاهي دقيقتر به الفاظ
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۳۲۶ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

نگاهي دقيقتر به الفاظ

اكنون كه انواع توكار را بطور رسمي توضيح داده ايم ، نگاه دقيقتري به اين
الفاظ خواهيم داشت .

الفاظ عدد صحيح integer literals
احتمالا" اعداد صحيح رايجترين نوع استفاده شده در برنامه هاي نوع بندي شده
هستند. هر مقدار رقمي كلي يك لفظ عدد صحيح است . اعداد 1، 2،، 3، و 42 مثالهاي
روشني هستند . اين اعداد همگي مقادير دهدهي مي باشند ، بدين معني كه اين اعداد
در يك مبناي ده رقمي تعريف شده اند . دو مبناي ديگر نيز در الفاظ عدد صحيح قابل
استفاده هستند : مبناي هشت (octal) و مبناي 16(hexadecimal(). مقادير در مبناي
هشت در جاوا با يك رقم 0 پيش آيند مشخص ميشوند. ارقام دهدهي معمولي نمي توانند
رقم 0 پيش آيند داشته باشند . بنابراين مقدار بظاهر معتبر 09 خطايي را در
كامپايلر توليد مي كند، زيرا رقم 9 خارج از دامنه 0تا 7ا مبناي هشت قرار دارد.
يكي ديگر از مبناهاي رايج براي ارقام مورد استفاده برنامه نويسان ، مبناي 16
مي باشد كه با مدول اندازه هاي كلمه 8 تايي نظير 8 ، 16 ، 32 و 64 بيتي كاملا"
سازگاري دارد . يك ثابت درمبناي 16 را توسط OXيا oxا مشخص مي كنيد . دامنه يك
رقم در مبناي 16 از رقم 0 تا 15 و حروف Aتا Fا ( يا aتا fا ) بعنوان جايگزين
ارقام 10 تا 15 مي باشد .
الفاظ عدد صحيح يك مقدار int توليد مي كنند كه در جاوا يك مقدار عدد صحيح 32
بيتي است . از آنجاييكه جاوا شديدا" نوع بندي شده است ، ممكن است تعجب كنيد
كه چگونه مي توان يك لفظ عدد صحيح را به يكي ديگر از انواع عدد صحيح جاوا نظير byte
يا longا نسبت داد ، بدون اينكه خطاي عدم سازگاري انواع بوجود آيد .
خوشبختانه چنين حالتهايي بسادگي اداره مي شوند . هنگاميكه يك لفظ عدد صحيح به
يك متغير byteيا shortا منتسب مي شود، اگر مقدار لفظ داخل محدوده نوع هدف قرار
داشته باشد ، خطايي توليد نخواهد شد . همچنين همواره مي توان يك لفظ عدد صحيح
را به يك متغير long منتسب نمود . اما براي مشخص نمودن يك لفظ long بايد بطور
صريح به كامپايلر بگوييد كه مقدار لفظ از نوع long است . اينكار را با الحاق
يك حرف L بزرگ يا كوچك به لفظ انجام مي دهيم . بعنوان مثال ، ox7ffffffffffffffL 9223372036854775807L
بزرگترين Long مي باشد .

الفاظ عدد اعشاري Floating-point literals
ارقام اعشاري معرف مقادير دهدهي با اجزائ كسري مي باشند . آنها را مي توان
به شكل استاندارد يا به شكل علامتگذاري علمي بيان نمود . نشانه گذاري استاندارد
شامل يك جزئ عدد صحيح است كه بعد از آن يك نقطه و بعد از آن جزئ كسري عدد قرار
مي گيرد . بعنوان مثال 2.0 يا 3.14159 يا 0.6667 معرف نشانه گذاري استاندارد
معتبر در ارقام اعشاري هستند . نشانه گذاري علمي از يك نشانه گذاري استاندارد
نقطه مخصوص اعشاري بعلاوه يك پيوند كه مشخص كننده تواني از عدد 10 است كه
بايد در عدد ضرب شود استفاده مي كند . توان ( نما ) را توسط علامت Eيا eا كه
يك رقم دهدهي بدنبال آن مي آيد و ممكن است مثبت يا منفي باشد ، نشان مي دهيم .
مثل 6.022E23 يا 05-314159E و 2e+100 .
الفاظ عدد اعشاري در جاوا بصورت پيش فرض داراي دقت مضاعف (double) هستند .
براي مشخص نمودن يك لفظ float بايد يك حرف Fيا fا را به ثابت الحاق نماييد .
همچنين ميتوانيد بطور صريح يك لفظ double را با الحاق يك حرف Dيا dا نيز انجام
دهيد . انجام اينكار البته اضافي است . نوع double پيش فرض 64 بيت حافظه را
مصرف مي كند در حاليكه نوع كم دقت تر float مستلزم 32 بيت حافظه است .

الفاظ Boolean
الفاظ boolean بسيار ساده هستند. يك مقدار boolean فقط دو مقدار منطقي شامل true
و falseو مي تواند داشته باشد . مقادير trueو falseو هرگز به رقم تبديل
نمي شوند . در جاوا لفظ true مساوي يك نبوده ، همچنانكه لفظ false معادل صفر
نيست . در جاوا ، آنها را فقط مي توان به متغيرهاي اعلان شده بعنوان boolean
منتسب نمود و يا در عباراتي با عملگرهاي boolean استفاده نمود .

الفاظ كاراكترها Character literals
كاراكترهاي جاوا در مجموعه كاراكتر كدهاي جهاني نمايه سازي شده اند . آنها
مقادير 16 بيتي هستند كه قابل تبديل به اعداد صحيح بوده و با عملگرهاي عدد
صحيح نظير عملگرهاي اضافه و كسر نمودن اداره مي شوند . يك كاراكتر لفظي همواره
داخل يك علامت ' ' معرفي مي شود . كليه كاراكترهاي ASCII قابل رويت مي توانند
بطور مستقيم به داخل اين علامت وارد شوند ، مثل 'a'يا 'z'ايا '@'ا . براي
كاراكترهايي كه امكان ورود مستقيم را ندارند ، چندين پيش آيند وجود دارند كه
امكان ورود كاراكتر دلخواه را فراهم مينمايند، نظير '\' براي ورود خود كاراكتر
و '\n' براي كاراكتر خط جديد . همچنين مكانيسمي براي ورودي مستقيم مقدار يك
كاراكتر در مبناي هشت يا شانزده وجود دارد . براي نشانه گذاري مبناي هشت از
علامت \ كه توسط يك عدد سه رقمي دنبال ميشود، استفاده كنيد. بعنوان مثال '\141'
همان حرف 'a' است . براي مبناي شانزده از علامت (\u) استفاده كنيد و بعد از آن
دقيقا" چهار رقم مبناي شانزده . بعنوان مثال '\uoo61' كه معادل حرف 'a' در
استاندارد lso-latin-1 است چون بايت بالايي آن صفر است . '\ua432' يك كاراكتر Katakana
ژاپني است . جدول زير پيش آيندهاي كاراكترها را نشان مي دهد .

|
توصيف آن پيش آيند | |
كاراكتر مبناي هشت (ddd) \ddd | |
كاراكتر كد جهاني مبناي شانزده (xxxx) \uxxxx | |
علامت تكي نقل قول \' | |
علامت جفتي نقل قول \" | | \\ Backslash |
|
كاراكتر برگشت به سر خط \r | |
خط جديد \n | |
تغذيه فرم \f | | \t Tab |
| \b Backspace |

الفاظ String
الفاظ رشته اي در جاوا نظير ساير زبانهاي برنامه نويسي مشخص مي شوند قرار
دادن يك دنباله از كاراكترها بين يك جفت از علامات نقل قول ، در زير نمونه هايي
از الفاظ رشته اي را مشاهده مي كنيد .

"Hello world"
"tow\nlines"
"\"This is in quotes\"

پيش آيندها و نشانه گذاريهاي مبناي هشت / شانزده كه براي الفاظ كاراكترها
توصيف شد ، بهمان روش در داخل الفاظ رشته اي كار مي كنند . يك نكته مهم درباره
رشته هاي جاوا اين است كه آنها بايد روي يك خط شروع شده و پايان يابد . برخلاف
زبانهاي ديگر در جاوا ادامه خط در خطهاي ديگر مجاز نيست .
نكته : حتما" مي دانيد كه در اكثر زبانهاي ديگر شامل Cو C++و ، رشته ها بعنوان
آرايه هاي كاراكتري پياده سازي مي شوند . اما در جاوا اين حالت وجود
ندارد . رشته ها از نوع اشيائ هستند . بعدا" مي بينيد از آنجاييكه جاوا ياده سازي مي كند ، دربرگيرنده تواناييهاي

کيفيت مقاله :
عالی خوب متوسط ضعيف


متغيرها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۱۴ مراجعه امروز
۴۲۳۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
متغيرها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۳۷۳ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

متغيرها

در يك برنامه جاوا ، متغير ، اساسي ترين واحد ذخيره سازي است . يك متغير به
وسيله تركيبي از يك شناسه ، يك نوع و يك مقدار ده اوليه اختياري تعريف خواهد
شد . علاوه بر اين ، كليه متغيرها داراي يك قلمرو هستند كه رويت پذيري آنها را
تعريف مي كند و يك زمان حيات نيز دارند. متعاقبا" اين اجزائ را مورد بررسي
قرار مي دهيم .

اعلان يك متغير Declaring a variable
در جاوا كليه متغيرها قبل از استفاده بايد اعلان شوند . شكل اصلي اعلان متغير
بقرار زير مي باشد : type identifier [=value] [/identifier[=value]...];

مقدار شناسه مقدار شناسه نوع
نوع (type) يكي از انواع اتمي جاوا يا نام يك كلاس يا رابط است . ( انواع
كلاس و رابط بعدا" بررسي خواهد شد . ) شناسه نام متغير است . مي توانيد با
گذاشتن يك علامت تساوي و يك مقدار ، متغير را مقدار دهي اوليه نماييد . در ذهن
بسپاريد كه عبارت مقدار دهي اوليه بايد منتج به يك مقدار از همان نوعي ( يا
سازگار با آن نوع ) كه براي متغير مشخص شده ، گردد . براي اعلان بيش از يك نوع
مشخص شده ، از فهرست كاماهاي (') جدا كننده استفاده نماييد .
در زير مثالهايي از اعلان متغير از انواع گوناگون را مشاهده مي كنيد . دقت
كنيد كه برخي از آنها شامل يك مقدار دهي اوليه هستند .

+ int a/ b/ c; // declares three ints/ a/ b/ and c.
+ int d = 3/ e/ f = 5; // declares three more ints/ initializing
+ // d and f.
+ byte z = 22; // initializes z.
+ double pi = 3.14159; // declares an approximation of pi.
+ char x = 'x'; // the variable x has the value 'x'.

شناسه هايي كه انتخاب مي كنيد هيچ عامل ذاتي در نام خود ندارند كه نوع آنها
را مشخص نمايد . بسياري از خوانندگان بياد مي آورند زماني را كه FORTRAN كليه
شناسه هاي از Iتا Nا را پيش تعريف نمود تا از نوع INTEGER باشند ، در حاليكه
ساير شناسه ها از نوع REAL بودند . جاوا به هر يك از شناسه هاي متناسب شكل گرفته
امكان اختيار هر نوع اعلان شده را داده است .

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

+ // Demonstrate dynamic initialization.
+ class DynInit {
+ public static void main(String args[] ){
+ double a = 3.0/ b = 4.0;
+ // c is dynamically initialized
+ double c = Math.sqrt(a * a + b * b);
+
+ System.out.println("Hypotenuse is " + c);
+ }
+ }

در اينجا سه متغير محلي a، b،، c، اعلان شده اند . دو تاي اولي توسط
ثابت ها مقدار دهي اوليه شده اند . اما متغير C بصورت پويا و بر حسب طول اضلاع
مثلث قائم الزاويه ( بنابر قانون فيثاغورث ) مقدار دهي اوليه مي شود . اين
برنامه از يكي از روشهاي توكار جاوا يعني ()sqrt كه عضوي از كلاس Math بوده و
ريشه دوم آرگومانهاي خود را محاسبه ميكند استفاده كرده است . نكته كليدي اينجا
است كه عبارت مقدار دهي اوليه ممكن است از هر يك از اجزائ معتبر در زمان مقدار
دهي اوليه ، شامل فراخواني روشها ، ساير متغيرها يا الفاظ استفاده نمايد .

قلمرو زمان حيات متغيرها
تابحال كليه متغيرهاي استفاده شده ، در زمان شروع روش ()main اعلان مي شدند.
اما جاوا همچنين به متغيرها امكان مي دهد تا درون يك بلوك نيز اعلام شوند .
همانطوريكه قبلا" توضيح داديم ، يك بلوك با يك ابرو باز و يك ابرو بسته محصور
مي شود : يك بلوك تعريف كننده يك قلمرو است . بدين ترتيب هر بار كه يك بلوك
جديد را شروع ميكنيد ، يك قلمرو جديد نيز بوجود مي آوريد . همانطوريكه احتمالا"
از تجربيات برنامه نويسي قبلي بياد داريد ، يك قلمرو (scope) تعيين كننده آن
است كه چه اشيائي براي ساير بخشهاي برنامه قابل رويت هستند . اين قلمرو همچنين
زمان حيات (lifetime) آن اشيائ را تعيين مي كند .
اكثر زبانهاي كامپيوتري دو طبقه بندي از قلمروها را تعريف مي كنند : سراسري
(global) و محلي (local) . اما اين قلمروهاي سنتي بخوبي با مدل موكد شي ئ گرايي
جاوا مطابقت ندارند . اگر چه در جاوا هم مي توان مقاديري را بعنوان قلمرو
سراسري ايجاد نمود ، اما اين فقط يك نوع استثنائ است و عموميت ندارد . در جاوا
قلمرو اصلي همانهايي هستند كه توسط يك كلاس يا يك روش تعريف مي شوند . حتي همين
تمايز نيز تا حدي ساختگي و مصنوعي است . اما از آنجاييكه قلمرو كلاس داراي
مشخصات و خصلتهاي منحصر بفردي است كه قابل استفاده در قلمرو تعريف شده توسط
روش نيست ، اين تمايز تا حدي محسوس خواهد بود . بخاطر تفاوتهاي موجود ، بحث
قلمرو كلاس ( و متغيرهاي اعلان شده داخل آن ) اين مبحث بتعوق افتاده است . در حال
حاضر فقط قلمروهاي تعريف شده توسط يك روش يا داخل يك روش را بررسي مي كنيم .
قلمرو تعريف شده توسط يك روش با يك ابروي باز شروع مي شود. اما اگر آن روش
داراي پارامترهايي باشد ، آنها نيز داخل قلمرو روش گنجانده خواهند شد . بعدا"
نگاه دقيقتري به پارامترها خواهيم داشت و فعلا" كافي است بدانيم كه پارامترها
مشابه هر متغير ديگري در يك روش كار مي كنند .
بعنوان يك قانون عمومي ، متغيرهاي اعلان شده داخل يك قلمرو براي كدهايي كه
خارج از قلمرو تعريف مي شوند ، قابل رويت نخواهند بود ( قابل دسترسي نيستند ).
بدين ترتيب ، هنگاميكه يك متغير را درون يك قلمرو اعلان مي كنيد ، در حقيقت آن
متغير را محلي دانسته و آن را در مقابل دستيابيها و تغييرات غير مجاز محافظت
مي كنيد . در حقيقت ، قوانين قلمرو اساس كپسول سازي را فراهم مي كنند .
قلمروها را مي توان بصورت تودرتو (nesting) محفوظ داشت . بعنوان مثال ، هر
زمان يك بلوك كد ايجاد كنيد ، يك قلمرو جديد تودرتو ايجاد نموده ايد . هنگاميكه
اين واقعه روي مي دهد ، قلمرو بيروني ، قلمرو دروني را دربرمي گيرد . اين بدان
معني است كه اشيائ اعلان شده در قلمرو بيروني براي كدهاي داخل قلمرو دروني قابل
رويت هستند اما عكس اين قضيه صادق نيست . اشيائاعلان شده داخل قلمرو دروني براي
بيرون قلمرو قابل رويت نخواهند بود .
براي درك تاثير قلمروهاي تودرتو ، برناه ريز را در نظر بگيريد :

+ // Demonstrate block scope.
+ class Scope {
+ public static void main(String args[] ){
+ int x; // known to all code within main
+
+ x = 10;
+ if(x == 10 ){ // start new scope
+ int y = 20; // known only to this bock
+
+ // x and y both known here.
+ System.out.println("x and y :" + x + " " + y);
+ x = y * 2;
+ }
+ // y = 100 :// Error! y not known here
+
+ // x is still known here.
+ System.out.println("x is " + x);
+ }
+ }

همانطوريكه توضيحات نشان مي دهند ، متغير x در ابتداي قلمروي ()main اعلان
شده و براي كليه كدهاي متعاقب داخل ()main قابل دسترسي مي باشد . داخل بلوك if
متغير y اعلان شده است . از آنجاييكه يك بلوك معرف يك قلمرو است ، y فقط براي
ساير كدهاي داخل بلوك خود قابل رويت است . اين دليل آن است كه خارج بلوك
مربوطه ، خط y=100 در خارج توضيح داده شده است . اگر نشانه توضيح راهنمايي را
تغيير مكان دهيد ، يك خطاي زمان كامپايل (compile-time error) اتفاق مي افتد
چون y براي بيرون از بلوك خود قابل رويت نيست . داخل بلوك if متغير x قابل
استفاده است زيرا كدهاي داخل يك بلوك ( منظور يك قلمرو تودرتو شده است ) به
متغيرهاي اعلان شده در يك قلمرو دربرگيرنده دسترسي دارند .
داخل يك بلوك ، در هر لحظه اي مي توان متغيرها را اعلان نمود ، اما فقط زماني
معتبر مي شوند كه اعلان شده باشند . بدين ترتيب اگر يك متغير را در ابتداي يك
روش اعلان مي كنيد، براي كليه كدهاي داخل آن روش قابل دسترس خواهد بود. بالعكس
اگر يك متغير را در انتهاي يك بلوك اعلان كنيد ، هيچ فايده اي ندارد چون هيچيك
از كدها به آن دسترسي ندارند . بعنوان مثال اين قطعه از برنامه غير معتبر است
چون نمي توان از count قبل از اعلان آن استفاده نمود :

+ // This fragment is wrong!
+ count = 100; // oops! cannot use count before it is declared!
+ int count;

يك نكته مهم ديگر در اينجا وجود دارد كه بايد بخاطر بسپاريد: متغيرها زماني
ايجاد مي شوند كه قلمرو آن ها وارد شده باشد ، و زماني خراب مي شوند كه قلمرو
آنها ترك شده باشد . يعني يك متغير هربار كه خارج از قلمروش برود ، ديگر مقدار
خود را نگهداري نخواهد كرد . بنابراين ، متغيرهاي اعلان شده داخل يك روش مقادير
خود را بين فراخواني هاي آن روش نگهداري نمي كنند . همچنين يك متغير اعلان شده
داخل يك بلوك ، وقتي كه بلوك ترك شده باشد ، مقدار خود را از دست خواهد داد .
بنابراين ، زمان حيات (lifetime) يك متغير محدود به قلمرو آن مي باشد .
اگر اعلان يك متغير شامل مقدار دهي اوليه آن باشد ، آنگاه هر زمان كه به
بلوك مربوطه وارد شويم ، آن متغير مجددا" مقدار دهي اوليه خواهد شد . بعنوان
مثال برنامه زير را در نظر بگيريد :

+ // Demonstrate lifetime of a variable.
+ class LifeTime {
+ public static void main(String args[] ){
+ int x;
+
+ for(x = 0; x < 3; x++ ){
+ int y =- 1; // y is initialized each time block is entered
+ System.out.println("y is :" + y); // this always prints- 1
+ y = 100;
+ System.out.println("y is now :" + y);
+ }
+ }
+ }

خروجي توليد شده توسط اين برنامه بقرار زير است :

y is- :1
y is now:100
y is- :1
y is now:100
y is- :1
y is now:100

همانطوريكه مشاهده مي كنيد ، هر بار كه به حلقه for داخلي وارد مي شويم ، y
همواره بطور مكرر مقدار اوليه 1- را اختيار مي كند . اگر چه بلافاصله به اين
متغير مقدار 100 نسبت داده مي شود، اما هر بار نيز مقدار خود را از دست ميدهد.
و بالاخره آخرين نكته : اگر چه ميتوان بلوكها را تودرتو نمود، اما نميتوانيد
متغيري را اعلان كنيد كه اسم آن مشابه اسم متغيري در قلمرو بيروني باشد. از اين
نظر جاوا با زبانهاي Cو C++و متفاوت است . در زير مثالي را مشاهده مي كنيد كه
در آن تلاش شده تا دو متغير جدا از هم با اسم اعلان شوند . در جاوا اينكار مجاز
نيست . در Cو C++و اين امر مجاز بوده و دو bar كاملا" جدا خواهند ماند .

+ // This program will not compile
+ class ScopeErr {
+ public static void main(String args[] ){
+ int bar = 1;
+ { // creates a new scope
+ int bar = 2; // Compile-time error -- bar already defined!
+ }
+ }
+ }

تبديل خودكار و تبديل غير خودكار انواع
اگر تجربه قبلي برنامه نويسي داشته ايد ، پس مي دانيد كه كاملا" طبيعي است كه
مقداري از يك نوع را به متغيري از نوع ديگر نسبت دهيم . اگر اين دو نوع سازگار
باشند ، آنگاه جاوا بطور خودكار اين تبديل (conversion) را انجام مي دهد .
بعنوان مثال ، همواره امكان دارد كه مقدار int را به يك متغير long نسبت داد .
اما همه انواع با يكديگر سازگاري ندارند ، بنابراين هر گونه تبديل انواع مجاز
نخواهد بود . بعنوان نمونه ، هيچ تبديلي از doubleبه byte تعريف نشده است .
خوشبختانه ، امكان انجام تبديلات بين انواع غير سازگار هم وجود دارد . براي
انجام اينكار ، بايد از تبديل cast استفاده كنيد كه امكان يك تبديل صريح بين
انواع غير سازگار را بوجود مي آورد . اجازه دهيد تا نگاه دقيقتري به تبديل
خودكار انواع و تبديل cast داشته باشيم .

تبديل خودكار در جاوا Java's Automatic conyersions
هنگاميكه يك نوع داده به يك متغير از نوع ديگر نسبت داده مي شود ، اگر دو
شرط زير فراهم باشد ، يك تبديل خودكار نوع انجام خواهد شد :
ؤ دو نوع با يكديگر سازگار باشند .
ؤ نوع مقصد بزرگتر از نوع منبع باشد .
هنگاميكه اين دو شرط برقرار باشد ، يك تبديل پهن كننده (widening) اتفاق
مي افتد . براي مثال نوع int همواره باندازه كافي بزرگ است تا كليه مقادير
معتبر byte را دربرگيرد، بنابراين نيازي به دستور صريح تبديل cast وجود ندارد.
در تبديلات پهن كننده ، انواع رقمي شامل انواع عدد صحيح و عدد اعشاري با هر
يك از انواع سازگاري دارند . اما انواع رقمي با انواع charو booleanو سازگار
نيستند . همچنين انواع charو booleanو با يكديگر سازگار نيستند .
همانطوريكه قبلا" ذكر شد ، جاوا هنگام ذخيره سازي يك ثابت عدد صحيح لفظي
(Literal integer constant) به متغيرهاي از انواع byte، short،و longو ، يك
تبديل خودكار نوع را انجام مي دهد .

تبديل غير خودكار انواع ناسازگار
اگر چه تبديلات خودكار انواع بسيار سودمند هستند ، اما جوابگوي همه نيازها
نيستند . بعنوان مثال ، ممكن است بخواهيد يك مقدار int را به يك متغير byte
نسبت دهيد. اين تبديل بطور خودكار انجام نمي گيرد، زيرا يك byteاز intز كوچكتر
است .اين نوع خاص از تبديلات را گاهي تبديل باريك كننده (narrowing conversions)
مي نامند ، زيرا بطور صريح مقدار را آنقدر باريك تر و كم عرض تر مي كنيد تا با
نوع هدف سازگاري يابد .
براي ايجاد يك تبديل بين دو نوع ناسازگار ، بايد از cast استفاده نماييد . cast
يك تبديل نوع كاملا" صريح است . شكل عمومي آن بقرار زير مي باشد : ( target - type )value

نوع نوع مقصد يا هدف
در اينجا نوع هدف ، همان نوعي است كه مايليم مقدار مشخص شده را به آن تبديل
كنيم . بعنوان مثال ، قطعه زير از يك برنامه تبديل غير خودكار از intبه byte
را اجرا مي كند . اگر مقدار integer بزرگتر از دامنه يك byte باشد ، اين مقدار
به مدول ( باقيمانده تقسيم يك integer بر دامنه ) byte كاهش خواهد يافت . + int a;
+ byte b;
+ //...
+ b =( byte )a;

هر گاه كه يك مقدار اعشاري به يك عدد صحيح نسبت داده شود ، شكل ديگري از
تبديل اتفاق مي افتد : بريدن ، truncation . همانطوريكه مي دانيد ، اعداد صحيح
داراي قسمت اعشاري نيستند . بنابراين هنگاميكه يك مقدار اعشاري به يك نوع عدد
صحيح نسبت داده مي شود ، جزئ اعشاري از بين خواهد رفت ( بريده خواهد شد ) .
بعنوان مثال ، اگر مقدار 1.23 را به يك عدد صحيح نسبت دهيم ، مقدار حاصله فقط
عدد 1 مي باشد . مقدار 0.23 بريده (truncated) خواهد شد . البته اگر اندازه
اجزائ عدد كلي آنچنان بزرگ باشد كه در نوع عدد صحيح مقصد نگنجد ، آنگاه مقدار
فوق به مدول دامنه نوع هدف كاهش خواهد يافت .
برنامه زير نشان دهنده برخي از تبديلات انواع است كه مستلزم تبديل cast
مي باشند :

+ // Demonstrate casts.
+ class Conversion {
+ public static void main(String args[] ){
+ bytt b;
+ int i = 257;
+ double d = 323.142;
+
+ System.out.println("\nConversion of int to byte.");
+ b =( byte )i;
+ System.out.println("i and b " + i + " " + b);
+
+ System.out.println("\nConversion of double to int.");
+ i =( int )d;
+ System.out.println("d and i " + d + " " + i);
+
+ System.out.println("\nConversion of double to byte.");
+ b =( byte )d;
+ System.out/println("d and b " + d + " " + b);
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

Conversion of int to byte.
i and b 257 1

Conversion of double to int.
d and i 323.142 323

Conversion of double to byte.
d and b 323.142 67

اكنون به هر يك از اين تبديلات نگاه مي كنيم . هنگاميكه مقدار 257 از طريق
تبديل cast به يك byte منتسب مي شود ، نتيجه برابر باقيمانده تقسيم 257 بر 256
( دامنه byte ) يعني عدد 1 است . هنگاميكه d به يك int تبديل مي شود ، بخش خواهند رفت . هنگاميكه d به يك byte تبديل مي شود ، بخش

کيفيت مقاله :
عالی خوب متوسط ضعيف


ارتقائ خودكار انواع در عبارات ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۱۷ مراجعه امروز
۴۲۳۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ارتقائ خودكار انواع در عبارات
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۲۳۹ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

ارتقائ خودكار انواع در عبارات Automatic Type promotion in Expressions

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

+ byte a = 40;
+ byte b = 50;
+ byte c = 100;
+ int d = a * b / c;

نتيجه قلم واسطه a*b از دامنه هر يك از عملوندهاي byte خود تجاوز مي نمايد.
براي اداره اين نوع مشكلات ، جاوا بطور خودكار هر يك از عملوندهاي byteو shortو
را هنگام ارزشيابي يك عبارت به int ارتقائ مي دهد . اين بدان معني است كه زير
عبارت a*b با استفاده از اعداد صحيح و نه byte اجرا مي شود. بنابراين عدد 2000
نتيجه عبارت واسطه 50*40 مجاز است ، اگر چه aو bو هر دو بعنوان نوع byte مشخص
شده اند .
همانقدر كه ارتقائ خودكار مفيداست ، مي تواند سبب بروز خطاهاي زمان كامپايل
(compile-time) گردد . بعنوان مثال ، اين كد بظاهر صحيح يك مشكل را بوجود
مي آورد .

+ byte b = 50;
+ b = b * 2; // Error! Cannot assign an int to a byte!

اين كد تلاش مي كند تا 50*2 را كه يك مقدار كاملا" معتبر byte است به يك
متغير byte ذخيره كند . اما چون عملوندها بطور خودكار هنگام ارزشيابي عبارت به int
ارتقائ يافته اند ، جواب حاصله نيز به int ارتقائ يافته است . بنابراين
جواب عبارت اكنون از نوع int است كه بدون استفاده از تبديل cast امكان نسبت
دادن آن به يك byte وجود ندارد. اين قضيه صادق است ، درست مثل همين حالت ، حتي
اگر مقدار نسبت داده شده همچنان با نوع هدف سازگاري داشته باشد .
در شرايطي كه پيامدهاي سر ريز (overflow) را درك مي كنيد، بايد از يك تبديل
صريح cast نظير مورد زير استفاده نماييد .

+ byte b = 50;
+ b =( byte( )b * 2);

كه مقدار صحيح عدد 100 را بدست مي آورد .

قوانين ارتقائ انواع
علاوه بر ارتقائbyteو shortوبه int جاوا چندين قانون ارتقائانواع را تعريف
كرده كه قابل استفاده در عبارات مي باشند . اين قوانين بصورت زير هستند . اول
اينكه كليه مقادير byteو shortوبه int ارتقائ مي يابند ، همانگونه كه قبلا"
توضيح داده ايم . آنگاه اگر يك عملوند ، long باشد ، كل عبارت به long ارتقائ
مي يابد . اگر يك عملوند float باشد ، كل عبارت به float ارتقائ مي يابد . اگر
هر يك از عملوندها يك double باشند ، حاصل آنها double خواهد شد .
برنامه بعدي نشان مي دهد كه چگونه هر يك از مقادير در عبارت ارتقائ مي يابد
تا با آرگومان دوم به هر يك از عملگرهاي دودويي ، مطابقت يابد .

+ class Promote {
+ public static void main(String args[] ){
+ byte b = 42;
+ char c = 'a';
+ short s = 1024;
+ int i = 50000;
+ float f = 5.67f;
+ double d =. 1234;
+ double result =( f * b )+( i / c( - )d * s);
+ System.out.println((f * b )+ " + " +( i / c )+ " - " +( d * s));
+ System.out.println("result = " + result);
+ }
+ }

اجازه دهيد به ارتقائ انواع كه در اين خط از برنامه اتفاق افتاده ، دقيقتر
نگاه كنيم :

+ double result =( f * b )+( i / c( - )d * s);

در اولين زير عبارت يعني f*b، b، به يك نوع float ارتقائ يافته و جواب زير
عبارت نيز از نوع float خواهد بود . در زير عبارت بعدي يعني i/c، c، به يك نوع int
ارتقائ يافته و جواب آن زير عبارت نيز از نوع int خواهد بود . سپس در زير
عبارت d*s ، مقدار S به نوع double ارتقائ يافته و نوع زير عبارت نيز double
خواهد بود . در نهايت اين سه مقدار واسطه ، float، int،، double، در نظر گرفته
مي شوند . خروجي float بعلاوه int از نوع float خواهد شد . آنگاه اين نتيجه
منهاي آخرين double به نوع double ارتقائ يافته ، كه نوع مربوط به جواب نهايي

کيفيت مقاله :
عالی خوب متوسط ضعيف


آرايه ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۲۰ مراجعه امروز
۴۲۳۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آرايه ها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۲۹۳ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

آرايه ها

يك آرايه گروهي از متغيرهاي يك نوع است كه با يك نام مشترك به آنها ارجاع
مي شود . مي توان آرايه ها را براي هر يك از انواع ايجاد نمود و ممكن است اين
آرايه ها داراي يك يا چندين بعد باشند . براي دسترسي به يك عضو آرايه از نمايه
(index) آن آرايه استفاده مي شود . آرايه ها يك وسيله مناسب براي گروه بندي
اطلاعات مرتبط با هم هستند .
نكته : اگر با Cو C++و آشنايي داريد ، آگاه باشيد . آرايه ها در جاوا بطور
متفاوتي نسبت به زبانهاي ديگر كار مي كنند .

آرايه هاي يك بعدي
آرايه يك بعدي بطور ضروري فهرستي از متغيرهاي يكنوع است . براي ايجاد يك
آرايه ، بايد يك متغير آرايه از نوع مورد نظرتان ايجاد كنيد . فرم عمومي اعلان
يك آرايه يك بعدي بقرار زير است :

type var-name [];

نام متغير نوع
در اينجا type اعلان كننده نوع اصلي آرايه است . نوع اصلي تعيين كننده نوع
داده براي هر يك از اعضائ داخل در آرايه است . بنابراين ، نوع اصلي آرايه تعيين
مي كند كه آرايه چه نوعي از داده را نگهداري مي كند . بعنوان مثال ، در زير
يك آرايه با نام month-days با نوع آرايه اي از عدد صحيح اعلان شده است .

+ int month_days[];

اگر چه اين اعلان تثبيت مي كند كه month-days يك متغير آرايه است ، اما بطور
واقعي آرايه اي وجود ندارد . در حقيقت ، مقدار month-days برابر تهي (null)
مي باشد كه يك آرايه بدون مقدار را معرفي مي كند . براي پيوند دادن month-days
با يك آرايه واقعي و فيزيكي از اعداد صحيح ، بايد از يك عملگر new استفاده
نموده و به month-days منتسب كنيد. new يك عملگراست كه حافظه را اختصاص ميدهد.
بعداnew " را با دقت بيشتري بررسي مي كنيم ، اما لازم است كه هم اكنون از آن
استفاده نموده و حافظه را براي آرايه ها تخصيص دهيد . فرم عمومي new آنگونه كه
براي آرايه هاي يك بعدي بكار مي رود بقرار زير ظاهر خواهد شد :

array-var=new type [size];

اندازه نوع متغير آرايه
در اينجا type مشخص كننده نوع داده اي است كه تخصيص داده مي شود، size مشخص
كننده تعداد اعضائ آرايه است و array-var متغير آرايه است كه به آرايه پيوند
مي يابد . يعني براي استفاده از new در تخصيص يك آرايه ، بايد نوع و تعداد
اعضايي كه تخصيص مي يابند را مشخص نماييد . اعضائ آرايه كه توسط new تخصيص
مي يابند بطور خودكار با مقدار صفر مقدار دهي اوليه مي شوند . اين مثال يك
آرايه 12 عضوي از اعداد صحيح را تخصيص داده و آنها را به month-days پيوند
مي دهد .

+ month_days = new int[12];

بعد از اجراي اين دستور ، month-days به يك آرايه 12 تايي از اعداد صحيح
ارجاع خواهد نمود . بعلاوه كليه اجزائ در آرايه با عدد صفر مقدار دهي اوليه
خواهند شد .
اجازه دهيد مرور كنيم : بدست آوردن يك آرايه مستلزم پردازش دو مرحله اي است .
اول بايد يك متغير با نوع آرايه مورد نظرتان اعلان كنيد . دوم بايد حافظه اي كه
آرايه را نگهداري مي كند ، با استفاده از new تخصيص دهيد و آن را به متغير
آرايه نسبت دهيد . بنابراين در جاوا كليه آرايه ها بطور پويا تخصيص مي يابند .
اگر مفهوم تخصيص پويا براي شما ناآشناست نگران نباشيد . اين مفهوم را بعدا"
تشريح خواهيم كرد .
هر بار كه يك آرايه را تخصيص مي دهيد ، مي توانيد بوسيله مشخص نمودن نمايه
آن داخل كروشه [] به يك عضو مشخص در آرايه دسترسي پيدا كنيد . كليه نمايه هاي
آرايه ها با عدد صفر شروع مي شوند. بعنوان مثال اين دستور مقدار 28 را به دومين
عضو month-days نسبت مي دهد .

+ month_days[1] = 28;

خط بعدي مقدار ذخيره شده در نمايه 3 را نمايش مي دهد .

+ System.out.println(month_days[3]);

با كنار هم قرار دادن كليه قطعات ، در اينجا برنامه اي خواهيم داشت كه يك
آرايه براي تعداد روزهاي هر ماه ايجاد مي كند .

+ // Demonstrate a one-dimensional array.
+ class Array {
+ public static void main(String args[] ){
+ int month_days[];
+ month_days = new int[12];
+ month_days [0] = 31;
+ month_days [1] = 28;
+ month_days [2] = 31;
+ month_days [3] = 30;
+ month_days [4] = 31;
+ month_days [5] = 30;
+ month_days [6] = 31;
+ month_days [7] = 31;
+ month_days [8] = 30;
+ month_days [9] = 31;
+ month_days [10] = 30;
+ month_days [11] = 31;
+ System.out.println("April has " + month_days[3] + " days .");
+ }
+ }

وقتي اين برنامه را اجرا ميكنيد ، برنامه ، تعداد روزهاي ماه آوريل را چاپ
ميكند. همانطوريكه ذكر شد، نمايه هاي آرايه جاوا با صفر شروع مي شوند، بنابراين
تعداد روزهاي ماه آوريل در month-days[3] برابر 30 مي باشد .
اين امكان وجود دارد كه اعلان متغير آرايه را با تخصيص خود آرايه بصورت زير
تركيب نمود : + int month_days[] = new int[12];

اين همان روشي است كه معمولا" در برنامه هاي حرفه اي نوشته شده با جاوا مشاهده
مي كنيد .
مي توان آرايه ها را زمان اعلانشان ، مقدار دهي اوليه نمود . پردازش آن بسيار
مشابه پردازشي است كه براي مقدار دهي اوليه انواع ساده استفاده مي شود . يك
مقدار ده اوليه آرايه فهرستي از عبارات جدا شده بوسيله كاما و محصور شده بين
ابروهاي باز و بسته مي باشد . كاماها مقادير اجزائ آرايه را از يكديگر جدا
مي كنند . آرايه بطور خودكار آنقدر بزرگ ايجاد مي شود تا بتواند ارقام اجزايي
را كه در مقدار ده اوليه آرايه مشخص كرده ايد ، دربرگيرد . نيازي به استفاده از new
وجود ندارد . بعنوان مثال ، براي ذخيره نمودن تعداد روزهاي هر ماه ، كد
بعدي يك آرايه مقدار دهي اوليه شده از اعداد صحيح را بوجود مي آورد :

+ // An improved version of the previous program.
+ class AutoArray {
+ public static void main(String args[] ){
+ int month_days[] = { 31/ 28/ 31/ 30/ 31/ 30/ 31/ 31/ 30/ 31/ 30/ 31 };
+ System.out.println("April has " + month_days[3] + " days .");
+ }
+ }

وقتي اين برنامه را اجرا كنيد ، همان خروجي برنامه قبلي را خواهيد ديد .
جاوا بشدت كنترل مي كند تا مطمئن شود كه بطور تصادفي تلاشي براي ذخيره نمودن
يا ارجاع مقاديري خارج از دامنه آرايه انجام ندهيد . سيستم حين اجراي جاوا
كنترل مي كند كه كليه نمايه هاي آرايه ها در دامنه صحيح قرار داشته باشند . ( از
اين نظر جاوا كاملا"با Cاو C++و متفاوت است كه هيچ كنترل محدوده اي در حين اجرا
انجام نمي دهند . ) بعنوان مثال ، سيستم حين اجرا ، مقدار هر يك از نمايه ها به month-days
را كنترل مي كند تا مطمئن شود كه بين ارقام 0 و 11 داخل قرار داشته
باشند . اگر تلاش كنيد تا به اجزائ خارج از دامنه آرايه ( اعداد منفي يا اعدادي
بزرگتر از طول آرايه ) دسترسي يابيد، يك خطاي حين اجرا (run-time error) توليد
خواهد شد .
در زير يك مثال پيچيده تر مشاهده مي كنيد كه از يك آرايه يك بعدي استفاده
مي كند . اين برنامه ميانگين يك مجموعه از ارقام را بدست مي آورد .

+ // Average an array of values.
+ class Average {
+ public static void main(String args[] ){
+ double nums[] = {10.1/ 11.2/ 12.3/ 13.4/ 14.5};
+ double result = 0;
+ int i;
+
+ for(i=0; i<5; i++)
+ result = result + nums[i];
+
+ System.out.println("Average is " + result / 5);
+ }
+ }

آرايه هاي چند بعدي
در جاوا آرايه هاي چند بعدي در واقع آرايه اي از آرايه ها هستند . اين قضيه
همانطوريكه انتظار داريد ظاهر و عملكردي مشابه آرايه هاي چندبعدي منظم (regular)
دارد . اما خواهيد ديد كه تاوتهاي ظريفي هم وجود دارند . براي اعلان يك متغير
آرايه چند بعدي ، با استفاده از مجموعه ديگري از كروشه ها هر يك از نمايه هاي
اضافي را مشخص مي كنيد. بعنوان مثال ، عبارت زيرر يك متغير آرايه دو بعدي بنام twoD
را اعلان مي كند .

+ int twoD[][] = new int[4][5];

اين عبارت يك آرايه 4در 5ر را تخصيص داده و آن را به twoD نسبت مي دهد . از
نظر داخلي اين ماتريس بعنوان يك آرايه از آرايه نوع int پياده سازي خواهد شد .
بطور فرضي ، اين آرايه را مي توان بصورت شكل زير نمايش داد .

Right index determines column.

|| || || || ||
\/ \/ \/ \/ \/

|
| [0][4] | [0][3] | [0][2] | [0][1] | [0][0] >
|
| |
| [1][4] | [1][3] | [1][2] | [1][1] | [1][0] >
Left index
determines |
| [2][4] | [2][3] | [2][2] | [2][1] | [2][0] .> row
|
| |
| [3][4] | [3][3] | [3][2] | [3][1] | [3][0] >
Given :int twoD[][] = new int [4][5];

برنامه بعدي هر عضو آرايه را از چپ به راست ، و از بالا به پايين شماره داده
و سپس مقادير آنها را نمايش مي دهد :

+ // Demonstrate a two-dimensional array.
+ class TwoDArray {
+ public static void main(String args[] ){
+ int twoD[][] = new int[4][5];
+ int i/ j/ k = 0;
+
+ for(i=0; i<4; i++)
+ for(j=0; j<5; j++ ){
+ twoD[i][j] = k;
+ k++;
+
+ }
+
+ for(i=0; i<4; i++ ){
+ for(j=0; j<5; j++)
+ System.out.print(twoD[i][j] + " ");
+ System.out.println)(;
+ }
+ }
+ }

خروجي اين برنامه بقرار زير خواهد بود : 0 1 2 3 4

5 6 7 8 9
10 11 12 13 14
15 16 17 18 19

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

+ int twoD[][] = new int[4][];
+ twoD[0] = new int[5];
+ twoD[1] = new int[5];
+ twoD[2] = new int[5];
+ twoD[3] = new int[5];

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

               + // Manually allocate differing size second dimension.
+ class TwoDAgain {
+   public static void main(String args[] ){
+
+
+     int twoD[][] = new int[4][];
+     twoD[0] = new int[1];
+     twoD[1] = new int[2];
+     twoD[2] = new int[3];
+     twoD[3] = new int[4];
+
+     int i/ j/ k = 0;
+
+     for(i=0; i<4; i++)
+       for(j=0; j
  +         towD[i][j] = k;
+         k++;
+       }
+
+     for(i=0; i<4; i++ ){
+       for(j=0; j
  +         System.out.print(twoD[i][j] + " ");
+       System.out.println)(;
+     }
+   }
+ }

خروجي اين برنامه بقرار زير مي باشد : 0

1 2
3 4 5
6 7 8 9

آرايه اي كه توسط اين برنامه ايجاد مي شود ، بصورت زير خواهد بود :

| [0][0] |

| [1][0] | [1][1] |

| [2][0] | [2][1] | [2][2] |

| [3][0] | [3][1] | [3][2] | [3][3] |

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

+ // Initialize a two-dimensional array.
+ class Matrix {
+ public static void main(String args[] ){
+ double m[][] = {
+ { 0*0/ 1*0/ 2*0/ 3*0 };
+ { 0*1/ 1*1/ 2*1/ 3*1 };
+ { 0*2/ 1*2/ 2*2/ 3*2 };
+ { 0*3/ 1*3/ 2*3/ 3*3 };
+ };
+ int i/ j;
+
+ for(i=0; i<4; i++ ){
+ for(j=0 j<4; j++)
+ System.out.print(m[i][j] + " ");
+ System.out.println)(;
+ }
+ }
+ }

پس از اجراي اين برنامه ، خروجي آن بقرار زير خواهد بود : 0 0 0 0

0 1 2 3
0 2 4 6
0 3 6 9

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

+ // Demonstrate a three-dimensional array.
+ class threeDDatrix {
+ public static void main(String args[] ){
+ int threeD[][][] = new int[3][4][5];
+ int i/ j/ k;
+ for(i=0; i<3; i++)
+ for(j=0; j<4; j++)
+ for(k=0; k<5; k++)
+ threeD[i][j][k] = i * j * k;
+
+ for(i=0; i<3; i++ ){
+ for(j=0; j<4; j++ ){
+ for(k=0; k<5; k++)
+ System.out.print(threeD[i][j][k] + " ");
+ System.out.println)(;
+ }
+ System.out.println)(;
+ }
+ }
+ }

خروجي اين برنامه بقرار زير خواهد بود : 0 0 0 0 0

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12

0 0 0 0 0
0 2 4 6 8
0 4 8 12 16
0 6 12 18 24

دستور زبان جايگزين اعلان آرايه
يك شكل دوم براي اعلان يك آرايه بصورت زير وجود دارد :

type [] var-name;

نام متغير نوع
در اينجا كروشه ها بعداز مشخص كننده نوع مي آيند نه بعداز نام متغير آرايه .
بعنوان مثال دو شكل اعلان زير يكسان عمل مي كنند :

+ int a1[] = new int[3];
+ int[] a2 = new int[3];

دو شكل اعلان زير هم يكسان عمل مي كنند :

+ char twod1[][] = n

کيفيت مقاله :
عالی خوب متوسط ضعيف


چند كلمه اي درباره رشته ها (strings) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۲۳ مراجعه امروز
۴۲۳۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چند كلمه اي درباره رشته ها (strings)
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۲۰۷ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

چند كلمه اي درباره رشته ها (strings)

حتما" دقت كرده ايد كه طي بحث گذشته درباره انواع داده و آرايه ها هيچ حرفي
از رشته ها يا نوع داده رشته (string data type) مطرح نشد . علت عدم پشتيباني
جاوا از اين نوع نيست . بلكه علت آن است كه نوع رشته در جاوا تحت نام string
يك نوع ساده نيست . اين مفهوم در جاوا با آرايه اي از كاراكترها ( آنگونه در C
و C++ مي باشد ) متفاوت است . در جاوا string تعريف كننده يك شي ئ است و توصيف
كامل رشته ، مستلزم درك كاملي از جنبه هاي گوناگون شي ئ گرايي است . بهمين دليل
مبحث رشته ها را بعد از بحث اشيائ خواهيم گفت . اما چون ممكن است تا آن زمان از
رشته هاي ساده درمثالها استفاده شود، لذا معرفي مختصري از رشته ها ارائه ميدهيم .
نوع string براي معرفي و اعلان متغيرهاي رشته اي استفاده مي شود . همچنين
مي توانيد آرايه هايي از رشته ها را اعلان كنيد . يك ثابت رشته اي داخل علامت " "
را مي توان به يك متغير string نسبت داد . يك متغير نوع string را مي توان به
متغير ديگري از همان نوع نسبت داد . مي توانيد يك شي ئ از نوع string را بعنوان
يك آرگومان به ()println استفاده نماييد . بعنوان مثال ، برنامه بعدي را در
نظر بگيريد :

+ String str = "this is a test";
+ String.out.println(str);

در اينجا str يك شي ئ از نوع string است كه رشته "this is a test" به آن
منتسب شده است . اين رشته توسط دستور ()println بنمايش درمي آيد .
بعدا" خواهيد ديد اشيائ string داراي جنبه ها و خصلتهايي هستند كه آنها را
بسيار قدرتمند و سهل الاستفاده ساخته است . اما در بحثهاي بعدي شما فقط از اده خواهيد نمود .

کيفيت مقاله :
عالی خوب متوسط ضعيف


يك نكته درباره اشاره گرها (pointers) به برنامه نويسان Cو C++و ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۲۶ مراجعه امروز
۴۲۴۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
يك نكته درباره اشاره گرها (pointers) به برنامه نويسان Cو C++و
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۲۳۵ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

يك نكته درباره اشاره گرها (pointers) به برنامه نويسان Cو C++و

اگر يك برنامه نويس مجرب Cو C++و هستيد ، حتما" مي دانيد كه اين برنامه ها
از اشاره گرها پشتيباني مي كنند . اما در مباحث قبل حرفي از اشاره گرها نزديم .
دليل آن بسيار ساده است : جاوا امكان استفاده از اشاره گرها را نداده و از آنها
پشتيباني نمي كند . ( دقيقتر بگوييم كه جاوا از اشاره گرهايي كه توسط برنامه
نويسان قابل دسترسي يا قابل تغيير باشند ، پشتيباني نمي كند. ) جاوا اشاره گرها
را مجاز نمي داند ، زيرا اين اجازه سبب مي شود تا ديواره آتش بين محيط اجرايي
جاوا و رايانه ميزبان شكافته شود . ( بياد آوريد كه مي توان به يك اشاره گر هر
آدرسي از حافظه را اختصاص داد حتي آدرسهايي كه ممكن است خارج از سيستم حين
اجراي جاوا باشند . ) چون Cو C++و استفاده گسترده اي از اشاره گرها دارند ، ممكن
است تصور كنيد كه از دست دادن اشاره گرها در جاوا افت زيادي بوجود خواهد آورد .
اما اين امر حقيقت ندارد . جاوا بطوري طراحي شده كه ماداميكه شما در محدوده
محيط اجرايي بمانيد ، هيچ نيازي به استفاده از اشاره گر نداشته ، ضمن اينكه در استفاده از آنها مزيتي هم نخواهد داشت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اولين برنامه ساده ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۲۹ مراجعه امروز
۴۲۴۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اولين برنامه ساده
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۵۹۶ بار مطالعه شده است
۱۲ نفر تا به حال به اين مقاله رای داده اند.

اولين برنامه ساده

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

+ /*
+ This is a simple Java program.
+ Call this file "Example.java".
+ /*
+ class Exaample {
+ // Your program begins with a call to main.)(
+ public static void main( String args [] ){
+ System.out.println( "This is a simple Java program.");
+ }
+ }

نكته : در توصيف زيرين از JDK(JAVA Developer's Kit() استاندارد استفاده شده
است كه توسط خود شركت Sun Microsystems عرضه شده است . اگر از يك محيط
توسعه يافته ديگر براي جاوا استفاده مي كنيد ، آنگاه بايد از رويه
متفاوتي براي كامپايل كردن و اجراي برنامه استفاده كنيد . در اين مورد
به راهنماي كاربران كامپايلر خود مراجعه نماييد .

وارد نمودن برنامه Entering the program
در بسياري از زبانهاي كامپيوتري ، نام فايلي كه كد منبع (Source code) يك
برنامه را نگهداري مي كند بصورت اختياري انتخاب مي شود . اما در جاوا اينگونه
نيست . اولين چيزي كه بايد درباره جاوا بدانيد اين است كه نامي را كه براي
فايل منبع انتخاب مي كنيد ، بسيار اهميت دارد . در اين مثال ، نام فايل منبع
بايد Example JJAVA باشد . چرا ?
در جاوا يك فايل منبع را بطور رسمي واحد كامپايل سازي (Compilation unit)
مي گويند . اين فايل يك فايل متني است كه دربرگيرنده يك يا چندين تعريف كلاس
(class definition) است . در كامپايلر جاوا بايد از فايل منبعي استفاده نمود
كه داراي پسوند فايل JAVA باشد . دقت كنيد كه اين پسوند داراي چهار كاراكتر
است . حتما" مي دانيد كه سيستم عامل شما بايد توانايي حمايت از پسوندهاي
طولاني تر را داشته باشد . بدين ترتيب Dos و ويندوز 3.1 توانايي حمايت از جاوا
( لااقل تاكنون ) را ندارند. اما ويندوز NT و95 بخوبي ازعهده اينكار برمي آيند.
يكبار ديگر به برنامه فوق نگاه كنيد، نام كلاس تعريف شده توسط برنامه ،Example
مي باشد ، اين يك تصادف يا اتفاق نيست . در جاوا كليه كدها بايد داخل يك كلاس
جاي بگيرند . براساس آيين نامه ، نام آن كلاس بايد با نام فايلي كه برنامه را
نگهداري مي كند ، مطابقت داشته باشد . همچنين بايد مطمئن شويد كه حروف بزرگ در
نام فايل با نام كلاس مطابقت و هماهنگي داشته باشند . دليل اين است كه جاوا
بسيار حساس نسبت به مورد است . از اين نظر آيين نامه اي كه نامهاي فايل را به
نامهاي كلاس مرتبط مي كند ، ممكن است اختياري بنظر رسد . اما ، اين آيين نامه
سبب شده تا نگهداري و سازماندهي برنامه ها آسان تر انجام شود .

كامپايل نمودن برنامه Compiling the program
براي كامپايل نمودن برنامه Example ، كامپايلر javac را اجرا نموده و نام
فايل منبع را روي خط فرمان (command line) بصورت زير مشخص نماييد :

+ c:\>javac Example.java

كامپايلر javac فايلي تحت نام Example.class ايجاد مي كند كه شامل روايت كد
بايتي از برنامه است . همانگونه كه قبلا" بحث شد ، كد بايتي جاوا نوعي معرفي
مياني از برنامه شماست كه دربرگيرنده دستورالعملهايي است كه مفسر جاوا آنها را
اجرا مي كند . بنابراين خروجي javac كدي كه مستقيما" قابل اجرا باشد ، نخواهد
بود .
براي اجراي واقعي برنامه ، بايد از مفسر (interpreter) جاوا تحت نام java
استفاده نماييد . بدين منظور نام كلاس Example را بعنوان يك آرگومان (argument)
خط فرمان بصورت زير وارد نماييد .

+ c:\>java Example

پس از اجراي اين برنامه ، خروجي بصورت زير بنمايش درمي آيد : This is a simple Java program.

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

نگاهي دقيقتر به برنامه نمونه اول
اگر چه عبارت Example jjava بسيار كوتاه است ، اما دربرگيرنده چندين جنبه
كليدي است كه در همه برنامه هاي جاوا وجود خواهند داشت . اجازه دهيد تا هر يك
از بخشهاي برنامه را با دقت بيشتري بررسي كنيم .
برنامه با خط زير شروع مي شود :

+ /*
+ This is a simple Java program.
+ Call this file "Example .java".
+ /*

اين يك " توضيح "(Comment() است . مثل بسياري از زبانهاي برنامه نويسي ،جاوا
به شما امكان وارد نمودن يك ملاحظه (Remark) در فايل منبع برنامه را مي دهد .
محتوي يك " توضيح " توسط كامپايلر ناديده گرفته خواهد شد . در عوض ، يك "
توضيح " ، توصيف كننده يا شرح دهنده عملكرد برنامه است به هر كسي كه كد منبع
را مطالعه نمايد . در اين مثال ، " توضيح " ، توصيف كننده برنامه بوده و بياد
شما مي اندازد كه فايل منبع را بايدExample.java بناميد . البته ، در برنامه هاي
واقعي ،" توضيحات " بطور كلي توصيف مي كنند كه چگونه برخي از بخشهاي يك برنامه
كار كرده و يا اينكه يك جنبه خاص از برنامه چكاري انجام خواهد داد .
جاوا از سه روش براي " توضيحات " پشتيباني مي كند. اول آن چيزي است كه بالاي
برنامه مشاهده مي كنيد كه آن را توضيح چند خطي (multiline comment) مي گويند .
اين نوع از " توضيح " بايد با علامت /* و با علامت */ پايان يابد . هر چيزي كه
بين اين دو علامت قرار گيرد توسط كامپايلر ناديده گرفته خواهد شد . همانطوريكه
از نام اين روش پيداست ، يك توضيح ، چند خطي ممكن است چندين خط دراز داشته
باشد .
خط بعدي كد برنامه بصورت زير مي باشد :

+ class Exaple {

اين خط از واژه كليدي class استفاده مي كند تا اعلان نمايد كه يك كلاس جديد
در حال تعريف شدن است . Example شناسه اي (identifier) است كه نام كلاس مي باشد.
كل تعريف كلاس ، شامل : كليه اعضائ خود ، بين علامات ابروباز ({) و ابروبسته (})
قرار مي گيرد . استفاده از علامات فوق در جاوا مشابه روش استفاده از آنها در C
و C++ است . فعلا" درباره جزئيات مربوط به يك كلاس نگران نباشيد مگر دقت به اينكه
در جاوا ، كليه فعاليت برنامه اي داخل يك علامت اتفاق مي افتد . اين امر يكي از
دلايلي است كه كليه برنامه هاي جاوا شي ئ گرا هستند .
خط بعدي برنامه يك " توضيح يك خطي "(single-line comment() بصورت زير است :

+ // Your program begins with a call to main.)(

اين نوع دوم " توضيحي " است كه توسط جاوا پشتيباني مي شود. يك توضيح يك خطي
با علامت // شروع شده و در انتهاي خط پايان مي يابد . بعنوان يك قانون عمومي
برنامه نويسان از توضيحات چند خطي براي ملاحظات طولاني تر و از توضيحات يك خطي
براي توضيحات كوتاه و خط به خط استفاده مي كنند .
خط بعدي كد بقرار زير مي باشد :

+ public static void main( String args [] ){

اين خط شروع كننده روش ()main است . همانطوريكه توضيح متعاقب آن پيشنهاد
مي كند ، اين خطي است كه برنامه در آن شروع به اجرا مي نمايد . كليه برنامه هاي
كاربردي جاوا با فراخواني ()main شروع به اجرا مي كنند. ( درست شبيه C++/C. ).
معناي دقيق بخشهاي مختلف اين خط را فعلا" نمي توان توضيح داد ، زيرا درك آن
مستلزم آگاهي از روش Java براي كپسول سازي است . اما از آنجاييكه اكثر مثالهاي
موجود در بيشتر قسمتهاي اين بحث از اين خط از كط استفاده مي كنند ، بهتر است
مرور كوتاهي بر بخشهاي مختلف آن داشته باشيم .
واژه كليدي public يك توصيفگر دسترسي (access specifier) است كه به برنامه
نويس امكان داده تا قابليت و سطح مشاهده اعضائ كلاس را كنترل نمايد . وقتي كه
عبارت public قبل از يك عضو كلاس قرار مي گيرد ، آنگاه آن عضو را مي توان با
كدهاي خارج از كلاس كه اعلان شده ، مورد دسترسي قرار داد . ( مخالف اين عبارت
عبارت .private است كه از دسترسي به يك عضو توسط كدهاي تعريف شده در خارج كلاس
جلوگيري مي نمايد . ) در اين حالت ()main بايد بعنوان public اعلام شود ، زيرا
بايد توسط كدهاي خارج از كلاس هنگاميكه برنامه آغاز مي شود ، فراخواني شود .
واژه كليدي Static به ()main امكان داده تا بدون معرفي شدن توسط يك كلاس نمونه
فراخواني شود . اين امر ضروري است چون ()main قبل از اينكه هر يك از اشيائ
ساخته شوند توسط مفسر جاوا فراخواني خواهد شد . واژه كليدي Void بسادگي به
كامپايلر مي گويد كه ()main مقداري را بازگردان نمي كند . همانطوريكه خواهيد
ديد ، ممكن است روشها (methods) نيز مقادير را بازگردان كنند . اگر اين مطالب
تا حدي گيج كننده است ، نگران نباشيد . كليه اين مطالب با جزئيات بيشتري در
قسمتهاي بعد بررسي خواهد شد .
همانطوريكه بيان شده ()main روشي است كه هنگام شروع يك برنامه كاربردي جاوا
فراخواني مي شود . بياد آوريد كه جاوا بسيار حساس نسبت به مورد است . بنابراين
براي جاوا Mainو mainو دو مفهوم متفاوت دارند . نكته مهم اين است كه كامپايلر
جاوا فقط كلاسهايي را كه شامل روش ()main نباشند ، كامپايل خواهد نمود . اما
مفسر جاوا راهي براي اجراي اين كلاسها ندارد . بنابراين اگر بجاي main عبارت Main
را تايپ كرده باشيد ، كامپايلر همچنان برنامه شما را كامپايل خواهد كرد .
اما مفسر جاوا يك گزارش خطا مي دهد زيرا توانايي يافتن روش ()main را ندارد .
اطلاعاتي كه لازم است به يك روش ارسال كنيد ، توسط متغيرهاي مشخص شده بين
مجموعه پرانتزهايي كه بعد از نام روش قرار مي گيرند ، دريافت خواهد شد . اين
متغيرها را پارامترها (parameters) مي نامند . اگر براي يك روش داده شده نياز
به پارامتري نباشد ، از پرانتزهاي خالي استفاده مي كنيد . در حال حاضر ()main
فقط يك پارامتر دارد ، كه البته بسيار پيچيده هم هست . String args [] يك
پارامتر با نام args را اعلان ميكند كه يك آرايه از نمونه هاي string كلاس ميباشد.
( آرايه مجموعه اي از اشيائ مشابه هم هستند . ) اشيائ از نوع string ، رشته هاي
كاراكترها را ذخيره مي كنند . در اين حالت ، args هر نوع آرگومان خط فرمان
حاضر در هنگام اجراي برنامه را دريافت مي كند . اين برنامه از اين اطلاعات
استفاده نمي كند ، اما برنامه هاي ديگر چنين استفاده اي را انجام مي دهند .
آخرين كاراكتر روي خط ، علامت { است . اين علامت نشان دهنده شروع بدنه ()main
است . تمامي كدهايي كه يك روش را تشكيل مي دهند بين ابرو باز و ابرو بسته همان
روش قرار مي گيرند .
يك نكته ديگر : ()main نقطه شروع بكار مفسر است . يك برنامه پيچيده شامل
دهها كلاس است كه فقط يكي از آنها لازم است يك روش ()main داشته باشد تا كارها
را شروع نمايد . هنگاميكه ريز برنامه ها (applets) برنامه هاي جاوا كه در
مرورگرهاي وب تعبيه مي شوند را ايجاد مي كنيد ، بهيچوجه از ()main استفاده
نخواهيد كرد، زيرا مرورگرهاي وب از وسائل متفاوتي براي شروع اجراي ريزبرنامه ها
استفاده مي كنند .
خط بعدي كد بقرار زير ميباشد. دقت كنيد كه اين خط داخل ()main قرار ميگيرد.

+ System.out.println("This is a simple Java program.");

اين خط رشته "This is a simple Java program" را بعنوان خروجي ارائه مي دهد
كه بعد از آن يك خط جديد روي صفحه ظاهر خواهد شد . خروجي بطور واقعي با روش
توكار ()println همراه است . در اين حالت ، ()println نمايش دهنده رشته اي است
كه در آن ثبت شده . خواهيد ديد كه از ()println براي نمايش ساير انواع اطلاعات
نيز استفاده مي شود . خط بالا با system.out شروع مي شود . اگر چه در اين مرحله
توضيح اين مطلب بسيار دشواراست ، اما بطور اختصار system يك كلاس از پيش تعريف
شده است كه دسترسي به سيستم را فراهم آورده و out نيز جريان خروجي است كه به
كنسول (console) مرتبط شده است .
همانطوريكه احتمالا" حدس زده ايد ، خروجي ( و نيز ورودي ) كنسول بندرت در
برنامه ها و ريز برنامه هاي جاوا مورد استفاده قرار مي گيرند . از آنجاييكه اكثر
محيط هاي جديد كامپيوتري داراي طبيعت پنجره اي و گرافيكي هستند ، كنسول l/o
اكثرا" براي برنامه هاي كمكي ساده و برنامه هاي نمايشي استفاده مي شود . بعدا"
شيوه هاي ديگري براي ايجاد خروجي با استفاده از جاوا ر خواهيد آموخت . اما فعلا"
ما استفاده از روشهاي l/o كنسول را ادامه مي دهيم .
دقت كنيد كه ()println با يك علامت ويرگول نقطه (;)(semicolon) پايان ميگيرد.
كليه دستورات (statements) در جاوا با همين علامت پايان مي گيرند . دليل اينكه
ساير خطوط برنامه با اين علامت پايان نمي گيرند اين است كه آنها را از نظر ند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


عملگرها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۳۲ مراجعه امروز
۴۲۴۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
عملگرها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۱۷۳ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

عملگرها

جاوا يك محيط عملگر غني را فراهم كرده است . اكثر عملگرهاي آن را مي توان
در چهار گروه طبقه بندي نمود : حسابي arithmetic رفتار بيتي bitwise رابطه اي ralational
و منطقي logical جاوا همچنين برخي عملگرهاي اضافي براي اداره
حالتهاي خاص و مشخص تعريف كرده است .
نكته : اگر با C++/C آشنايي داريد ، حتما" خوشحال مي شويد كه بدانيد كاركرد
عملگرها در جاوا دقيقا"مشابه با C++/C است . اما همچنان تفاوتهاي ظريفي
وجود دارد .

عملگرهاي حسابي Arithmetic operators
عملگرهاي حسابي در عبارات رياضي استفاده مي شوند و طريقه استفاده از آنها
بهمان روش جبري است . جدول بعدي فهرست عملگرهاي حسابي را نشان مي دهد :
|
نتيجه آن | عملگر |
|
اضافه نمودن | + | |
تفريق نمودن ( همچنين منهاي يكاني ) | - | |
ضرب | * | |
تقسيم | / | |
تعيين باقيمانده | % | |
افزايش | ++ | |
انتساب اضافه نمودن | += | |
انتساب تفرق نمودن | =- | |
انتساب ضرب نمودن | *= | |
انتساب تقسيم نمودن | /= | |
انتساب تعيين باقيمانده | %= | |
كاهش | - - |

عملوندهاي مربوط به عملگرهاي حسابي بايد از نوع عددي باشند . نمي توانيد از
اين عملگرها روي نوع boolean استفاده كنيد ، اما روي انواع char قابل استفاده
هستند ، زيرا نوع char در جاوا بطور ضروري زير مجموعه اي از int است .

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

+ // Demonstrate the basic arithmetic operators.
+ class BasicMath {
+ public static void main(String args[] ){
+ // arithmetic using integers
+ System.out.println("Integer Arithmetic");
+ int a = 1 + 1;
+ int a = a * 3;
+ int a = b / 4;
+ int a = c - a;
+ int a =- d;
+ System.out.println("a = " + a);
+ System.out.println("a = " + b);
+ System.out.println("a = " + c);
+ System.out.println("a = " + d);
+ System.out.println("a = " + e);
+
+ // arithmetic using doubles
+ System.out.println("\nFloating Point Arithmetic");
+ double da = 1 + 1;
+ double db = da * 3;
+ double dc = db / 4;
+ double dd = dc - a;
+ double de =- dd;
+ System.out.println("da = " + da);
+ System.out.println("db = " + db);
+ System.out.println("dc = " + dc);
+ System.out.println("dd = " + dd);
+ System.out.println("de = " + de);
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

integer Arithmetic
a=2
b=6
c=1
d=-1
e=1
floating point arithmetic
da=2
db=6
dc=1.5
dd=-0.5
de=0.5

عملگر تعيين باقيمانده The Modulus operator
عملگر تعيين باقيمانده يعني % ، باقيمانده يك عمليات تقسيم را برمي گرداند.
اين عملگر براي انواع عدد اعشاري و انواع عدد صحيح قابل استفاده است . ( اما
در C++/C اين عملگر فقط در مورد انواع عدد صحيح كاربرد دارد . ) برنامه بعدي
نشان دهنده عملگر % مي باشد :

+ // Demonstrate the % operator.
+ class Modulus {
+ public static void main(String args[] ){
+ int x = 42;
+ double y = 42.3;
+
+ System.out.println("x mod 10 = " + x % 10);
+ System.out.println("y mod 10 = " + y % 10);
+ }
+ }

هنگاميكه اين برنامه را اجرا مي كنيد ، خروجي زير حاصل مي شود :

x mod 10=2
y mod 10=2.3

عملگرهاي انتساب حسابي Arithmetic Assignment operators
جاوا عملگرهاي ويژه اي را تدارك ديده كه با استفاده از آنها مي توان يك
عمليات حسابي را با يك انتساب تركيب نمود . احتمالا" مي دانيد كه دستوراتي نظير
مورد زير در برنامه نويسي كاملا" رايج هستند :

+ a = a + 4;

در جاوا ، مي توانيد اين دستور را بصورت ديگري دوباره نويسي نماييد :

+ a += 4;

اين روايت جديد از عملگر انتساب += استفاده مي كند هر دو دستورات يك عمل
واحد را انجام مي دهند : آنها مقدار aرا 4ا واحد افزايش مي دهند .
اكنون مثال ديگري را مشاهده نماييد :

+ a = a % 2;

كه مي توان آن را بصورت زير نوشت :

+ a %= 2;

در اين حالت %= باقيمانده a/2 را گرفته و حاصل را مجددا"در aر قرار مي دهد.
عملگرهاي انتسابي براي كليه عملگرهاي حسابي و دودوئي ( باينري ) وجود دارند .
بنابراين هر دستور با شكل :

Var = var op expression;

عبارت عملگر متغير متغير
را مي توان بصورت زير دوباره نويسي نمود :

var op = expression;

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

+ // Demonstrate several assignment operators.
+ class OpEquals {
+ public static void main(String args[] ){
+ int a = 1;
+ int b = 2;
+ int c = 3;
+
+ a += 5;
+ b *= 4;
+ c += a * b;
+ c %= 6;
+ System.out.println("a = " + a);
+ System.out.println("b = " + b);
+ System.out.println("c = " + c);
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

a=6
b=8
c=3

افزايش و كاهش Increment and Decrement
علامات ++ و -- عملگرهاي افزايشي و كاهشي جاوا هستند . اين عملگرها را قبلا"
معرفي كرده ايم . در اينجا آنها را با دقت بيشتري بررسي مي كنيم . همانگونه كه
خواهيد ديد ، اين عملگرها خصلتهاي ويژه اي دارند كه بسيار جالب توجه است . بحث
درباره اين عملگرها را از نحوه كار آنها شروع مي كنيم .
عملگر افزايشي ، عملوند خود را يك واحد افزايش مي دهد . عملگر كاهشي نيز
عملوند خود را يك واحد كاهش مي دهد . بعنوان مثال ، دستور زير را

+ x = x + 1;

مي توان با استفاده از عملگر افزايشي بصورت زير دوباره نويسي نمود :

+ x++;

بطور مشابهي ، دستور زير را

+ x = x - 1;

مي توان بصورت زير باز نويسي نمود :

+ x--;

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

+ x = 42;
+ y = ++x;

در اين حالت ، همانطوريكه انتظار داريد y معادل 43 مي شود ، چون افزايش قبل
از اينكه xبه y منتسب شود ، اتفاق مي افتد . بدين ترتيب خط y=++ معادل دو
دستور زير است :

+ x = x + 1;
+ y = x;

اما وقتي كه بصورت زير نوشته مي شوند :

+ x = 42;
+ y = x++;

مقدار x قبل از اينكه عملگر افزايشي اجرا شود ، بدست مي آيد ، بنابراين
مقدار y معادل 42 مي شود . البته در هر دو حالت x معادل 43 قرار مي گيرد . در
در اينجا ، خط y=x++ معادل دو دستور زير است :

+ y = x;
+ x = x + 1;

برنامه بعدي نشان دهنده عملگر افزايشي است .

+ // Demonstrate ++.
+ class IncDec {
+ public static void main(String args[] ){
+ int a = 1;
+ int b = 2;
+ int c;
+ int d;
+
+ c = ++b;
+ d = a++;
+ c++;
+ System.out.println("a = " + a);
+ System.out.println("b = " + b);
+ System.out.println("c = " + c);
+ System.out.println("d = " + d);
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

a=2
b=3
c=4
d=1

عملگرهاي رفتار بيتي The Bitwise operators
جاوا چندين عملگر رفتار بيتي تعريف نموده كه قابل اعمال روي انواع عدد صحيح
شامل long، int،، short،، char،و byteو مي باشند . اين عملگرها روي بيت هاي
تكي عملوندهاي خود عمل مي كنند . اين عملگرها را در جدول زير خلاصه نموده ايم :
نتيجه آن عملگر
Bitwise unary Not
Not يكاني رفتار بيتي ~ Bitwise AND
AND رفتار بيتي & Bitwise OR
OR رفتار بيتي | Bitwise exclusive OR
OR خارج رفتار بيتي ^ shift right
>> حركت براست shift right zero fill
>>> حركت براست پر شده با صفر shift left
<< حركت به چپ Bitwise AND assignment
انتساب AND رفتار بيتي &= Bitwise OR assignment
انتساب OR رفتار بيتي |= Bitwise exclusive OR assignment
انتساب OR خارج رفتار بيتي ^= shift right assignment
انتساب حركت راست = >>shift right zero fill assignment
انتساب حركت براست پر شده با صفر = >>>shift left assignment
انتساب حركت به چپ = <<
از آنجاييكه عملگرهاي رفتار بيتي با بيت هاي داخل يك عدد صحيح سر و كار
دارند ، بسيار مهم است بدانيم كه اين سر و كار داشتن چه تاثيري ممكن است روي
يك مقدار داشته باشد . بخصوص بسيار سودمند است بدانيم كه جاوا چگونه مقادير
عدد صحيح را ذخيره نموده و چگونه اعداد منفي را معرفي مي كند . بنابراين ، قبل
از ادامه بحث ، بهتر است اين دو موضوع را باختصار بررسي نماييم .
كليه انواع صحيح بوسيله ارقام دودوئي ( باينري ) داراي پهناي بيتي گوناگون
معرفي ميشوند. بعنوان مثال ، مقدار byte عدد 42 در سيستم باينري معادل 00101010
است ، كه هر يك از اين نشانه ها يك توان دو را نشان مي دهند كه با 2 به توان 0
در بيت سمت راست شروع شده است . يا موقعيت بعدي بيت بطرف چپ 2'يا 2ا است و به
طرف چپ بيت بعدي 2 به توان 2يا 4ا است ، بعدي 8 ، 16 ، 32 و همينطور الي آخر
هستند . بنابراين عدد 42 بيت 1 را در موقعيتهاي اول ، سوم و پنجم ( از سمت
راست درنظربگيريد ) دارد. بدين ترتيب 42 معادل جمع 5 بتوان 3+2 بتوان 1+2 بتوان 2
يعني 2+8+32 مي باشد .
كليه انواع عدد صحيح ( باستثنائ char ) اعداد صحيح علامت دار هستند . يعني
كه اين انواع مقادير منفي را همچون مقادير مثبت مي توانند معرفي كنند . جاوا
از يك روش رمزبندي موسوم به مكمل دو (two's complement) استفاده مي كند كه در
آن ارقام منفي با تبديل ( تغيير 1به 0 و بالعكس ) كليه بيت هاي يك مقدار و
سپس اضافه نمودن 1 به آن معرفي مي شوند . بعنوان مثال براي معرفي 42 ، ابتدا
كليه بيت هاي عدد 42 (00101010) را تبديل مي نماييم كه 11010101 حاصل مي شود
آنگاه 1 را به آن اضافه مي كنيم . كه حاصل نهايي يعني 11010110 معرف عدد 42
خواهد بود . براي رمز گشايي يك عدد منفي ، كافي است ابتدا كليه بيت هاي آن را
تبديل نموده ، آنگاه 1 را به آن اضافه نماييم . 42- يعني 11010110 پس از تبديل
برابر 00101001 يا 41 شده و پس از اضافه نمودن 1 به آن برابر 42 خواهد شد .
دليل اينكه جاوا( واكثر زبانهاي برنامه نويسي )از روش مكمل دو(two's complement)
استفاده مي كنند ، مسئله تقاطع صفرها (Zero crossing) است . فرض كنيد يك مقدار byte
براي صفر با 00000000 معرفي شده باشد. در روش مكمل يك (one's complement)
تبديل ساده كليه بيت ها منجر به 11111111 شده كه صفر منفي را توليد مي كند .
اما مشكل اين است كه صفر منفي در رياضيات عدد صحيح غير معتبر است . اين مشكل
بااستفاده از روش مكمل دو (two's complement) براي معرفي مقادير منفي حل خواهد
شد . هنگام استفاده از روش مكمل دو ، 1 به مكمل اضافه شده و عدد 100000000
توليد مي شود . اين روش بيت 1 را در منتهي اليه سمت چپ مقدار byte قرار داده
تا رفتار مورد نظر انجام گيرد، جايي كه 0با 0ا يكسان بوده و 11111111 رمزبندي
شده 1 است . اگر چه در اين مثال از يك مقدار byte استفاده كرديم ، اما همين
اصول براي كليه انواع عدد صحيح جاوا صدق مي كنند .
از آنجاييكه جاوا از روش مكمل دو براي ذخيره سازي ارقام منفي استفاده ميكند
و چون كليه اعداد صحيح در جاوا مقادير علامت دار هستند بكار بردن عملگرهاي
رفتار بيتي براحتي نتايج غير منتظره اي توليد مي كند . بعنوان مثال برگرداندن
بيت بالاتر از حد مجاز (high-order) سبب مي شود تا مقدار حاصله بعنوان يك رقم
منفي تفسير شود ، خواه چنين قصدي داشته باشيد يا نداشته باشيد . براي جلوگيري
از موارد ناخواسته ، فقط بياد آوريد كه بيت بالاتر از حد مجاز (high-order)
علامت يك عدد صحيح را تعيين مي كند، صرفنظر از اينكه بيت فوق چگونه مقدار گرفته
باشد .

عملگرهاي منطقي رفتار بيتي
عملگرهاي منطقي رفتار بيتي شامل &، |،، ^،، ~، هستند. جدول زير حاصل هر يك
از اين عمليات را نشان مي دهد . در بحث بعدي بياد داشته باشيد كه عملگرهاي
رفتار بيتي به بيت هاي منفرد داخل هر عملوند اعمال مي شوند .

A B A|B A&B A^B ~A
0 0 0 0 0 1
1 0 1 0 1 0
0 1 1 0 1 1
1 1 1 1 0 0

NOT

رفتار بيتي
عملگر NOT يكاني يعني ~ كه آن را مكمل رفتار بيتي (bitwise complement) هم
مي نامند ، كليه بيت هاي عملوند خود را تبديل مي كند . بعنوان مثال ، عدد 42
كه مطابق الگوي بيتي زير است : 00101010

پس از اعمال عملگر NOT بصورت زير تبديل مي شود : 11010101

AND
رفتار بيتي
عملگر AND يعني & اگر هر دو عملوند 1 باشند ، يك بيت 1 توليد مي كند . در
كليه شرايط ديگر يك صفر توليد مي شود . مثال زير را نگاه كنيد : 00101010 42
& 00001111 15

00001010 10

OR
رفتار بيتي
عملگر OR يعني | بيت ها را بگونه اي تركيب مي كند كه اگر هر يك از بيت هاي
عملوندها 1 باشد ، آنگاه بيت حاصله نيز 1 خواهد بود . به مثال زير نگاه كنيد : 00102010 42
| 00001111 15

00101111 47

XOR
رفتار بيتي
عملگر XOR يعني ^ بيت ها را بگونه اي تركيب مي كند كه اگر دقيقا" يك عملوند 1
باشد ، حاصل برابر 1 خواهد شد . در غير اينصورت ، حاصل 0 مي شود .
مثال بعدي چگونگي كار اين عملگر را نشان مي دهد . اين مثال همچنين يكي از
خصلتهاي سودمند عملگر XOR را نمايش مي دهد . دقت كنيد كه هر جا عملوند دوم يك
بيت 1 داشته باشد ، چگونه الگوي بيتي عدد 42 تبديل مي شود . هر جا كه عملوند
دوم بيت 0 داشته باشد ، عملوند اول بدون تغيير مي ماند . هنگام انجام برخي از
انواع عملكردهاي بيتي ، اين خصلت بسيار سودمند است . 00101010 42
^ 00001111 15

00100101 37

استفاده از عملگرهاي منطقي رفتار بيتي
برنامه بعدي نشان دهنده عملگرهاي منطقي رفتار بيتي است :

+ // Demonstrate the bitwise logical operators.
+ class BitLogic {
+ public static void main(String args[] ){
+ String binary[] = {
+ "0000"/ "0001"/ "0010"/ "0011"/ "0100"/ "0101"/ "0110"/ "0111"/
+ "1000"/ "1001"/ "1010"/ "1011"/ "1100"/ "1101"/ "1110"/ "1111"
+ };
+ int a = 3; // 0 + 2 + 1 or 0011 in binary
+ int b = 6; // 4 + 2 + 0 or 0110 in binary
+ int c = a | b;
+ int d = a & b;
+ int e = a ^ b;
+ int f =( ~a & b )|( a & ~b);
+ int g = ~a & 0x0f;
+
+ System.out.println(" a = " + binary[a]);
+ System.out.println(" b = " + binary[b]);
+ System.out.println(" a|b = " + binary[c]);
+ System.out.println(" a&b = " + binary[d]);
+ System.out.println(" a^b = " + binary[e]);
+ System.out.println("~a&b|a&~b = " + binary[f]);
+ System.out.println(" ~a = " + binary[g]);
+ }
+ }

در اين مثال ، aو bو الگوهاي بيتي دارند كه كليه چهار احتمال براي ارقام
دو تايي باينري را معرفي مي كنند . 0-0، 0-1،، 1-0،و 1-1و . مي توانيد مشاهده
كنيد چگونه |و &و روي هر يك از بيت ها با توجه به نتايج در cو dو عمل مي كنند.
مقادير نسبت داده شده به eو fو مشابه بوده و نشان دهنده چگونگي كار عملگر ^
مي باشند . آرايه رشته اي با نام binary معرفي ارقام 0 تا 15 را بصورت باينري و
قابل خواندن براي انسان نگهداري مي كند . در اين مثال ، آرايه فوق طوري نمايه
سازي شده تا معرفي باينري هر يك از نتايج را نشان دهد . آرايه طوري ساخته شده
كه معرفي رشته اي صحيح يك مقدار باينري n را در binary[n] ذخيره مي كند . مقدار ~a
بوسيله عملگر ANDبا oxofا( 00001111 باينري ) عمل شده تا مقدار آن را به
كمتر از 16 كاهش دهد تا بتوان با استفاده از آرايه binary از آن چاپ گرفت .
اكنون خروجي اين برنامه بصورت زير مي باشد :

a=1011
b=0110
a^Eb=0111
a&b=0010
a&b=0101
~a&b^Ea&~b=0101
~a=1100

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

Value << num

تعداد دفعات مقدار
در ايجا num مشخص كننده تعداد مكانهايي است كه بيت هاي موجود در value بايد
كليه بيت هاي موجود در يك مقدار مشخص را <<به چپ انتقال يابند . بدين ترتيب
بتعداد مكانهايي كه در num مشخص شده بطرف چپ حركت مي دهد . براي هر بار حركت
به چپ ، بيت high-order ( بيش از حد مجاز ) منتقل شده و از دست خواهد رفت و
يك صفر در طرف راست مقدار ، جايگزين مي شود . بدين ترتيب هنگاميكه يك حركت به
چپ روي يك عملوند int عمل مي كند ، بيت هاي گذشته از مكان 31 از دست خواهند
رفت . اگر عملوند يك long باشد، بيت ها پس از گذشتن از مكان 63 از دست ميروند.
هنگاميكه مقادير byteو shortو را انتقال مي دهيد ، ارتقائ خودكار انواع در
جاوا نتايج غير منتظره اي ايجاد مي كند . حتما" مي دانيد كه هنگام ارزشيابي
عبارات ، مقادير byteو shortوبه int ارتقائ مي يابند. بعلاوه جواب چنين عبارتي
از نوع int خواهد بود . بنابراين حاصل يك حركت به چپ روي مقادير byteو shortو
يك int خواهد بود و بيت هاي انتقال يافته به چپ تا زمانيكه از مكان بيت 31
نگذرند ، از دست نمي روند . علاوه براين ، يك مقدار منفي byteو shortو هنگاميكه
به int ارتقائ مي يابد ، بسط علامت پيدا مي كند . بنابراين بيت هاي بيش از حد
مجاز با بيت 1 پر مي شوند . بخاطر اين دلايل ، انجام يك حركت به چپ روي byte و short
مستلزم آن است كه از بايت هاي بيش از حد مجاز در جواب int دست بكشيد .
بعنوان مثال ، اگر يك مقدار byte را حركت به چپ بدهيد ، آن مقدار ابتدا به نوع int
تبديل شده و سپس انتقال خواهد يافت . بايد سه بايت بالايي حاصل را از دست
بدهيد . اگر بخواهيد حاصل يك مقدار byte انتقال يافته را بدست آوريد . بايد سه
بايت بالايي حاصل را از دست بدهيد . آسان ترين روش براي انجام اينكار استفاده
از تبديل cast و تبديل جواب به نوع byte است . مثال بعدي همين مفهوم را براي
شما آشكار مي سازد :

+ // Left shifting a byte value.
+ class ByteShift {
+ public static void main(String args[] ){
+ byte a = 64/ b;
+ int i;
+
+ i = a << 2;
+ b =( byte( )a << 2);
+
+ System.out.println("Original value of a :" + a);
+ System.out.println("i and b :" + i + " " + b);
+ }
+ }

خروجي توليد شده توسط اين برنامه بقرار زير مي باشد :

original value of a:64
i and b :256 0

چون براي اهداف ارزشيابي ، a به نوع int ارتقائ يافته ، دوبار حركت به چپ
مقدار 64 (0000 َ0100) منجر به i مي گردد كه شامل مقدار 256 (0000 َ1 0000)
مي باشد . اما مقدار b دربرگيرنده صفر است زيرا پس از انتقال ، بايت كمتر از
حد مجاز (loworder) اكنون شامل صفر است . تنها بيت دربرگيرنده 1 به بيرون
انتقال يافته است .
از آنجاييكه هر بار حركت به چپ تاثير دو برابر سازي مقدار اصلي را دارد
برنامه نويسان اغلب از اين خاصيت بجاي دو برابر كردن استفاده مي كنند . اما
بايد مراقب باشيد . اگر يك بيت 1 را به مكان بيت بيش از حد مجاز (31 يا 63)
منتقل كنيد ، مقدار فوق منفي خواهد شد . برنامه بعدي همين نكته را نشان ميدهد.

+ // Left shifting as a quick way to multiply by 2.
+ class MultByTwo {
+ public static void main(String args[] ){
+ int i;
+ int num = 0xFFFFFFE;
+
+ for(i=0; i<4; i++ ){
+ num = num << 1;
+ System.out.println(num);
+ }
+ }
+ }

خروجي اين برنامه بقرار زير خواهد بود : 536870908

1073741816
2147483632
- 32

مقدار آغازين را با دقت انتخاب كرده ايم بطوريكه بيت بعد از چهار مكان حركت
بطرف چپ ، مقدار 32- را توليد نمايد . همانطوريكه مي بينيد ، هنگاميكه بيت 1
به بيت 31 منتقل مي شود ، رقم بعنوان منفي تفسير خواهد شد .

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

value >> num

تعداد دفعات مقدار
در اينجا ، num مشخص كننده تعداد مكانهايي است كه بيت هاي value بايد بطرف
كليه بيت هاي يك مقدار مشخص شده را به تعداد >>راست انتقال يابند . يعني
مكانهاي بيتي مشخص شده توسط num بطرف راست انتقال مي دهد .
كد قطعه اي زير مقدار 32 را دو مكان بطرف راست منتقل مي كند و آنگاه جواب
آن در a معادل 8 قرار مي گيرد :

+ int a = 32;
+ a = a >> 2; // a now contains 8

اگر بيت هايي از يك مقدار به بيرون منتقل شوند ، آن بيت ها از دست خواهند
رفت . بعنوان مثال كد قطعه اي بعدي مقدار 35 را دو مكان بطرف راست منتقل نموده
و باعث مي شود تا دو بيت كمتر از حد مجاز از دست رفته و مجددا" جواب آن در a
معادل 8 قرار گيرد .

+ int a = 35;
+ a = a >> 2; // a still contains 8

همين عمليات را در شكل باينري نگاه مي كنيم تا اتفاقي كه مي افتد ، روشن تر
شود : 00100011 35
>> 2
00001000 8

هر بار كه يك مقدار را به طرف راست منتقل مي كنيد ، آن مقدار تقسيم بر دو
مي شود و باقيمانده آن از دست خواهد رفت . مي توانيد از مزاياي اين روش در
تقسيم بر دو اعداد صحيح با عملكرد سطح بالا استفاده نماييد . البته ، بايد مطمئن
شويد كه بيت هاي انتهايي سمت راست را به بيرون منتقل نكنيد .
هنگاميكه حركت بطرف راست را انجام مي دهيد ، بيت هاي بالايي ( از سمت چپ )
در معرض حركت بطرف راست قرار گرفته ، با محتوي قبلي بيت بالايي پر مي شوند .
اين حالت را بسط علامت (sign extension) ناميده و براي محفوظ نگهداشتن علامت
ارقام منفي هنگام حركت بطرف راست استفاده مي شوند. بعنوان مثال 1>>8- معادل 4-
است كه به شكل باينري زير مي باشد : 11111000- 8
>> 1
11111100- 4

جالب است بدانيد كه اگر 1- را بطرف راست حركت دهيد، حاصل آن همواره 1- باقي
مي ماند ، چون بسط علامت ، مراقب آوردن يك بيت ديگر در بيت هاي بيش از حد مجاز
خواهد بود .
گاهي هنگام حركت بطرف راست مقادير ، مايل نيستيم تا بسط علامت اجرا شود .
بعنوان مثال ، برنامه بعدي يك مقدار نوع byte را به معرفي رشته اي در مبناي 16
تبديل مي كند . دقت كنيد كه مقدار منتقل شده با استفاده از عملگر ANDيا oxofا
پوشانده شده تا هر گونه بيت هاي بسط يافته علامت را بدور اندازد بطوريكه مقدار
فوق را بتوان بعنوان يك نمايه به آرايه اي از كاراكترهاي در مبناي 16 استفاده
نمود .

+ // Masking sign extension.
+ class HexByte {
+ static public void main(String args[] ){
+ char hex[] = {
+ '0'/ '1'/ '2'/ '3'/ '4'/ '5'/ '6'/ '7'/
+ '8'/ '9'/ 'a'/ 'b'/ 'c'/ 'd'/ 'e'/ 'f'
+ };
+ byte b =( byte )oxf1
+
+ System.out.println("b = ox" + hex[(b >> 4 )& oxof] + hex[b & oxof]);
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

b=oxf1

حركت به راست فاقد علامت
بطور خودكار >>اكنون مي دانيد كه هر بار يك انتقال اتفاق مي افتد ، عملگر
جاي خالي بيت بيش از حد مجاز را با محتوي قبلي اش پر مي كند . اين عمل سبب حفظ
علامت آن مقدار مي گردد . اما گاهي تمايلي براي اينكار نداريم . بعنوان مثال
مي خواهيد چيزي را منتقل كنيد كه معرف يك مقدار عددي نيست . بالطبع نمي خواهيد
عمل بسط علامت انجام گيرد . اين حالت هنگام كار با مقادير براساس پيكسل (pixel)
و گرافيك اغلب وجود دارد . در چنين شرايطي لازم است تا مقدار صفر در بيت بيش از
حد مجاز قرار گيرد ، صرفنظر از اينكه مقدار قبلي در آن بيت چه بوده است . اين
حالت را انتقال فاقد علامت (usigned shift) مي گويند. براي اين منظور، از عملگر
استفاده كنيد كه صفرها را در بيت بيش >>>حركت به راست فاقد علامت در جاوا يعني
از حد مجاز منتقل مي كند .
مي باشد . در اينجا >>>كد قطعه اي زير نشان دهنده عملگر a معادل 1- است كه
كليه 32 بيت را در باينري روي 1 تنظيم مي كند . اين مقدار سپس 24 بيت بطرف
راست انتقال مي يابد، و 24 بيت بالايي را با صفرها پر مي كند و بسط علامت معمولي
را ناديده مي گيرد . بدين ترتيب a معادل 255 مي باشد . + int a =- 1;
+ a = a >>> 24;

اينجا همان عمليات را در شكل باينري مشاهده مي كنيد تا بهتر بفهميد چه
اتفاقي افتاده است : 1
در باينري بعنوان يك int 11111111 11111111 11111111 11111111 >>>24
255
در باينري بعنوان يك int َ11111111 00000000 00000000 00000000
اغلب اوقات آنچنان سودمند كه بنظر مي رسد ، نبوده چون فقط براي >>>عملگر
مقادير 32 بيتي و 64 بيتي معني دارد . بياد آوريد كه مقادير كوچكتر در عبارات
بطور خودكار به int ارتقائ مي يابند . بدين ترتيب بسط علامت اتفاق افتاده و
حركت بجاي مقادير 8 بيتي و 16 بيتي روي مقادير 32 بيتي انجام مي شود . يعني
بايد انتظار يك حركت به راست فاقد علامت روي يك مقدار byte داشته باشيم كه در
بيت 7 ، صفر را قرار مي دهد . اما واقعا" اينطور نيست ، چون در واقع مقدار 32
بيتي است كه منتقل مي شود . برنامه بعدي اين تاثيري را نشان مي دهد .

+ // Unsigned shifting a byte value.
+ class ByteUShift {
+ static public void main(String args[] ){
+ char hex[] = {
+ '0'/ '1'/ '2'/ '3'/ '4'/ '5'/ '6'/ '7'/
+ '8'/ '9'/ 'a'/ 'b'/ 'c'/ 'd'/ 'e'/ 'f'
+ };
+ byte b =( byte )oxf1
+ byte c =( byte( )b >> 4);
+ byte d =( byte( )b >>> 4);
+ byte e =( byte(( )b & oxff )>> 4);
+
+ System.out.println(" b = ox"
+ + hex[(b >> 4 )& oxof] + hex[b & oxof]);
+ System.out.println(" b >> 4 = ox"
+ + hex[(c >> 4 )& oxof] + hex[c & oxof]);
+ System.out.println(" b >>> 4 = ox"
+ + hex[(d >> 4 )& oxof] + hex[d & oxof]);
+ System.out.println("(b & oxof )>> 4 = ox"
+ + hex[(e >> 4 )& oxof] + hex[e & oxof]);
+ }
+ }

چگونه هنگام كار با بايت ها عملي >>>خروجي اين برنامه نشان ميدهد كه عملگر
انجام نمي دهد . متغير b بعنوان يك مقدار byte منفي قراردادي در اين نمايش
تنظيم شده است . سپس مقدار byteدر bر كه چهار مكان بطرف راست انتقال بافته به C
منتسب مي شود كه بخاطر بسط علامت مورد انتظار oxff است . سپس مقدار byteدر bر
كه چهار مكان بطرف راست و فاقد علامت منتقل شده به d منتسب مي شود كه انتظار
داريد oxof باشد ، اما در حقيقت oxff است چون بسط علامت هنگاميكه b به نوع int
قبل از انتقال ارتقائ يافته اتفاق افتاده است . آخرين عبارت ، e را در مقدار byte
متغير b كه با استفاده از عملگر ANDبا 8ا بيت پوشانده شده تنظيم نموده و
سپس چهار مكان بطرف راست منتقل مي كند كه مقدار مورد انتظار oxof را توليد
مي كند . دقت كنيد كه عملگر حركت به راست فاقد علامت براي d استفاده نشد ، چون
حالت بيت علامت بعد از AND شناخته شده است .

b=oxf1
b>>4=oxff
b>>>4=oxff
( b&oxff)>>4=oxof

انتسابهاي عملگر رفتار بيتي
كليه عملگرهاي رفتار بيتي باينري يك شكل مختصر مشابه باعملگرهاي جبري دارند
كه عمل انتساب را با عمليات رفتار بيتي تركيب مي كنند. بعنوان مثال ، دو دستور
بعدي كه مقدار a را چهار بيت به راست حركت مي دهند ، معادل يكديگرند :

+ a = a >> 4;
+ a >>= 4;

بطور مشابه ، دو دستور زير كه a را به عبارت روش بيتي aoRb منتسب مي كنند
معادل يكديگرند :

+ a = a | b;
+ a |= b;

برنامه بعدي تعدادي از متغيرهاي عدد صحيح را بوجود آورده آنگاه از شكل
مختصر انتسابهاي عملگر رفتار بيتي براي كار كردن بااين متغيرها استفاده ميكند:

+ class OpBitEquals {
+ public static void main(String args[] ){
+ int a = 1;
+ int b = 2;

کيفيت مقاله :
عالی خوب متوسط ضعيف


عملگرهاي رابطه اي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۳۵ مراجعه امروز
۴۲۵۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
عملگرهاي رابطه اي
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۱۰۳ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

عملگرهاي رابطه اي

اين عملگرها تعيين كننده رابطه ها بين يك عملوند با عملوند ديگر هستند. بطور
مشخص ، آنها تساوي يا ترتيب بندي (ordering) را معين ميكنند. عملگرهاي رابطه اي
را در زير نشان داده ايم :
نتيجه آن عملگر

مساوي با ==
نامساوي با !=
>بزرگتر از
<كوچكتر از
بزرگتر از يا مساوي با = >
كوچكتر از يا مساوي با = <

حاصل اين عمليات يك مقدار boolean است . از عملگرهاي رابطه اي بخصوص در
عباراتي كه دستور if و انواع دستورات حلقه اي را كنترل مي كنند ، زياد استفاده
مي شوند .
هر نوعي در جاوا شامل اعداد صحيح ، ارقام اعشاري ، كاراكترها و عبارات بولي
را مي توان بوسيله آزمون تساوي == و آزمون عدم تساوي != مقايسه نمود . دقت
نماييد كه در جاوا ( نظير Cو C++و ) تساوي توسط دو علامت تساوي و نه يك علامت
نشان داده مي شود . ( بياد آوريد كه علامت تكي تساوي يك عملگر انتساب است . )
عملگرهاي ترتيب بندي فقط براي مقايسه انواع عددي بكار مي روند . يعني فقط
عملوندهاي اعداد صحيح ، اعداد اعشاري و كاراكترها را مي توان مقايسه نمود و
و تعيين كرد كه كداميك از ديگري بزرگتر يا كوچكتر است .
گفتيم كه نتيجه توليد شده توسط يك عملگر رابطه اي ، يك مقدار boolean است .
بعنوان مثال ، كد قطعه اي زير كاملا" معتبر است :

+ int a = 4;
+ int b = 1;
+ boolean c = a < b;

در اين حالت ، جواب b اگر سابق برنامه نويسي C++/C داريد ، به نكته زير توجه نماييد . در C++/C
اين نوع از دستورات بسيار رايج است .

+ int done;
+ //...
+ if(!done ... )// Valid in C/C++
+ if(done ... )// but not in Java.

در جاوا ، آن دستورات بايد بصورت زير دوباره نويسي شوند :

+ if(done == 0 ... )// This is Java-style.
+ if(done != 0... )

علت آن است كه در جاوا صحيح و ناصحيح (true and false) مشابه C++/C تعريف
نشده است . در C++/C صحيح هر مقدار غير صفر و ناصحيح معادل صفر است . در جاوا true
و falseو مقادير غيرعادي هستند كه ربطي با صفر يا غيرصفر ندارند. بنابراين
براي آزمون صفر و غير صفر، بايد بطور صريح يك يا چند عملگر رابطه اي را استخدام

کيفيت مقاله :
عالی خوب متوسط ضعيف


عملگرهاي منطقي بولي Boolean ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۳۸ مراجعه امروز
۴۲۵۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
عملگرهاي منطقي بولي Boolean
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۱۵۴ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

عملگرهاي منطقي بولي Boolean

عملگرهاي منطقي بولي كه در زير نشان داده ايم فقط روي عملوندهاي بولي عمل
مي كنند . كليه عملگرهاي منطقي باينري دو مقدار boolean را تركيب مي كنند تا
يك مقدار منتج boolean ايجاد نمايند .
نتيجه آن عملگر
AND
منطقي & OR
منطقي | XOR
منطقي ( خارج ) ^ OR
مدار كوتاه || AND
مدار كوتاه && NOT
يكاني منطقي !
انتساب AND &=
انتساب OR |=
انتساب XOR ^=
مساوي با ==
نامساوي با !=
سه تايي if-tethen-eselse :?
عملگرهاي بولي منطقي &، |،، ^، روي مقادير Boolean همانطوري كه روي بيت هاي
يك عدد صحيح رفتار مي كنند ، عمل خواهند كرد . عملگر منطقي ! حالت بولي را
معكوس مي كند :

!false=true t!true=false

جدول بعدي تاثيرات هر يك از عمليات منطقي را نشان مي دهد :

A B A|B A&B A^B !A
False False False False False True
True False True False True False
False True True False True True
True True True True False False

در زير برنامه اي را مشاهده مي كنيد كه تقريبا" با مثال Bitlogic قبلي برابر
است ، اما در اينجا بجاي بيت هاي باينري روي مقادير منطقي بولي عمل مي كند :

+ // Demonstrate the boolean logical operators.
+ class BoolLogic {
+ public static void main(String args[] ){
+ boolean a = true;
+ boolean b = false;
+ boolean c = a | b;
+ boolean d = a & b;
+ boolean e = a ^ b;
+ boolean f =( !a & b )|( a & !b);
+ boolean g = !a;
+ System.out.println(" a = " + a);
+ System.out.println(" b = " + b);
+ System.out.println(" a|b = " + c);
+ System.out.println(" a&b = " + d);
+ System.out.println(" a^b = " + e);
+ System.out.println("!a&b|a&!b = " + f);
+ System.out.println(" !a = " + g);
+ }
+ }

پس از اجراي اين برنامه ، شما همان قوانين منطقي كه براي بيت ها صادق بود
در مورد مقادير boolean مشاهده مي كنيد . در خروجي اين برنامه مشاهده مي كنيد
كه معرفي رشته اي يك مقدار بولي درجاوا يكي از مقادير لفظي trueيا falseا است .

a = true
b = false
a|b = true
a&b = false
a^b = true
!a&b|a&!b = true
!a = false

عملگرهاي منطقي مدار كوتاه
جاوا دو عملگر بولي بسيار جالب دارد كه در اكثر زبانهاي ديگر برنامه نويسي
وجود ندارند . اين ها روايت ثانويه عملگرهاي ANDو ORو بولي هستند و بعنوان
عملگرهاي منطقي مدار كوتاه معرفي شده اند. در جدول قبلي مي بينيد كه عملگر OR
هرگاه كه A معادل true باشد، منجر به true مي شود، صرفنظر از اينكه B چه باشد.
بطور مشابه ، عملگر AND هرگاه A معادل false باشد منجر به false مي شود. صرفنظر
از اينكه B چه باشد . اگر از اشكال ||و &&و بجاي |و &و استفاده كنيد، هنگاميكه
حاصل يك عبارت مي تواند توسط عملوند چپ بتنهايي تعيين شود ، جاوا ديگر به
ارزيابي عملوند راست نخواهد پرداخت . اين حالت بسيار سودمند است بخصوص وقتي كه
عملوند سمت راست بستگي به عملوند سمت چپ و trueيا falseا بودن آن براي درست
عمل كردن داشته باشد . بعنوان مثال ، كد قطعه اي زير به شما نشان مي دهد چگونه
مي توانيد مزاياي ارزيابي منطقي مدار كوتاه را استفاده نموده تا مطمئن شويد
كه عمليات تقسيم قبل از ارزيابي آن معتبر است .

+ if(denom != 0 && num / denom > 10)

از آنجاييكه شكل مدار كوتاه AND يعني && استفاده شده است ، هنگاميكه denom
صفر باشد ، خطر ايجاد يك استثنائ حين اجرا منتفي است . اگر همين خط از كد را
با استفاده از رايت تكي AND يعني & بنويسيم ، هر دو عملوند بايد مورد ارزيابي
قرار گيرند و هنگاميكه denom صفر باشد يك استثنائ حين اجرا بوجود مي آيد .
در حالتهايي كه شامل منطق بولي باشند : استفاده از ارزيابيهاي مدار كوتاه AND
و ORو يك روش استاندارد است كه روايتهاي تك كاراكتري عملگرها را منحصرا"
براي عمليات رفتار بيتي قرار مي دهد . اما استثنائاتي بر اين قوانين وجود
دارند . بعنوان مثال ، دستور زير را در نظر بگيريد :

+ if(c==1 & e++ < 100 )d = 100;

در اينجا استفاده از يك علامت & تكي اطمينان مي دهد كه عمليات افزايشي به e

کيفيت مقاله :
عالی خوب متوسط ضعيف


صحنه براي جاوا آماده شد ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۴۱ مراجعه امروز
۴۲۵۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
صحنه براي جاوا آماده شد
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۳۱۸ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

صحنه براي جاوا آماده شد

اواخر دهه 80 و اوايل دهه 1990 ميلادي استفاده از برنامه نويسي شي ئ گرا به
وسيله C++ كاملا" متداول شد . در حقيقت بنظر مي رسيد كه برنامه نويسان سرانجام
زبان كاملي را پيدا كرده باشند . چون C++ كارآيي فراوان و عناصر شيوه اي زبان C
را با نمونه هايي از شي ئ گرايي آميخته بود . C++ زباني بود كه براي ايجاد طيف
وسيعي از برنامه ها مورد استفاده قرار مي گرفت . اما همچون گذشته نيروهاي جديدي
بوجود آمده تا زبان برنامه نويسي كامپيوتر را باز هم به پيش رانند .
طي مدت كوتاهي اينترنت و وب بطور سرسام آوري گسترش يافتند : اين حادثه
انقلابي ديگر در زمينه برنامه نويسي بوجود آورد .

تولد جاوا
جاوا در سال 1991 ميلادي در شركت Sun Microsystems و توسط James Gosling Patrick Naughton
، Chris Warth،، Ed Frank،و Mike Sheridanو بوجود آمد . آماده
سازي اولين روايت اين زبان هيجده ماه بطول انجاميد . اين زبان ابتدا "oak"
ناميده شد اما بعدا" در سال 1995 نام آن به "java" تغيير يافت . بين اجراي
اوليه oak در پاييز 1992 ميلادي و اعلام عمومي زبان جاوا در بهار 1995 ميلادي
افراد ديگري در طراحي و تحول ، اين زبان نقش مهمي ايفا نمودند . Bill Joy Arthur Van Hoff
،Jonathan Payne،،Frank Yellin،و Tim Lind holmو ازجمله افرادي
بودند كه در آماده سازي نسخه نمونه اوليه سهيم بودند .
تا حدودي باعث تعجب است كه انگيزه اوليه ابداع جاوا ، اينترنت نبوده ، بلكه
انگيزه اوليه آن نياز به يك زبان مستقل ازمحيط زيربنايي (platform-independent)
بود كه بتواند نرم افزارهايي توليد نمايد كه قابليت كاربرد در وسائل مصرفي
الكترونيكي مختلف نظير اجاقهاي مايكروويو و كنترل از راه دور را داشته باشند .
همانطوريكه مي دانيد از انواع مختلف cpu بعنوان كنترلر استفاده مي شود . تنها
مشكل Cو C++و ( و اكثر زبانهاي برنامه نويسي ) اين است كه آنها براي كامپايل
شدن روي يك هدف مشخص طراحي مي شوند . اگر چه مي توان يك برنامه C++ را براي هر
نوع cpu كامپايل نمود ، اما براي اينكار نياز به يك كامپايلر كامل C++ براي آن
نوع cpu وجود دارد . اما توليد كامپايلرها بسيار پر هزينه و زمان بر است .
بنابراين براي رفع اين مشكل نياز به يك راه حل كم هزينه و كاراتر وجود داشت .
در تلاشي براي حل اين مشكل ، Gosling و همكارانش كار روي يك زبان قابل حمل
(Portable) و مستقل از محيط زير بنايي (platform-neutral) را شروع كردند تا
بتوانند كدهايي ايجاد نمايند كه روي انواع cpu و تحت محيط هاي مختلف اجراشوند.
اين تلاش در نهايت منجر به تولد زبان جاوا شد .
دومين دليلي كه نياز به زباني نظير جاوا را تشديد نمود ، حضور وب بود . اگر
همزمان با معرفي جاوا ، وب نيز حضور خود را نمايان نمي ساخت ، اكنون جاوا فقط
يك زبان تنها براي برنامه نويسي وسايل مصرفي الكترونيكي ميشد. اما با ضرورتهاي
بوجود آمده توسط وب ، جاوا پيشتاز زبانهاي برنامه نويسي شد ، زيرا وب تقاضا
برراي برنامه هاي قابل حمل را تشديد نمود .
اكثر برنامه نويسان مي آموزند كه برنامه هاي قابل حمل همانگونه كه آرماني
هستند ، فرار نيز هستند . اگر چه تقاضا براي شيوه هاي ايجاد برنامه هاي كارآ و
قابل حمل بقدمت اصول برنامه نويسي است ، اما نسبت به ساير مشكلات موجود از
اولويت كمتري برخوردار بوده است . بعلاوه چون جهان كامپيوتر بطور عمده بين سه
نوع رايانه Intel، Macintosh،و unixو تقسيم شده ، بسياري از برنامه نويسان در
محدوده خود مانده و نياز شديد به كدهاي قابل حمل وجود نداشت . اما با ظهور
ناگهاني اينترنت و وب ، مشكل قبلي قابليت حمل با شدت بيشتري نمود يافت .بخصوص
اينكه اينترنت دربرگيرنده افرادي پرشمار با انواع گوناگون رايانه هاي توزيع شده
و سيستم هاي عامل و انواع cpu در سراسر جهان است . اگر چه انواع گوناگوني از
محبط هاي زيربنايي به اينترنت ملحق شده اند ، اما همه كاربران مايلند تا از يك
برنامه مشخص استفاده نمايند . چيزي كه قبلا" يك مشكل كم اهميت بود ، اكنون به
عنوان يك مشكل حاد و ضروري رخ نموده بود .
در سال 1993 ميلادي براي اعضائ تيم جاوا مشخص شد كه مشكلات قابليت حمل بندرت
هنگام ايجاد كدها براي اجراي روي كنترلرها پيش مي آيند ، اما هنگام ايجاد كدها
براي اينترنت اين مشكلات غالبا" بروز مي كنند . در حقيقت همان مشكلي كه جاوا
براي حل آن در ابعاد كوچك طراحي شده ، اكنون در ابعاد بزرگتر روي اينترنت ظاهر
شده بود. اين واقعيت باعث شد تا تمركز پروژه جاوا از برنامه نويسي وسائل مصرفي
الكترونيكي معطوف به برنامه نويسي مستقل از محيط زير بنايي بود، اما در نهايت
اينترنت اين جرقه را دامن زده و سبب موفقيت گسترده زبان جاوا شد .
جاوا بسياري از ويژگيهايش را از Cو C++و گرفته است .طراحان جاوا مي دانستند
كه استفاده از دستور زبان آشناي C و منعكس نمودن جنبه هاي شي ئ گرايي C++ به آن
سبب جلب رضايت برنامه نويسان حرفه اي Cو C++و خواهد شد. علاوه بر شباهتهاي ظاهري
جاوا بسياري از خصلتهاي موجود در زبانهاي موفق Cو C++و را نيز اخذ نموده است .
اول اينكه جاوا توسط افرادي كه واقعا" كار برنامه نويسي انجام مي دادند، طراحي
آزمايش و پالايش شده بود . جاوا زباني است كه نيازها و تجربيات طراحان خود را
برآورده مي نمايد . بنابراين جاوا نيز يك زبان برنامه نويسي است . دوم اينكه
جاوا زباني منسجم (cohesive) و بطور منطقي استوار است . سوم اينكه بجز در مورد
محدوديتهايي كه در محيط اينترنت اعمال مي شود ، جاوا به برنامه نويسان امكان
كنترل كامل را مي دهد . اگر شما بخوبي برنامه نويسي كنيد ، برنامه تان بخوبي
كار مي كند . اگر ضغيف برنامه نويسي كنيد ، برنامه تان ضعيف عمل مي كند . بطور
خلاصه ، جاوا يك زبان آموزشي نيست بلكه يك زبان براي برنامه نويسان حرفه اي است .
بعلت شباهتهاي موجود بين جاوا و C++ غالبا"جاوا را بعنوان " روايت اينترنت
از " C++ تلقي مي كنند . اما اين طرز تلقي كاملا" اشتباه است . جاوا تفاوتهاي
عملي و فلسفي فاحشي با C++ دارد . اگر چه جاوا تحت تاثير C++ قرار گرفته ، اما
روايت جديدي از C++ نيست . البته شباهتهاي جاوا با C++ بسيار با اهميت است و
اگر شما يك برنامه نويس C++ باشيد ، آنگاه با جاوا بسيار راحت كار خواهيد كرد.
از سوي ديگر جاوا بعنوان جايگزين C++ طراحي نشده بود . جاوا جهت پاسخگويي به
مجموعه خاصي از مشكلات طراحي شده و C++ مجموعه ديگري از مشكلات را حل مي كند .
البته براي ساليان متمادي اين دو زبان در كنار هم حضور خواهند داشت .
همانطوريكه عنوان شد ، زبانهاي برنامه نويسي به دو دليل پيشرفت مي كنند :
تطابق با تغييرات محيط ، و اجراي پيشرفتها در هنر برنامه نويسي .تغييرات محيطي
كه جاوا را ايجاب مي كرد نياز به برنامه هاي مستقل از محيط زيربنايي براي توزيع
روي اينترنت بود. بااين حال جاوا شيوه هاي نوشتن برنامه ها را نيز دگرگون ساخت .
بطور مشخص ، جاوا نمونه هاي شي ئ گرايي مورد استفاده توسط زبان C++ را افزايش
داده و پالايش نمود . بنابراين ، جاوا زباني در تنهايي نيست . بلكه نمونه اي از
يك روال پيش رونده است كه سالهاي سال ادامه خواهد داشت . همين واقعيت كافي
است تا بپذيريم كه جاوا جايگاه خاصي در تاريخ زبانهاي برنامه نويسي پيدا كرده ويسي اينترنت همانند نقش C در برنامه نويسي سيستم

کيفيت مقاله :
عالی خوب متوسط ضعيف


عملگر انتساب The Assignment Operator ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۴۴ مراجعه امروز
۴۲۶۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
عملگر انتساب The Assignment Operator
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۵۵ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

عملگر انتساب The Assignment Operator

عملگر انتساب علامت تكي تساوي = مي باشد . عملگر انتساب در جاوا مشابه ساير
زبانهاي برنامه نويسي كار مي كند . شكل كلي آن بصورت زير است :

Var = expression;

عبارت متغير
در اينجا نوع var ( متغير ) بايد با نوع experssion ( عبارت ) سازگار باشد.
عملگر انتساب يك خصلت جالب دارد كه ممكن است با آن آشنايي نداشته باشيد :
به شما امكان مي دهد تا زنجيره اي از انتسابها بوجود آوريد . بعنوان مثال ، اين
قطعه از يك برنامه را در نظر بگيريد :

+ int x/ y/ z;
+
+ x = y = z = 100; // set x/ y/ and z to 100

اين قطعه از برنامه مقدار 100 را با استفاده از يك دستور در متغيرهاي x، y،
و z قرار مي دهد . زيرا = عملگري است كه مقدار عبارت سمت راست را جذب مي كند .
بنابراين مقدار Z=100 برابر 100 است كه اين مقدار به y منتسب شده و نيز به x
منتسب خواهد شد . استفاده از " زنجيره اي از انتسابها " يك راه آسان براي قرار ادن يك مقدار مشترك در گروهي از متغيرهاست .

کيفيت مقاله :
عالی خوب متوسط ضعيف


عملگر ? ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۴۷ مراجعه امروز
۴۲۶۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
عملگر ?
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۵۲ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

عملگر ?

جاوا شامل يك عملگر سه تايي ويژه است كه مي تواند جايگزين انواع مشخصي از
دستورات if-then-else باشد. اين عملگر علامت ? است و نحوه كار آن در جاوا مشابه
با Cو C++و است . ابتدا كمي گيج كننده است ، اما مي توان از ? براحتي و با
كارايي استفاده نمود شكل كلي اين عملگر بصورت زير است :

experssion 1? experssion2 :experssion3

در اينجا experssion1 مي تواند هر عبارتي باشد كه با يك مقدار بولي سنجيده
مي شود . اگر experssion1 صحيح true باشد ، آنگاه experssion2 سنجيده مي شود
در غير اينصورت experssion3 ارزيابي خواهد شد . نتيجه عمليات ? همان عبارت
ارزيابي شده است . هر دو عبارت experssion2و experssion3و بايد از يك نوع باشند
كه البته void نمي تواند باشد .
در اينجا مثالي براي استفاده از عملگر ? مشاهده مي كنيد :

+ ratio = denom == 0 ? 0 : num / denom;

هنگاميكه جاوا اين عبارت انتساب را ارزيابي مي كند ، ابتدا به عبارتي كه
سمت چپ علامت سئوال قرار دارد ، نگاه مي كند. اگر denom مساوي صفر باشد ، آنگاه
عبارت بين علامت سئوال و علامت (colon) ارزيابي شده و بعنوان مقدار كل عبارت ?
استفاده مي شود . اگر denom مساوي صفر نباشد ، آنگاه عبارت بعد از (colon)
ارزيابي شده و براي مقدار كل عبارت ? استفاده مي شود . نتيجه توليد شده توسط
عملگر ? سپس به ratio نسبت داده مي شود .
در زير برنامه اي مشاهده مي كنيد كه عملگر ? را نشان مي دهد . اين برنامه از
عملگر فوق براي نگهداري مقدار مطلق يك متغير استفاده مي كند .

+ // Demonstrate ?.
+ class Ternary {
+ public static void main(String args[] ){
+ int i/ k;
+
+ i = 10;
+ k = i < 0 ?- i : i; // get absolute value of i
+ System.out.print("Absolute value of ");
+ System.out.println(i + " is " + k);
+ }
+ }

خروجي اين برنامه بصورت زير مي باشد :

Absolute value of 10 is 10
Absolute value of- 10 is 10

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

Highest
)( [].
++ -- ~ !
* / %
+-
>> >>> <<
> >= < <=
== !=
&
^
|
&&
||
?:
= op=
Lowest

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از پرانتزها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۵۰ مراجعه امروز
۴۲۶۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از پرانتزها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۵۴ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از پرانتزها

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

+ a >> b + 3

اين عبارت ابتدا 3 را به b اضافه نموده و سپس a را مطابق آن نتيجه بطرف
راست حركت مي دهد. اين عبارت را مي توان با استفاده از پرانتزهاي اضافي بصورت
زير دوباره نويسي نمود :

+ a >>( b + 3)

اما ، اگر بخواهيد ابتدا a را با مكانهاي b بطرف راست حركت داده و سپس 3 را
به نتيجه آن اضافه كنيد ، بايد عبارت را بصورت زير در پرانتز قرار دهيد : +( a >> b )+ 3

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

+ a | 4 + c >> b & 7 || b > a % 3
+( a |((( 4 + c )>> b )& 7 ))||( b >( a % 3))

يك نكته ديگر : پرانتزها ( بطور كلي خواه اضافي باشند يا نه ) سطح عملكرد
برنامه شما را كاهش نمي دهند. بنابراين ، اضافه كردن پرانتزها براي كاهش ابهام نفي روي برنامه شما نخواهد داشت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستورات كنترلي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۵۳ مراجعه امروز
۴۲۶۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستورات كنترلي
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۹۲ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

دستورات كنترلي

زبانهاي برنامه نويسي از دستورات كنترلي استفاده مي كنند تا جريان اجراي
برنامه را پيشرفت داده و براساس تغييرات حالت يك برنامه شاخه هايي از آن برنامه
منشعب نمايند . دستورات كنترلي برنامه در جاوا را مي توان در طبقه بندي بعدي
گنجاند : انتخاب (selection) ، تكرار (iteration) ، و پرش (jump) . دستورات
انتخاب به برنامه شما امكان ميدهند تا مسيرهاي متفاوت اجراي برنامه را براساس
حاصل يك عبارت يا حالت خاص يك متغير انتخاب نماييد . دستورات تكرار اجراي
برنامه را قادر مي سازد تا يك يا چند عبارت را تكرار نمايد ( يعني دستورات
تكرار حلقه ها را تشكيل مي دهند ). دستورات پرش به برنامه شما امكان مي دهند تا
يك روش اجراي غير خطي داشته باشيد . كليه دستورات كنترلي جاوا را در اينجا
بررسي نموده ايم .
نكته : اگر C++/C را ميدانيد، دستورات كنترلي جاوا براي شما بسيار آشنا هستند.
در حقيقت ، دستورات كنترلي جاوا براي برنامه نويسان C++/C بسيار يكسان
است . اما تفاوتهاي محدودي وجود دارد بخصوص در دستورات break و

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستورات انتخاب در جاوا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۵۶ مراجعه امروز
۴۲۷۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستورات انتخاب در جاوا
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۱۴۲ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

دستورات انتخاب در جاوا

جاوا از دو دستور انتخاب پشتيباني مي كنند : ifو switchو . با اين دستورات
شما اجراي برنامه را براساس شرايطي كه فقط حين اجراي برنامه اتفاق مي افتند
كنترل مي كنيد. اگر سابقه برنامه نويسي با C++/C را نداريد، از قدرت و انعطاف
پذيري موجود در اين دو دستور متعجب و شگفت زده خواهيد شد .

if

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

if( condition )statement 1;
else statement 2;

دراينجا هر statement ممكن است يك دستور منفرد يا يك دستور مركب قرار گرفته
در ابروها ( يعني يك بلوك ) باشد . condition ( شرط ) هر عبارتي است كه يك
مقدار boolean را برمي گرداند . جمله else اختياري است . if
بصورت زير كار مي كند : اگر شرايط محقق باشد ، آنگاه statement 1 اجرا
مي شود . در غير اينصورت statement 2 ( در صورت وجود ) اجرا خواهد شد .
تحت هيچ شرايطي هر دو دستور با هم اجرا نخواهند شد . بعنوان مثال ، در نظر
بگيريد :

+ int a/ b;
+ //...
+ if(a < b )a = 0;
+ else b = 0;

در اينجا اگر a كوچكتر از b باشد ، آنگاه a برابر صفر مي شود . در غير
اينصورت b برابر صفر قرار مي گيرد . در هيچ شرايطي اين دو متغير در آن واحد
برابر صفر نمي شوند .
غالب اوقات ، عبارتي كه براي كنترل if استفاده ميشود شامل عملگرهاي رابطه اي
است . اما از نظر تكنيكي ضرورتي وجود ندارد . مي توان با استفاده از يك متغير boolean
تكي ، if را همانطوريكه در بخش زير مشاهده مي كنيد ، كنترل نمود .

+ boolean dataAvailable;
+ //...
+ if( dataAvailable)
+ ProcessData)(;
+ else
+ waitForMoreData)(;

بياد آوريد كه فقط يك دستور مي تواند مستقيما" بعداز ifيا elseا قرار گيرد.
اگر بخواهيد دستورات بيشتري داخل نماييد ، نيازي به ايجاد يك بلوك نداريد
نظير اين قطعه كه در زير آمده است :

+ int bytesAvailable;
+ //...
+ if( bytesAvailable > 0 ){
+ ProcessData)(;
+ bytesAvailable- = n;
+ } else
+ waitForMoreData)(;

در اينجا ، هر دو دستور داخل بلوك if اجرا خواهند شد اگر bytes Available
بزرگتر از صفر باشد .
برخي از برنامه نويسان راحت ترند تا هنگام استفاده از if ، از ابروهاي باز
و بسته استفاده نمايند، حتي زمانيكه فقط يك دستور در هر جمله وجود داشته باشد.
اين امر سبب مي شود تا بعدا" بتوان براحتي دستور ديگري را اضافه نمود و نگراني
از فراموش كردن ابروها نخواهيد داشت . در حقيقت ، فراموش كردن تعريف يك بلوك
هنگامي كه نياز است ، يكي از دلايل رايج بروز خطاها مي باشد . بعنوان مثال قطعه
زير از يك كد را در نظر بگيريد :

+ int bytesAvailable;
+ //...
+ if( bytesAvailable > 0 ){
+ ProcessData)(;
+ bytesAvailable- = n;
+ } else
+ waitForMoreData)(;
+ bytesAvailable = n;

بنظر خيلي روشن است كه دستور bytes Available=n طوري طراحي شده تا داخل
جمله else اجرا گردد ، و اين بخاطر سطح طراحي آن است . اما حتما" بياد داريد
كه فضاي خالي براي جاوا اهميتي ندارد و راهي وجود ندارد كه كامپايلر بفهمد چه
مقصودي وجود دارد . اين كد بدون مشكل كامپايل خواهد شد ، اما هنگام اجرا بطور
ناصحيح اجرا خواهد شد . مثال بعدي داخل كدي كه مشاهده مي كنيد تثبيت شده است :

+ int bytesAvailable;
+ //...
+ if( bytesAvailable > 0 ){
+ ProcessData)(;
+ bytesAvailable- = n;
+ } else {
+ waitForMoreData)(;
+ bytesAvailable = n;
+ }
if

هاي تودرتو شده Nested ifs
يك nested if يك دستور if است كه هدف ifيا elseا ديگري باشد. if هاي تودرتو
در برنامه نويسي بسيار رايج هستند. هنگاميكه if ها را تودرتو مي كنيد، مهمترين
چيزي كه بايد بخاطر بسپاريد اين است كه يك دستورelse هميشه به نزديكترين دستور if
خود كه داخل همان بلوك else است و قبلا" با يك else همراه نشده ، مراجعه
خواهد نمود . مثالي را مشاهده نماييد :

+ if(i == 10 ){
+ if(j < 20 )a = b;
+ if(k > 100 )c = d; // this if is
+ else a = c; // associated with this else
+ }
+ else a = d; // this else refers to if(i == 10)

همانگونه كه توضيحات نشان مي دهند ، else نهايي با (20 چون داخل همان بلوك قرار ندارد ( اگر چه نزديكترين if بدون else است ) . بجاي
آن ، else نهايي با (i==10)if همراه مي شود . else داخلي به (100>k)if ارجاع
مي كند ، زيرا نزديكترين if در داخل همان بلوك است .

نردبان if-else-if
يك ساختار برنامه نويسي رايج براساس يك ترتيب از ifهاي تودرتو شده يا نردبان if-else-if
است . اين ساختار بصورت زير است :

if(condition)
statement;
else if(condition)

statement;
else if(condition)
statement;
.
.
.
else
statement;

دستورات if از بالا به پايين اجرا مي شوند . ماداميكه يكي از شرايط كنترل
كننده if صحيح باشد (true)، دستور همراه با آن if اجرا مي شود ، و بقيه نردبان
رد خواهد شد . اگر هيچكدام از شرايط صحيح نباشند، آنگاه دستور else نهايي اجرا
خواهد شد . else نهايي بعنوان شرط پيش فرض عمل مي كند ، يعني اگر كليه شرايط
ديگر صحيح نباشند ، آنگاه آخرين دستور else انجام خواهد شد . اگر else نهايي
وجود نداشته باشد و ساير شرايط ناصحيح باشند ، آنگاه هيچ عملي انجام نخواهد
گرفت .
در زير ، برنامه اي را مشاهده مي كنيد كه از نردبان if-else-if استفاده كرده
تا تعيين كند كه يك ماه مشخص در كدام فصل واقع شده است .

+ // Demonstrate if-else-if statement.
+ class IfElse {
+ public static void main(String args[] ){
+ int month = 4; // April
+ String season;
+
+ if(month == 12 || month == 1 || month == 2)
+ season = "Winter";
+ else if(month == 3 || month == 4 || month == 5)
+ season = "Spring";
+ else if(month == 6 || month == 7 || month == 8)
+ season = "Summer";
+ else if(month == 9 || month == 10 || month == 11)
+ season = "Autumn";
+ else
+ season = "Bogus Month";
+
+ System.out.println("April is in the" + season + ".");
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

April is in the Spring.

ممكن است بخواهيد اين برنامه را تجربه نماييد . خواهيد ديد كه هيچ فرقي
ندارد كه چه مقداري به month بدهيد ، يك و فقط يك دستور انتساب داخل نردبان
اجرا خواهد شد .

switch

دستور switch ، دستور انشعاب چند راهه در جاوا است . اين دستور راه ساده اي
است براي تغيير مسير اجراي بخشهاي مختلف يك كد براساس مقدار يك عبارت . اين
روش يك جايگزين مناسب تر براي مجموعه هاي بزرگتر از دستورات if-else-if است .
شكل كلي دستور switch بقرار زير مي باشد :

switch(expression){
case value1:
// statement sequence
break;
case value2:
// statement sequence
break;
.
.
.
case valueN:
// statement sequence
break;
default:
// default statement sequence
}
expression

مي تواند هر نوع ساده اي را برگرداند ، هر يك از مقادير (values)
در دستورات case بايد از نوع سازگار با عبارت باشند . هر يك از مقادير case
بايد يك مقدار لفظي منحصر بفرد باشد ( يعني بايد يك ثابت ، نه متغير ، باشد ).
دو برابر سازي مقادير case مجاز نيست .
دستور switch بشرح فوق عمل مي كند : مقدار عبارت با هر يك از مقادير لفظي
در دستورات case مقايسه مي شوند. اگر تطابق پيدا شود ، كد سلسله اي تعقيب كننده
آن دستور case اجرا خواهد شد . اگر هيچيك از ثابت ها با مقدار عبارت تطابق
نيابند ، آنگاه دستور پيش فرض (default) اجرا خواهد شد ، اما دستور default
اختياري است . اگر هيچيك از case ها تطابق نيابد و default وجود نداشته باشد
آنگاه عمل اضافي ديگري انجام نخواهد شد .
از دستور break داخل دستور switch استفاده شده تا سلسله يك دستور را پايان
دهد . هنگاميكه با يك دستور break مواجه مي شويم ، اجرا به خط اول برنامه كه
بعد از كل دستور switch قرار گرفته ، منشعب خواهد شد . اين حالت تاثير پريدن switch
است .
در زير مثال ساده اي را مشاهده مي كنيد كه از دستور switch استفاده نموده
است :

+ // A simple example of the switch.
+ class SampleSwitch {
+ public static void main(String args[] ){
+ for(int i=0; i<6; i++)
+ switch(i ){
+ case 0:
+ System.out.println("i is zero.");
+ break;
+ case 1:
+ System.out.println("i is one.");
+ break;
+ case 2:
+ System.out.println("i is two.");
+ break;
+ case 3:
+ System.out.println("i is three.");
+ break;
+ default:
+ System.out.println("i is greater then 3.");
+ }
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

i is zero.
i is one.
i is two.
i is three.
i is greater than 3.
i is greater than 3.

همانطوريكه مشاهده مي كنيد ، داخل حلقه ، دستوراتي كه همراه ثابت case بوده
و با i مطابقت داشته باشند ، اجرا خواهند شد . ساير دستورات پشت سر گذاشته
مي شوند (bypassed) . بعد از اينكه i بزرگتر از 3 بشود ، هيچ دستور همراه case
مطابقت نداشته ، بنابراين دستور پيش فرض (default) اجرا خواهد شد .
دستور break اختياري است . اگر break را حذف كنيد ، اجراي برنامه با case
بعدي ادامه خواهد يافت . گاهي بهتر است چندين case بدون دستورات break در بين
آنها داشته باشيم . بعنوان مثال ، برنامه بعدي را در نظر بگيريد :

+ // In a switch/ break statements are optional.
+ class MissingBreak {
+ public static void main(String args[] ){
+ for(int i=0; i<12; i++)
+ switch(i ){
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ System.out.println("i is less than 5");
+ break;
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ System.out.println("i is less than 10");
+ break;
+ default:
+ System.out.println("i is 10 or more");
+ }
+ }
+ }

خروجي اين برنامه بقرار زير خواهد بود :

i is less than 5
i is less than 5
i is less than 5
i is less than 5
i is less than 5
i is less than 10
i is less than 10
i is less than 10
i is less than 10
i is less than 10
i is 10 or more
i is 10 or more

همانطوريكه مشاهده مي كنيد، اجرا طي هر case، بمحض رسيدن به يك دستور break
( يا انتهاي switch ) متوقف مي شود .
در حاليكه مثال قبلي براي توصيف نظر خاصي طراحي شده بود ، اما بهر حال حذف
دستور break كاربردهاي عملي زيادي در برنامه هاي واقعي دارد . براي نشان دادن
كاربردهاي واقعي تر اين موضوع ، دوباره نويسي برنامه نمونه مربوط به فصول سال
را مشاهده نماييد . اين روايت جديد همان برنامه قبلي از switch استفاده مي كند
تا پياده سازي موثرتري را ارائه دهد .

+ // An improved version of the season program.
+ class Switch {
+ public static void main(String args[] ){
+ int month = 4;
+ String season;
+ switch( month ){
+ case 12:
+ case 1:
+ case 2:
+ season = "Winter";
+ break;
+ case 3:
+ case 4:
+ case 5:
+ season = "Spring";
+ break;
+ case 6:
+ case 7:
+ case 8:
+ season = "Summer";
+ break;
+ case 9:
+ case 10:
+ case 11:
+ season = "Autumn";
+ break;
+ default:
+ season = "Bogus Month";
+ }
+ System.out.println("April is in the" + season + ".");
+
+ }
+ }

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

+ switch(count ){
+ case 1:
+ switch(target ){ // nested switch
+ case 0:
+ System.out.println("target is zero");
+ break;
+ case 1 :// no conflicts with outer switch
+ System.out.println("target is one");
+ break;
+ }
+ break;
+ case 2 ://...

در اينجا دستور :case 1در switchر داخلي با دستور :case 1در switchر خارجي
تلاقي نخواهد داشت . متغير count فقط با فهرست case ها در سطح خارجي مقايسه
مي شود. اگر count برابر 1 باشد، آنگاه target با فهرست case هاي داخلي مقايسه
خواهد شد .
بطور خلاصه ، سه جنبه مهم از دستور switch قابل توجه هستند :
ؤ switchبا ifا متفاوت است چون switch فقط آزمايش كيفيت انجام مي دهد ، در
حاليكه if هر نوع عبارت بولي را ارزيابي مي كند . يعني كه switch فقط بدنبال
يك تطابق بين مقدار عبارت و يكي از ثابت هاي case خودش مي گردد .
ؤ دو ثابت caseدر switchر مشابه نمي توانند مقادير يكسان داشته باشند .
البته ، يك دستور switch قرار گرفته داخل يك switch خارجي تر مي تواند ثابتهاي case
مشترك داشته باشد .
ؤ يك دستور switch معمولا" بسيار كاراتر از يك مجموعه از if هاي تودرتو شده
است . آخرين نكته بخصوص جالب توجه است زيرا روشنگر نحوه كار كامپايلر جاوا
مي باشد . كامپايلر جاوا هنگاميكه يك دستور switch را كامپايل مي كند ، به هر
يك از ثابتهاي case سركشي نموده و يك جدول jump table مي سازد كه براي انتخاب
مسير اجرا براساس مقدار موجود در عبارت استفاده مي شود . بنابراين ، اگر بايد
از ميان گروه بزرگي از مقادير انتخاب نماييد ، يك دستور switch نسبت به يك
ترتيب از if-else ها كه بطور معادل و منطقي كد بندي شده باشد ، بسيار سريعتر
اجرا خواهد شد. كامپايلر قادر است اينكار را انجام دهد چون مي داند كه ثابتهاي case
همه از يك نوع بوده و بايد خيلي ساده با عبارت switch براي كيفيت مقايسه
شوند . كامپايلر چنين شناسايي را نسبت به يك فهرست طولاني از عبارات if ندارد .

دستورات تكرار iteration statements
دستورات تكرار در جاوا عبارتند از for، while،و do-whileو . اين دستورات آن
چه را ما " حلقه " مي ناميم ، ايجاد مي كنند . احتمالا" مي دانيد كه حلقه يك
مجموعه از دستورالعملها را بطور تكراري اجرا مي كند . تا اينكه يك شرط پاياني
را ملاقات نمايد . همانطوريكه بعدا" خواهيد ديد، جاوا حلقه اي دارد كه براي كليه
نيازهاي برنامه نويسي مناسب است .

while

حلقه while اساسي ترين دستور حلقه سازي (looping) در جاوا است . اين دستور
ماداميكه عبارت كنترل كننده ، صحيح (true) باشد، يك دستور يا يك بلوك را تكرار
مي كند . شكل كلي اين دستور بقرار زير است :

while(condition ){
// body of loop
}

شرط يا condition ممكن است هر عبارت بولي باشد . ماداميكه عبارت شرطي صحت
داشته باشد ، بدنه حلقه اجرا خواهد شد . هنگاميكه شرط صحت نداشته باشد ، كنترل
بلافاصله به خط بعدي كدي كه بلافاصله پس از حلقه جاري قرار دارد ، منتقل خواهد
شد . اگر فقط يك دستور منفرد در حال تكرار باشد ، استفاده از ابروها غير ضروري
است .
در اينجا يك حلقه while وجود دارد كه تا 10 را محاسبه كرده و دقيقا" ده خط "tick"
را چاپ مي كند .

+ // Demonstrate the while loop.
+ class While {
+ public static void main(String args[] ){
+ int n = 10;
+
+ while(n > 0 ){
+ System.out.println("tick" + n);
+ n--;
+ }
+ }
+ }

هنگاميكه اين برنامه را اجرا مي كنيد، ده مرتبه "tick" را انجام خواهد داد:

tick 10
tick 9
tick 8
tick 7
tick 6
tick 5
tick 4
tick 3
tick 2
tick 1

از آنجاييكه حلقه while عبارت شرطي خود را در بالاي حلقه ارزيابي ميكند، اگر
شرط ابتدايي ناصحيح باشد ، بدنه حلقه اجرا نخواهد شد . بعنوان مثال ، در قطعه
زير ، فراخواني ()println هرگز اجرا نخواهد شد .

+ int a = 10/ b = 20;
+
+ while(a < b)
+ System.out.println("This will not be displayed");

بدنه while ( يا هر حلقه ديگر در جاوا ) ممكن است تهي باشد. زيرا دستور تهي
( دستوري كه فقط شامل ; باشد ) از نظر قواعد تركيبي در جاوا معتبراست . بعنوان
مثال ، برنامه زير را در نظر بگيريد :

+ // The target of a loop can be empty.
+ class NoBody {
+ public static void main(String args[] ){
+ int i/ j;
+
+ i = 100;
+ j = 200;
+
+ // find midpoint between i and j
+ while(++i <-- j); // no body in this loop
+
+ System.out.println("Midpoint is" + i);
+ }
+ }

اين برنامه نقطه مياني (midpoint) بين iو jو را پيدا مي كند و خروجي زير را
توليد خواهد كرد :

Midpoint is 150

در اينجا چگونگي كار حلقه while را مي بينيد . مقدار i افزايش و مقدار j
كاهش مي يابد . سپس اين دو مقدار با يكديگر مقايسه مي شوند . اگر مقدار جديد i
همچنان كمتر از مقدار جديد j باشد ، آنگاه حلقه تكرار خواهد شد . اگر i مساوي
با يا بزرگتر از j بشود ، حلقه متوقف خواهد شد . تا هنگام خروج از حلقه ، i
مقداري را مي گيرد كه بين مقادير اوليه iو jو مي باشد . ( بديهي است كه اين
رويه هنگامي كار مي كند كه i كوچكتر از مقدار اوليه j باشد . ) همانطوريكه
مي بينيد ، نيازي به بدنه حلقه نيست ، كليه عمليات داخل خود عبارت شرطي اتفاق
مي افتد . در كدهاي حرفه اي نوشته شده ديگر جاوا ، وقتي كه عبارت كنترل كننده
توانايي مديريت كليه جزئيات خود را داشته باشد ، حلقه هاي كوتاه غالبا" بدون
بدنه كد بندي مي شوند .

do-while

گفتيم اگر عبارت شرطي كنترل كننده يك حلقه while در ابتدا ناصحيح باشد
آنگاه بدنه حلقه اصلا" اجرا نمي شود . اما گاهي مايليم در چنين شرايطي ، بدنه
حلقه حداقل يكبار اجرا شود . بعبارت ديگر، در حالات خاصي مايليد تا عبارت پايان
دهنده در انتهاي حلقه را آزمايش كنيد. خوشبختانه ، جاوا حلقه اي را عرضه مي كند
كه دقيقا" همين كار را انجام مي دهد : do-while . حلقه do-while همواره حداقل
يكبار بدنه خود را اجرا مي كند، زيرا عبارت شرطي آن در انتهاي حلقه قرار گرفته
است . شكل كلي آن بصورت زير است :

do{
// body of loop
} while(condition);

هر تكرار از حلقه do-while ابتدا بدنه حلقه را اجرا نموده ، سپس به ارزيابي
عبارت شرطي خود مي پردازد . اگر اين عبارت صحيح (true) باشد ، حلقه اجرا خواهد
شد . در غير اينصورت حلقه پايان مي گيرد . نظير كليه حلقه هاي جاوا ، شرط بايد
يك عبارت بولي باشد .
اينجا يك روايت ديگر از برنامه (tick) وجود دارد كه حلقه do-while را نشان
مي دهد . خروجي اين برنامه مشابه برنامه قبلي خواهد بود :

+ // Demonstrate the do-while loop.
+ class DoWhile {
+ public static void main(String args[] ){
+ int n = 10;
+
+ do {
+ System.out.println("tick" + n);
+ n--;
+ } while(n > 0);
+ }
+ }

حلقه موجود در برنامه قبلي ، اگر چه از نظر تكنيكي صحيح است ، اما مي توان
آن را به شكل كاراتري بصورت زير دوباره نويسي نمود : + do {
+ System.out.println("tick " + n);
+ } while--(n > 0);

در اين مثال ، عبارت (0>n) عمل كاهش n و آزمايش براي صفر را در يك عبارت
گنجانده است . عملكرد آن بقرار بعدي است . ابتدا دستور n اجرا مي شود و n
را كاهش داده و مقدار جديد را به n برمي گرداند . اين مقدار سپس با صفر مقايسه
مي شود . اگر بزرگتر از صفر باشد ، حلقه ادامه مي يابد . در غير اينصورت حلقه
پايان مي گيرد .
حلقه do-while بويژه هنگام پردازش انتخاب منو بسيار سودمند است ، زيرا
معمولا" مايليد تا بدنه يك حلقه منو حداقل يكبار اجرا شود . برنامه بعدي را كه
يك سيستم Help ساده را براي دستورات تكرار و انتخاب در جاوا پياده سازي مي كند
در نظر بگيريد :

+ // Using a do-while to process a menu selection -- a simple help system.
+ class Menu {
+ public static void main(String args[])
+ throws java.io.IOException {
+ char choice;
+
+ do {
+ System.out.prinln("Help on:");
+ System.out.prinln(" 1 .if");
+ System.out.prinln(" 2 .switch");
+ System.out.prinln(" 3 .while");
+ System.out.prinln(" 4 .do-while");
+ System.out.prinln(" 5 .for\n");
+ System.out.prinln("Choose one:");
+ choice =( char )System.in.read)(;
+ } while(choice < '1' || choice > '5');
+
+ System.out.println("\n");
+ switch(choice ){
+ case '1':
+ System.out.println("The if:\n");
+ System.out.println("if(condition )statement;");
+ System.out.println("else statement;");
+ break;
+ case '2':
+
+ System.out.println("The switch:\n");
+ System.out.println("switch(expression ){");
+ System.out.println(" case constant:");
+ System.out.println(" statement sequence");
+ System.out.println(" break;");
+ System.out.println(" //... ");
+ System.out.println("}");
+ break;
+ case '3':
+ System.out.println("The switch:\n");
+ System.out.println(while(condition )statement;");
+ break;
+ case '4':
+ System.out.println("The do-while:\n");
+ System.out.println("do {");
+ System.out.println(" statement;");
+ System.out.println("} while( condition);");
+ break;
+ case '5':
+ System.out.println("The for:\n");
+ System.out.print("for(init; condition; iteration)");
+ System.out.println(" statement;");
+ break;
+ }
+ }
+ }

اكنون يك اجراي نمونه توليد شده توسط اين برنامه را مشاهده مي كنيد :

Help on:
1 .if
2 .switch
3 .while
4 .do-while
5 .for
Choos one:
4

The do-while:

do {
statement;
} while( condition);

در برنامه ، از حلقه do-while براي تصديق اينكه كاربر يك گزينه معتبر را
وارد كرده باشد ، استفاده مي شود . در غير اينصورت ، به كاربر مجددا" اعلان
خواهد شد . از آنجاييكه منو بايد حداقل يكبار بنمايش درآيد ، do-while حلقه
كاملي براي انجام اين مقصود است .
چند نكته ديگر درباره اين مثال : دقت كنيد كه كاراكترهااز صفحه كليد بوسيله
فراخواني ()system.in.read خوانده مي شوند . اين يكي از توابع ورودي كنسول در
جاوا است .
اگر چه بررسي تفصيلي روشهاي l/o جاوا به بحثهاي بعدي موكول شده ، اما از
()system.in.read در اينجا براي بدست آوردن گزينه كاربر استفاده شده است . اين
تابع كاراكترها را از ورودي استاندارد مي خواند ( كه بعنوان عدد صحيح برگردان
شد ، اين دليلي است كه چرا مقدار برگردان از طريق تبديل (cast) به char تبديل
شده است ). بصورت پيش فرض ، ورودي استاندارد، بافر شده خطي است (line buffered)
بنابراين قبل از اينكه كاراكترهايي را كه تايپ كرده ايد به برنامه اتان ارسال
كنيد ، بايد كليد ENTER را فشار دهيد . ( اين حالت مشابه C++/C است و احتمالا"
از قبل با آن آشنايي داريد ) .
ورودي كنسول در جاوا كاملا" محدود شده و كار با آن بسيار مشكل است . بعلاوه
اكثر برنامه و ريز برنامه هاي واقعي نوشته شده با جاوا گرافيكي و پنجره اي
هستند. از سوي ديگر : چون از ()system.in.read استفاده شده ، برنامه بايد جمله throwsjava.io.loException
را كاملا" توصيف نمايد . اين خط براي مديريت خطاهاي
ورودي ضروري است . اين بخشي از جنبه هاي مختلف اداره استثنائ در جاوا است كه
بعدا" بررسي خواهد شد .
for

خواهيد ديد كه حلقه for يك ساختار قدرتمند و بسيار روان است .شكل كلي دستور for
بصورت زير است :

for(initialization; condition; iteration; ){
// body
}

اگر فقط يك دستور بايد تكرار شود ، نيازي به ابروها نيست .
عملكرد حلقه for بشرح بعدي است . وقتي كه حلقه براي اولين بار شروع مي شود
بخض مقدار دهي اوليه در حلقه اجرا مي شود . معمولا" ، اين بخش يك عبارت است كه
مقدار متغير كنترل حلقه را تعيين مي كند ، كه بعنوان يك شمارشگر ، كنترل حلقه
را انجام خواهد داد . مهم است بدانيم كه عبارت مقدار دهي اوليه فقط يكبار اجرا
مي شود . سپس شرط مورد ارزيابي قرار مي گيرد . اين شرط بايد يك عبارت بولي
باشد . اين بخش معمولا" مقدار متغير كنترل حلقه را با مقدار هدف مقايسه مي كند.
اگر عبارت صحيح (true) باشد، آنگاه بدنه حلقه اجرا خواهد شد . اگر ناصحيح باشد
حلقه پايان مي گيرد . بعد، بخش تكرار (iteration) حلقه اجرا مي شود . اين بخش
معمولا" عبارتي است كه مقدار متغير كنترل را افزايش يا كاهش مي دهد. آنگاه حلقه
تكرار خواهد شد ، ابتدا عبارت شرطي را ارزيابي مي كند ، سپس بدنه حلقه را اجرا
مي كند و سرانجام عبارت تكرار را در هر گذر (pass) اجرا ميكند. اين روال آنقدر
دادمه مي يابد تا عبارت شرطي ناصحيح (false) گردد .
در زير روايت جديدي از برنامه "tick" را مي بينيد كه از يك حلقه for استفاده
كرده است :

+ // Demonstrate the for loop.
+ class ForTick {
+ public static void main(String args[] ){
+ int n;
+ for(n=10; n>0; n)--
+ System.out.println("tick" + n);
+ }
+ }

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

+ // Declare a loop control variable inside the for.
+ class ForTick {
+ public static void main(String args[] ){
+
+ // here/ n is declared inside of the for loop
+ for(int n=10; n>0; n)--
+ System.out.println("tick" + n);
+ }
+ }

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

+ // Test for primes.
+ class FindPrime {
+ public static void main(String args[] ){
+ int num;
+ boolean isPrime = true;
+
+ num = 14;
+ for(int i=2; i < num/2; i++ ){
+ if((num % i )== 0 ){
+ isPrime = false;
+ break;
+ }
+ }
+ if(isPrime )System.out.println("Prime");
+ else System.out.println("Not Prime");
+ }
+ }

استفاده از كاما Comma
شرايطي پيش مي آيد كه مايليد بيش از يك دستور در بخش مقدار دهي اوليه
(initalization) و تكرار (iteration) بگنجانيد . بعنوان مثال ، حلقه موجود در
برنامه بعدي را در نظر بگيريد :

  + class Sample {
+   public static void main(String args[] ){
+     int a/ b;
+
+     b = 4;
+     for(a=1; a
  +       System.out.println("a = " + a);
+       System.out.println("b = " + b);
+       b--;
+     }
+   }
+ }

همانطوريكه مي بينيد ، حلقه توسط ارتباط متقابل دو متغير كنترل مي شود . از
آنجاييكه حلقه توسط دو متغير اداره مي شود ، بجاي اينكه b را بصورت دستي اداره
كنيم ، بهتر است تا هر دو را در دستور for بگنجانيم . خوشبختانه جاوا راهي
براي اينكار دارد . براي اينكه دو يا چند متغير بتوانند يك حلقه for را كنترل
كنند ، جاوا به شما امكان مي دهد تا چندين دستور را در بخشهاي مقدار دهي اوليه
و تكرار حلقه for قرار دهيد . هر دستور را بوسيله يك كاما از دستور بعدي جدا
مي كنيم .
حلقه for قبلي را با استفاده از كاما ، خيلي كاراتر از قبل مي توان بصورت
زير كد بندي نمود :

  + // Using the comma.
+ class Comma {
+   public static void main(String args[] ){
+     int a/ b;
+
+     for(a=1/ b=4; a
  +       System.out.println("a = " + a);
+       System.out.println("b = " + b);
+     }
+   }
+ }

در اين مثال ، بخش مقدار دهي اوليه ، مقادير aو bو را تعيين مي كند . هربار
كه حلقه تكرار مي شود ، دو دستور جدا شده توسط كاما در بخش تكرار (itration)
اجرا خواهند شد . خروجي اين برنامه بقرار زير مي باشد :

a=1
b=4
a=2
b=3

نكته : اگر با C++/C آشنايي داريد ، حتما" مي دانيد كه در اين زبانها ، علامت
كاما يك عملگر است كه در هر عبارت معتبري قابل استفاده است . اما در
جاوا اينطور نيست . در جاوا ، علامت كاما يك جدا كننده است كه فقط در
حلقه for قابل اعمال مي باشد .

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

+ boolean done = false;
+
+ for(int i=1; !done; i++ ){
+ //...
+ if(intettupted ))(done = true;
+ }

در اين مثال ، حلقه for تا زمانيكه متغير بولي done معادل true بشود ، اجرا
را ادامه خواهد داد . اين مثال مقدار i را بررسي نمي كند .
اكنون يكي ديگر از گوناگونيهاي جالب حلقه for را مشاهده مي كنيد. ممكن است
يكي يا هر دو عبارت مقدار دهي اوليه و تكرار غايت باشند ، نظير برنامه بعدي :

+ // Parts of the for loop can be empty.
+ class ForVar {
+ public static void main(String args[] ){
+ int i;
+ boolean done = false;
+
+ i = 0;
+ for (; !done; ) {
+ System.out.println("i is" + i);
+ if(i == 10 )done = true;
+ i++;
+ }
+ }
+ }

در اينجا عبارتهاي مقدار دهي اوليه و تكرار به خارج ازfor انتقال يافته اند.
برخي از بخشهاي حلقه for تهي هستند . اگر چه در اين مثال ساده چنين حالتي هيچ
ارزشي ندارد ، اما در حقيقت شرايطي وجود دارد كه اين روش بسيار كارا و سودمند
خواهد بود. بعنوان مثال ، اگر شرط اوليه بصورت يك عبارت پيچيده و در جاي ديگري
از برنامه قرار گرفته باشد و يا تغييرات متغير كنترل حلقه بصورت غير ترتيبي و
توسط اعمال اتفاق افتاده در داخل بدنه حلقه تعيين شود ، پس بهتر است كه اين
بخشها را در حلقه for تهي بگذاريم .
اكنون يكي ديگر از گوناگونيهاي حلقه for را مشاهده مي كنيد. اگر هر سه بخش
حلقه for را تهي بگذاريد ، آنگاه بعمد يك حلقه نامحدود ( حلقه اي كه هرگز پايان
نمي گيرد ) ايجاد كرده ايد . بعنوان مثال :

+ for (; ; ) {
+ //...
+ }

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

حلقه هاي تودرتو
نظير كليه زبانهاي برنامه نويسي ، جاوا نيز امكان تودرتو كردن حلقه ها را
دارد . يعني يك حلقه داخل حلقه ديگري قرار خواهد گرفت . بعنوان مثال ، در
برنامه بعدي حلقه هاي for تودرتو نشده اند :

+ // Loops may be nested.
+ class Nested {
+ public static void main(String args[] ){
+ int i/ j;
+
+ for(i=0; i<10; i++ ){
+ for(j=i; j<10; j++)
+ System.out.print(".");
+ System.out.println)(;
+ }
+ }
+ }

خروجي توليد شده توسط اين برنامه بقرار زير مي باشد : ..........
.........

کيفيت مقاله :
عالی خوب متوسط ضعيف


دومين برنامه كوتاه ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۵۹ مراجعه امروز
۴۲۷۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دومين برنامه كوتاه
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۹۲ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

دومين برنامه كوتاه

شايد در يك زبان برنامه نويسي هيچ مفهومي اساسي تر از يك متغير (Variable)
نباشد. به احتمال زياد مي دانيد كه يك متغير مكاني از حافظه نامگذاري شده است
كه توسط برنامه شما مقداري به آن نسبت داده مي شود . مقدار يك متغير ممكن است
حين اجراي يك برنامه تغيير يابد . برنامه بعدي نشان مي دهد كه چگونه يك متغير
را اعلان نموده و چگونه مقداري را به آن نسبت مي دهيم . علاوه بر اين ، برنامه
همچنين نشاندهنده برخي جنبه هاي خروجي كنسول نيز ميباشد. همانطوريكه " توضيحات "
در بالاي برنامه بيان مي كنند ، بايد اين فايل را Example2.java بناميد .

+ /*
+ Here is another short example.
+ Call this file "Example2.java".
+ */
+ class Example2 {
+ public static void main(String args [] ){
+ int num; // this declares a variable called num
+ num = 100; // this assigns num the value 100
+ System.out.println("This is num :" + num);
+ num = num * 2;
+ System.out.print("The value of num * 2 is *);
+ System.out.println(num);
+ }
+ }

هنگاميكه اين برنامه را اجرا كنيد ، خروجي زير را مشاهده مي كنيد : This is num :100
The value of num * 2 is 200

اكنون نگاه دقيقتري به چگونگي توليد اين خروجي خواهيم داشت . اولين خط جديد
برنامه را در زير نشان داده ايم :

+ int num; // this declares a variable called num

اين خط يك متغير عدد صحيح تحت نام num را اعلان مي كند . جاوا ( نظير اكثر
زبانهاي برنامه نويسي ) ايجاب مي كند كه متغيرها قبل از اينكه مورد استفاده
قرار گيرند ، بايد تعريف شوند .
شكل عمومي براي اعلان يك متغير را مشاهده مي كنيد :

type var-name;

در اينجا type مشخص كننده نوع متغيري است كه اعلان خواهد شد، و var-name نام
آن متغير است . اگر مي خواهيد بيش از يك متغير از آن نوع مشخص شده اعلان كنيد
مي توانيد با استفاده از فهرست كاما (comma) اسامي متغيرها را جدا كنيد . جاوا
چندين نوع داده را تعريف مي كند كه دربرگيرنده اعداد صحيح (integer) ، كاراكتر
(character) و اعشاري (floating-point) مي باشد . واژه كليدي int مشخص كننده
نوع عدد صحيح است .
در برنامه ، خط زير :

+ num = 100; // this assigns num the value 100

مقدار 100 را به متغير num نسبت مي دهد. در جاوا، عملگر (operator) انتساب
يك علامت تساوي تكي (=) است .
خط بعدي كد ، مقدار متغير num را بعنوان خروجي ارائه داده و البته قبل از
اين مقدار رشته "This is num" قرار خواهد گرفت .

+ System.out.println("This is num :" + num);

در اين دستور ، علامت تساوي سبب مي شود تا مقدار متغير num با رشته اي كه قبل
از آن قرار مي گيرد پيوسته باشد ، و رشته حاصل سرانجام خروجي خواهد شد . ( در
واقع ، num ابتدا از شكل يك عدد صحيح به معادل رشته اي خود تبديل شده و سپس به
رشته قبل از خود پيوسته خواهد شد . اين رويه بعدا" بررسي خواهد شد. ) اين شيوه
را مي توان عمومي نمود. با استفاده از عملگر + ، مي توانيد هر تعداد اقلام مورد
نظرتان را در داخل يك دستور تكي ()println به رشته درآوريد .
خط بعدي كد ، مقدار متغير num را در 2 ضرب نموده و حاصل را به متغير num
نسبت مي دهد . نظير اكثر زبانهاي برنامه نويسي ، جاوا از عملگر * براي نشان
دادن عمل ضرب استفاده مي كند . بعد از اينكه اين خط اجرا شود ، متغير num دربر
گيرنده مقدار 200 خواهد بود .
اكنون دو خط بعدي برنامه را بررسي مي كنيم :

+ System.out.print("This value of num * 2 is ");
+ System.out.println(num);

چند مورد جديد اينجا در حال وقوع است . اول اينكه از روش توكار ()print
استفاده شده تا رشته "The value of num *2 is" بنمايش درآيد . بعد از اين رشته
يك خط جديد نخواهد آمد. اين بدان معني است كه وقتي خروجي بعدي توليد شود، همان
خط شروع خواهد شد . روش ()print مشابه روش ()println مي باشد ، بجز اينكه آن
روش اول بعد از هر فراخواني يك كاراكتر خط جديد خارج نخواهد كرد . اكنون به
فراخواني ()println نگاه كنيد . دقت كنيد كه متغير num توسط خودش مورد استفاده
قرار مي گيرد . هم ()print و هم ()println را مي توان براي خروجي مقادير هر يك تفاده قرار داد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


معرفي كلاسها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۶۲ مراجعه امروز
۴۲۷۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
معرفي كلاسها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۲۴۰ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.

معرفي كلاسها

كلاس هسته اصلي جاوا است . كلاس يك ساختار منطقي است كه تماميت زبان جاوا بر
آن استوار شده ، زيرا شكل (shape) و طبيعت يك شي ئ را روشن مي كند . كلاس همچنين
شكل دهنده اساس برنامه نويسي شي ئ گرا در جاوا مي باشد. هر مفهومي كه مايليد در
يك برنامه جاوا پياده سازي نماييد بايد ابتدا داخل يك كلاس كپسول سازي شود .
از اين پس مي آموزيد چگونه يك كلاس را براي توليد اشيائاستفاده كنيد. همچنين
درباره روشها (methods) و سازنده ها (constructors) و واژه كليدي this مطالبي
مي آموزيد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


بنيادهاي كلاس ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۶۵ مراجعه امروز
۴۲۸۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بنيادهاي كلاس
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۸۲ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

بنيادهاي كلاس

كلاسهاي توليد شده در بحثهاي گذشته فقط براي كپسول سازي روش ()main استفاده
مي شد ، كه براي نشان دادن اصول دستور زبان جاوا مناسب بودند . شايد بهترين
چيزي كه بايد درباره يك كلاس بدانيد اين است كه كلاس يك نوع جديد داده را تعريف
مي كند . هربار كه اين نوع تعريف شود ، مي توان از آن براي ايجاد اشيائي از
همان نوع استفاده نمود . بنابراين ، يك كلاس قالبي (template) براي يك شي ئ است
و يك شي ئ نمونه اي (instance) از يك كلاس است . چون شي ئ يك نمونه از يك كلاس است
غالبا" كلمات شي ئ (object) و نمونه (instance) را بصورت مترادف بكار مي بريم .

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

type methodname2(parameter-list ){
// body of method
}
//...
type methodnameN(parameter-list ){
// body of method
}
}

داده يا متغيرهايي كه داخل يك كلاس تعريف شده اند را متغيرهاي نمونه instance)
(variables مي نامند . كدها ، داخل روشها (methods) قرار مي گيرند . روشها و
متغيرهاي تعريف شده داخل يك كلاس را اعضائ (members) يك كلاس مي نامند . در اكثر
كلاسها ، متغيرهاي نمونه يا روي روشهاي تعريف شده براي آن كلاس عمل كرده يا توسط
اين روشها مورد دسترسي قرار مي گيرند . بنابراين ، روشها تعيين كننده چگونگي
استفاده از داده هاي يك كلاس هستند .
متغيرهاي تعريف شده داخل يك كلاس ، متغيرهاي نمونه خوانده شده زيرا هر نمونه
از كلاس ( يعني هر شي ئ يك كلاس ) شامل كپي خاص خودش از اين متغيرهاست . بنابراين
داده مربوط به يك شي ئ ، جدا و منحصر بفرد از داده مربوط به شي ئ ديگري است . ما
بزودي اين نكته را بررسي خواهيم نمود ، اما فعلا" بايد اين نكته بسيار مهم را
بياد داشته باشيد .
كليه روشها نظير()main همان شكل عمومي را دارند كه تاكنون استفاده كرده ايم .
اما ، اكثر روشها را بعنوان staticيا publicا توصيف نمي كنند . توجه داشته
باشيد كه شكل عمومي يك كلاس ، يك روش ()main را توصيف نمي كند . كلاسهاي جاوا
لزومي ندارد كه يك روش ()main داشته باشند . فقط اگر كلاس ، نقطه شروع برنامه
شما باشد ، بايد يك روش ()main را توصيف نماييد . علاوه بر اين ، ريز برنامه ها
(applets) اصولا" نيازي به روش ()main ندارند .
نكته : برنامه نويسان C++ آگاه باشند كه اعلان كلاس و پياده سازي روشها در يك
مكان ذخيره شده و بصورت جداگانه تعريف نمي شوند. اين حالت گاهي فايلهاي
خيلي بزرگ java ايجاد مي كند ، زيرا هر كلاس بايد كاملا" در يك فايل منبع
تكي تعريف شود . اين طرح در جاوا رعايت شد زيرا احساس مي شد كه در بلند
مدت ، در اختيار داشتن مشخصات ، اعلانها و پياده سازي در يك مكان ، امكان
دسترسي آسانتر كد را بوجود مي آورد .

يك كلاس ساده
بررسي خود را با يك نمونه ساده از كلاسها شروع مي كنيم . در اينجا كلاسي تحت
غنوان Box وجود دارد كه سه متغير نمونه را تعريف مي كند : width، height، و depth
و فعلا" ، كلاس Box دربرگيرنده روشها نيست .

+ class Box {
+ double width;
+ double height;
+ double depth;
+ }

قبلا" هم گفتيم كه يك كلاس نوع جديدي از داده را توصيف مي كند . در اين مثال
نوع جديد داده را Box ناميده ايم . از اين نام براي اعلان اشيائ از نوع Box
استفاده مي كنيد . نكته مهم اين است كه اعلان يك كلاس فقط يك الگو يا قالب را
ايجاد مي كند ، اما يك شي ئ واقعي بوجود نمي آورد . بنابراين ، كد قبلي ، شيئي
از نوع Box را بوجود نمي آورد .
براي اينكه واقعا" يك شي ئ Box را بوجود آوريد ، بايد از دستوري نظير مورد
زير استفاده نماييد :

+ Box mybox = new Box)(; // create a Box object called mybox

پس از اجراي اين دستور ، mybox نمونه اي از Box خواهد بود. و بدين ترتيب اين
شي ئ وجود فيزيكي و واقعي پيدا مي كند .
مجددا" بياد داشته باشيد كه هر بار يك نمونه از كلاسي ايجاد مي كنيد ، شيئي
ايجاد كرده ايد كه دربرگيرنده كپي ( نسخه خاص ) خود از هر متغير نمونه تعريف
شده توسط كلاس خواهد بود . بدين ترتيب ، هر شي ئ Box دربرگيرنده كپي هاي خود از
متغيرهاي نمونه width، heidht،و depthو مي باشد . براي دسترسي به اين متغيرها
از عملگر نقطه (.) استفاده مي كنيد . عملگر نقطه اي ، نام يك شي ئ را با نام يك
متغير نمونه پيوند مي دهد . بعنوان مثال ، براي منتسب كردن مقدار 100 به متغير width
در myboxر ، از دستور زير استفاده نماييد :

+ mybox.width = 100;

اين دستور به كامپايلر مي گويد كه كپي width كه داخل شي ئ mybox قرار گرفته
را معادل عدد 100 قرار دهد . بطور كلي ، از عملگر نقطه اي براي دسترسي هم به
متغيرهاي نمونه و هم به روشهاي موجود در يك شي ئ استفاده مي شود .
دراينجا يك برنامه كامل را مشاهده ميكنيد كه از كلاس Box استفاده كرده است :

+ /* A program that uses the Box class.
+
+ Call this file BoxDemo.java
+ /*
+ class Box {
+ double width;
+ double height;
+ double depth;
+ }
+
+ // This class declares an object of type Box.
+ class BoxDemo {
+ public static void main(String args[] ){
+ Box mybox = new Box)(;
+ double vol;
+
+ // assign values to mybox's instance variables
+ mybox.width = 10;
+ mybox.height = 20;
+ mybox.depth = 15;
+
+ // compute volume of box
+ vol = mybox.width * mybox.height * mybox.depth;
+
+ System.out.println("Volume is " + vol);
+ }
+ }

فايلي را كه دربرگيرنده اين برنامه است بايد با نام BoxDemo.java بخوانيد
زيرا روش ()main در كلاس BoxDemo و نه در كلاس Box قرار گرفته است . هنگاميكه اين
برنامه را كامپايل مي كنيد ، مي بينيد كه دو فايل class. ايجاد شده اند ، يكي
براي Box و ديگري براي BoxDemo . كامپايلر جاوا بطور خودكار هر كلاس را در فايل class
. مربوط به خودش قرار مي دهد . ضرورتي ندارد كه كلاس Boxو BoxDemoو هر دو
در يك فايل منبع قرار گيرند . مي توانيد هر كلاس را در فايل خاص خودش گذاشته و
آنها را بترتيب Box.javaو BoxDemo.javaو بناميد .
براي اجراي اين برنامه بايد BoxDemo.class را اجرا كنيد . پس از اينكار
حاصل زير را بدست مي آوريد :

Volume is 3000

قبلا" هم گفتيم كه هر شي ئ داراي كپي هاي خاص خودش از متغيرهاي نمونه است .
يعني اگر دو شي ئ Box داشته باشيد، هركدام بتنهايي كپي ( يا نسخه اي ) از lenght width
و heightو خواهند داشت . مهم است بدانيد كه تغييرات در متغيرهاي نمونه يك
شي ئ تاثيري روي متغيرهاي نمونه كلاس ديگر نخواهد داشت . بعنوان مثال ، برنامه
بعدي دو شي ئ Box را اعلان مي كند :

+ // This program declares two Box objects.
+
+ class Box {
+ double width;
+ double height;
+ double depth;
+ }
+
+ class BoxDemo2 {
+ public static void main(String args[] ){
+
+ Box mybox1 = new Box)(;
+ Box mybox2 = new Box)(;
+ double vol;
+
+ // assign values to mybox1's instance variables
+ mybox1.width = 10;
+ mybox1.height = 20;
+ mybox1.depth = 15;
+
+ /* assign different values to mybox2's
+ instance variables */
+ mybox2.width = 3;
+ mybox2.height = 6;
+ mybox2.depth = 9;
+
+ // compute volume of first box
+ vol = mybox1.width * mybox1.height * mybox1.depth;
+ System.out.println("Volume is " + vol);
+
+ // compute volume of second box
+ vol = mybox2.width * mybox2.height * mybox2.depth;
+ System.out.println("Volume is " + vol);
+ }
+ }

خروجي توليد شده توسط اين برنامه بقرار زير مي باشد :

Volume is 3000
Volume is 162

بخوبي مشاهده مي كنيد كه داده مربوط به mybox1 كاملا" از داده موجود در

کيفيت مقاله :
عالی خوب متوسط ضعيف


اعلان نمودن اشيائ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۶۸ مراجعه امروز
۴۲۸۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اعلان نمودن اشيائ
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۷۱ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

اعلان نمودن اشيائ

بدست آوردن اشيائ از يك كلاس ، نوعي پردازش دو مرحله اي است . اول ، بايد يك
متغير از نوع همان كلاس اعلان نماييد . اين متغير يك شي ئ را تعريف نمي كند . در
عوض ، متغيري است كه مي تواند به يك شي ئ ارجاع نمايد. دوم ، بايد يك كپي فيزيكي
و واقعي از شي ئ بدست آورده و به آن متغير منتسب كنيد . مي توانيد اينكار را با
استفاده از عملگر new انجام دهيد . عملگر new بطور پويا ( يعني در حين اجرا )
حافظه را براي يك شي ئ تخصيص داده و يك ارجاع به آن را برمي گرداند .
اين ارجاع (reference) كمابيش آدرس آن شي ئ در حافظه است كه توسط new تخصيص
يافته است . سپس اين ارجاع در متغير ذخيره مي شود. بدين ترتيب ، در جاوا، كليه
اشيائ كلاس دار بايد بصورت پويا تخصيص يابند. اجازه دهيد كه به جزئيات اين روال
دقت نماييم .
در مثال قبلي ، يك خط مشابه خط زير براي اعلان يك شي ئ ازنوع Box استفاده شده

+ Box mybox = new Box)(;

اين دستور دو مرحله گفته شده را با يكديگر تركيب نموده است . براي اينكه هر
يك از مراحل را روشن تر درك كنيد، ميتوان آن دستور را بصورت زير بازنويسي نمود:

+ Box mybox; // declare reference to object
+ mybox = new Box)(; // allocate a Box object

خط اول ، myBox را بعنوان يك ارجاع به شيئي از نوع Box اعلان مي كند . پس از
اجراي اين خط ، mybox محتوي تهي (null) خواهد داشت كه نشانگر آن است كه هنوز
شي ئ بطور واقعي بوجود نيامده است . هر تلاشي براي استفاده ازmybox در اين مرحله
سبب بروز خطاي زمان كامپايل (compile-time error) خواهد شد . خط بعدي يك شي ئ
واقعي را تخصيص داده و يك ارجاع از آن به mybox انجام مي دهد . پس از اجراي خط
دوم ، مي توانيد از mybox بعنوان يك شي ئ Box استفاده نماييد . اما در واقعيت mybox
خيلي ساده آدرس حافظه شي ئ واقعي Box را نگهداري مي كند . تاثير اين دو
خط كد را در شكل زير نشان داده ايم .
نكته : كساني كه با C++/C آشنايي دارند احتمالا" توجه نموده اند كه ارجاعات شي ئ
مشابه اشاره گرها هستند . اين تشابه تا حدود زيادي صحيح است . يك ارجاع
شي ئ (object reference) مشابه يك اشاره گر حافظه است . مهمترين تفاوت
و كليد ايمني در جاوا اين است كه نمي توانيد از ارجاعات همچون
اشاره گرهاي واقعي استفاده نماييد . بدين ترتيب ، نمي توانيد ارجاع شي ئ
را بعنوان اشاره اي به موقعيت دلخواه حافظه يا بعنوان يك عدد صحيح بكار
بريد .

Statement Effect

Box mybox; | null |

mybox

|
| Width > | ;()mybox = new Box
mybox | Height |

| Depth |

Box object

نگاهي دقيقتر به new
شكل عمومي عملگر new بقرار زير مي باشد :

class-var = new classname)(;

در اينجا class-var يك متغير از نوع كلاسي است كه ايجاد كرده ايم . class name
نام كلاسي است كه مي خواهيم معرفي كنيم . نام كلاس كه بعد از آن پرانتزها قرار
گرفته اند مشخص كننده سازنده (constructor) كلاس است . سازنده تعريف مي كند كه
وقتي يك شي ئ از يك كلاس ايجاد شود ، چه اتفاقي خواهد افتاد . سازنده ها بخش مهمي
از همه كلاسها بوده و خصلتهاي بسيار قابل توجهي دارند .
بسياري از كلاسهاي دنياي واقعي (real-world) بطور صريحي سازندگان خود را
داخل تعريف كلاس ، معرفي مي كنند . اما اگر سازنده صريحي مشخص نشده باشد ، جاوا
بطور خودكار يك سازنده پيش فرض را عرضه مي كند . درست مثل حالت Box .
در اين مرحله ، ممكن است تعجب كنيد كه چرا از new براي مواردي نظير اعداد
صحيح و كاراكترها استفاده نمي شود. جواب اين است كه انواع ساده در جاوا بعنوان
اشيائ پياده سازي نمي شوند . در عوض ، آنها بعنوان متغيرهاي عادي پياده سازي
مي شوند. اينكار براي افزايش كارايي انجام مي گيرد. جاوا قادراست بدون استفاده
از رفتارهاي خاص نسبت به اشيائ، اين انواع ساده را بطور موثري پياده سازي كند.
نكته مهم اين است كه new حافظه را براي يك شي ئ طي زمان اجرا تخصيص مي دهد .
مزيت اين روش آن است كه برنامه شما ميتواند اشيائ مورد نيازش را طي زمان اجراي
برنامه ايجاد كند . اما از آنجاييكه محدوديت حافظه وجود دارد ، ممكن است new
بعلت عدم كفايت حافظه نتواند حافظه را به يك شي ئ تخصيص دهد . اگر چنين حالتي
پيش بيايد، يك استثنائ حين اجرا واقع خواهد شد. ولي در زبانهاي C++/C در صورت
عدم موفقيت ، مقدار تهي (null) برگردان مي شود .
اجازه دهيد يكبار ديگر تفاوت بين يك كلاس و يك شي ئ را مرور كنيم . يك كلاس
يك نوع جديد داده را ايجاد مي كند كه مي توان براي توليد اشيائ از آن نوع
استفاده نمود. يعني يك كلاس يك چهارچوب منطقي ايجاد مي كند كه ارتباط بين اعضائ
را توصيف مي نمايد . هنگاميكه يك شي ئ از يك كلاس را اعلان مي كنيد ، در حقيقت
نمونه اي از آن كلاس را بوجود آورده ايد. بدين ترتيب ، كلاس يك ساختار منطقي است .
يك شي داراي واقعيت فيزيكي است . ( يعني يك شي ئ فضايي از حافظه را اشغال در ذهن داشته باشيد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


انتساب متغيرهاي ارجاع شي ئ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۷۱ مراجعه امروز
۴۲۸۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انتساب متغيرهاي ارجاع شي ئ
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۰۳ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

انتساب متغيرهاي ارجاع شي ئ

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

+ Box b1 = new Box)(;
+ Box b2 = b1;

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

| |
| Width |
> b1 | Height | Box object

> |
| Depth |
|

اگرچه b1و b2و هر دو به يك شي ئ ارجاع مي كنند ، اما بطريق ديگري با يكديگر
پيوند ندارند. بعنوان مثال ، يك شي ئ پس آيند ( متعاقب ) به b1 خيلي ساده b1 را
از شي ئ اوليه جدا كرده (un hook) بدون اينكه تاثيري روي شي ئ اوليه يا b2 داشته
باشد . بعنوان مثال :

+ Box b1 = new Box)(;
+ Box b2 = b1;
+ //...
+ b1 = null;

در اينجا b1 برابر تهي (null) شده ، اما b2 همچنان به شي ئاوليه ارجاع ميكند.
يادآوري : هنگاميكه يك متغير ارجاع شي ئ را به متغير ارجاع شي ئ ديگري انتساب
مي دهيد ، يك كپي از شي ئ بوجود نيامده بلكه فقط يك كپي از ارجاع

کيفيت مقاله :
عالی خوب متوسط ضعيف


چرا جاوا براي اينترنت اهميت دارد ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۷۴ مراجعه امروز
۴۲۹۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چرا جاوا براي اينترنت اهميت دارد
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۴۸۶ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

چرا جاوا براي اينترنت اهميت دارد

اينترنت جاوا را پيشاپيش زبانهاي برنامه نويسي قرار داد و در عوض جاوا
تاثيرات پيش برنده اي روي اينترنت داشته است . دليل اين امر بسيار ساده است :
جاوا سبب گسترش فضاي حركت اشيائ بطور آزادانه در فضاي الكترونيكي مي شود . در
يك شبكه ، دو نوع طبقه بندي وسيع از اشيائ در حال انتقال بين سرويس دهنده و
رايانه شخصي شما وجود دارد : اطلاعات غير فعال (passive) و برنامه هاي فعال
(active) و پويا (dynamic) . بعنوان نمونه هنگاميكه پست الكترونيكي e-mail خود
را مرور مي كنيد ، در حال بررسي داده هاي غير فعال هستيد . حتي هنگاميكه يك
برنامه را گرفته و بار گذاري مي كنيد ، ماداميكه از آن برنامه استفاده نكنيد
كدهاي برنامه بعنوان داده هاي غير فعال هستند . اما نوع دوم اشيائي كه امكان
انتقال به رايانه شخصي شما را دارند ، برنامه هاي پويا و خود اجرا هستند . چنين
برنامه اي اگر چه توسط سرويس دهنده ارائه و انتقال مي يابد ، اما يك عامل فعال
روي رايانه سرويس گيرنده است . بعنوان نمونه سرويس دهنده قادر است برنامه اي را
بوجود آورد كه اطلاعات و داده هاي ارسالي توسط سرويس دهنده را نمايش دهد .
بهمان اندازه كه برنامه هاي پويا و شبكه اي شده موردتوجه قرار گرفته اند بهمان
نسبت نيز دچار مشكلاتي در زمينه امنيت و قابليت حمل هستند . قبل از جاوا ، فضاي
الكترونيكي شامل فقط نيمي از وروديهايي بود كه اكنون وجود دارند . همانطوريكه
خواهيد ديد ، جاوا درها را براي يك شكل جديد از برنامه ها باز نموده است :
ريز برنامه ها (applets) .

ريز برنامه ها و برنامه هاي كاربردي جاوا
از جاوا براي توليد دو نوع برنامه مي توان استفاده نمود: برنامه هاي كاربردي
(applications) و ريز برنامه ها (applets) . يك برنامه كاربردي برنامه اي است كه
روي رايانه شما و تحت نظارت يك سيستم عامل اجرا مي شود . بدين ترتيب يك برنامه
كاربردي ايجاد شده توسط جاوا مشابه برنامه هاي ايجاد شده توسط Cو C++و خواهد
بود. هنگاميكه از جاوا براي توليد برنامه هاي كاربردي استفاده ميكنيم ، تفاوتهاي
زيادي بين اين زبان و ساير زبانهاي برنامه نويسي مشاهده نمي كنيم . اما ويژگي
جاوا براي توليد ريز برنامه ها داراي اهميت زيادي است . يك ريز برنامه (applet)
يك برنامه كاربردي است كه براي انتقال و حركت روي اينترنت و اجرا توسط يك
مرورگر قابل انطباق با جاوا طراحي شده است . يك ريز برنامه در حقيقت يك برنامه
ظريف جاوا است كه بطور پويا در سراسر اينترنت قابل بارگذاري باشد ، درست مثل
يك تصوير، يك فايل صوتي يا يك قطعه ويدئويي .تفاوت اصلي در اينست كه ريزبرنامه
يك برنامه كاربردي هوشمند است و شباهتي با يك تصوير متحرك يا فايل رسانه اي
ندارد . بعبارت ديگر اين برنامه قادر به عكس العمل در برابر ورودي كاربر و
ايجاد تغييرات پويا است .
ريز برنامه هاي جاوا بسيار جالب و هيجان انگيزند و قادرند دو مشكل اصلي يعني
امنيت و قابليت حمل را پشت سر بگذارند . قبل از ادامه بحث بهتر است مفهوم اصلي
اين دو مشكل را بيشتر مورد بررسي قرار دهيم .

امنيت
همانطوريكه خودتان هشيار هستيد ، هرگاه كه يك برنامه عادي (normal) را بار
گذاري مي كنيد با خطر يك حمله ويروسي مواجه خواهيد شد . قبل از جاوا اكثر
كاربران ، برنامه هاي قابل اجرا را بتناوب گرفته و بارگذاري مي كردند و قبل از
اجرا براي ويروس زدايي اقدام به اسكن (Scanning) برنامه ها مي كردند . با اين
حال بسياري از اين كاربران نسبت به حمله ويروسها به سيستم خود نگران بودند .
علاوه بر ويروسها ، نوع ديگري از برنامه هاي مزاحم وجود دارند كه بايد در
برابر آنها نيز ايمن ماند . اين نوع برنامه ها قادرند اطلاعات خصوصي نظير شماره
كارتهاي اعتباري ،ترازهاي حساب بانكي و كلمات عبور براي جستجو درسيستم فايلهاي
محلي رايانه شما را كشف نموده و استفاده نمايند . جاوا توسط ايجاد يك ديواره
آتش (firewall) بين رايانه شما و برنامه شبكه اي شده ، بر اين مشكلات فائق آمده
است .
هنگاميكه از يك مرورگر قابل انطباق با جاوا در وب استفاده ميكنيد، ميتوانيد
با اطمينان ريزبرنامه هاي جاوا را بارگذاري نماييد، بدون اينكه از حمله ويروسها
و برنامه هاي مزاحم واهمه اي داشته باشيد . جاوا يك برنامه خاص جاوا را به محيط
خاص اجرايي مربوطه اش منحصر كرده و اجازه دسترسي اين برنامه به ساير بخشهاي
رايانه را نمي دهد و بدين ترتيب مشكل امنيت را حل كرده است . توانايي بارگذاري
ريز برنامه ها بصورت مطمئن يكي از مهمترين جنبه هاي جاوا است .

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


معرفي روشها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۷۷ مراجعه امروز
۴۲۹۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
معرفي روشها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۸۰ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

معرفي روشها

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

type name(parameter-list ){
// body of method
}

در اينجا ، type مشخص كننده نوع داده برگشت شده توسط روش است . اين نوع هر
گونه نوع معتبر شامل نوع كلاسي كه ايجاد كرده ايد ، مي تواند باشد . اگر روش
مقداري را برنمي گرداند ، نوع برگشتي آن بايد Void باشد . نام روش توسط name
مشخص مي شود . اين نام مي تواند هر نوع شناسه مجاز باشد ، البته غير از آنهايي
كه قبلا" براي اقلام داخل قلمرو جاري استفاده شده باشند . parameter-list يك
پس آيند نوع و شناسه است كه توسط يك كاما جدا مي شود . پارامترها ضرورتا"
متغيرهايي هستند كه مقدار آرگومان (arguments) گذركرده در روش ، هنگام فراخواني
را جذب مي كنند . اگر روش فاقد پارامتر باشد ، آنگاه فهرست پارامتر تهي خواهد
بود .
روشهايي كه بجاي void يك نوع برگشتي (return) دارند ، مقداري را به روال
فراخواننده با استفاده از شكل بعدي دستور return باز مي گردانند .

return value;

در اينجا value همان مقدار برگشتي است .

افزودن يك روش به كلاس Box
اگرچه خيلي خوب است كه كلاسي ايجاد نماييم كه فقط شامل داده باشد، اما بندرت
چنين حالتي پيش مي آيد. در اغلب اوقات از روشها براي دسترسي به متغيرهاي نمونه
تعريف شده توسط كلاس ، استفاده مي كنيم . در حقيقت ، روشها توصيف گر رابط به
اكثر كلاسها هستند . اين امر به پياده سازان كلاس امكان مي دهد تا صفحه بندي
مشخصي از ساختارهاي داده داخلي را در پشت تجريدهاي (abstractions) روشهاي
زيباتر پنهان سازند . علاوه بر تعريف روشهايي كه دسترسي به داده ها را بوجود
مي آورند ، مي توانيد روشهايي را تعريف كنيد كه بصورت داخلي و توسط خود كلاس
مورد استفاده قرار مي گيرند .
اجازه دهيد با اضافه كردن يك روش به كلاس Box شروع كنيم . ممكن است درمثالهاي
قبلي شما هم احساس كرده باشيد كه محاسبه فضاي اشغالي (Volume) يك box چيزي
است كه توسط كلاس Box در مقايسه با كلاس BoxDemo بسيار راحت تر مديريت مي شود .
بعلاوه ، چون فضاي اشغالي يك box بستگي به اندازه آن دارد، بنظر مي رسد كه بهتر
است كلاس Box اين محاسبه را انجام دهد . براي انجام اينكار، بايد بصورت زير يك
روش را به Box اضافه نماييد :

+ // This program includes a method inside the box class.
+
+ class Box {
+ double width;
+ double height;
+ double depth;
+
+ // display volume of a box
+ void volume )({
+ System.out.print("Volume is ");
+ System.out.println(width * height * depth);
+ }
+ }
+
+ class BoxDemo3 {
+ public static void main(String args[] ){
+ Box mybox1 = new Box)(;
+ Box mybox2 = new Box)(;
+
+ // assign values to mybox1's instance variables
+ mybox1.width = 10;
+ mybox1.height = 20;
+ mybox1.depth = 15;
+
+ /* assign different values to mybox2's
+ instance variables */
+ mybox2.width = 3;
+ mybox2.height = 6;
+ mybox2.depth = 9;
+
+ // display volume of first box
+ mybox1.volume)(;
+
+ // display volume of second box
+ mybox2.volume)(;
+ }
+ }

اين برنامه خروجي زير را توليد مي كند كه مطابق خروجي روايت قبلي همين
برنامه است . Volume is 3000
Volume is 162

با دقت به دو خط بعدي كدها نگاه كنيد :

+ mybox1.volume)(;
+ mybox2.volume)(;

خط اول در اينجا ، روش ()volume را روي mybox1 قرار مي دهد. يعني كه اين خط
()volume را با استفاده از نام شي ئ كه بدنبال آن عملگر نقطه اي قرار گرفته است
نسبت به شي ئ mybox1 فراخواني مي كند . بدين ترتيب ، فراخواني ()mybox1.volume
فضاي اشغالي boxتوصيف شده بوسيله mybox1را نمايش داده و فراخواني ()mybox2.volume
فضاي اشغالي box توصيف شده بوسيله mybox2 را نمايش مي دهد. هر بار كه ()volume
خواسته شود ، فضاي اشغالي يك box مشخص را نمايش خواهد داد .
اگر با مفهوم فراخواني يك روش نا آشنا هستيد ، توصيف بعدي موضوع را تا حد
زيادي روشن مي كند . هنگاميكه ()mybox1.volume اجرا شود، سيستم حسن اجراي جاوا
كنترل را به كدي كه داخل ()volume تعريف شده منتقل مي كند . پس از اينكه دستور
داخل ()volume اجرا شود ، كنترل به روال فراخواننده برگشته و اجراي خط كد بعد
از فراخواني از سر گرفته خواهد شد . از يك نقطه نظر عمومي ، يك روش (method)
شيوه جاوا براي پياده سازي زير روالهاست (subroutions) .
يك نكته مهم درون روش ()volume وجود دارد : ارجاع به متغيرهاي نمونه width height
و depthو بصورت مستقيم بدون يك نام شي ئ يا يك عملگر نقطه اي پيش آيند
( قبلي ) انجام مي گيرد. وقتي يك روش از متغير نمونه اي كه توسط كلاس خود تعريف
شده استفاده مي كند ، اينكار را بطور مستقيم و بدون ارجاع صريح به يك شي ئ و
بدون استفاده از عملگر نقطه اي انجام مي دهد . اگر درباره آن بينديشيد ، بخوبي
درك مي كنيد . يك روش همواره نسبت به شي ئ از كلاس خود قرار داده مي شود . وقتي
اين تعبيه اتفاق مي افتد ، شي ئ شناخته شده است . بدين ترتيب ، داخل يك روش
نيازي به مشخص كردن يك شي ئ براي بار دوم وجود ندارد . اين بدان معني است كه width
، height،و depthو داخل ()volume بطور صريحي به كپيهاي متغيرهاي پيدا شده
در آن شي ئ كه ()volume را فعال مي كند ، ارجاع مي كنند .
اجازه دهيد مجددا" مرور كنيم : وقتي يك متغير نمونه بوسيله كدي كه بخشي از
كلاسي كه آن متغير نمونه در آن تعريف شده نيست مورد دسترسي قرار مي گيرد
اينكار بايد از طريق يك شي ئ با استفاده از عملگر نقطه اي انجام شود. اما ، وقتي
كه متغير نمونه بوسيله كدي كه بخشي از همان كلاس مربوط به آن متغير نمونه
باشد مورد دسترسي قرار گيرد ، به آن متغير مي توان بطور مستقيم ارجاع نمود .
همين مورد براي بررسي روشها نيز پياده سازي مي شود .

برگرداندن يك مقدار
در حاليكه پياده سازي ()volume محاسبه فضاي اشغالي يك box داخل كلاس مربوطه Box
را حركت مي دهد ، اما بهترين راه نيست . بعنوان مثال ، اگر بخش ديگري از
برنامه شما بخواهد فضاي اشغالي يك box را بداند ، اما مقدار آن را نمايش ندهد
چكار بايد كرد ? يك راه بهتر براي پياده سازي ()volume اين است كه آن را وادار
كنيم تا فضاي اشغالي box را محاسبه نموده و نتيجه را به فراخواننده (caller)
برگرداند . مثال بعدي كه روايت پيشرفته تر برنامه قبلي است ، همين كار را انجام
مي دهد :

+ // Now/ volume )(returns the volume of a box.
+
+ class Box {
+ double width;
+ double height;
+ double depth;
+
+ // compute and return volume
+ doble volume )({
+ return width * height * depth;
+ }
+ }
+
+ class BoxDemo4 {
+ public static void main(String args[] ){
+ Box mybox1 = new Box)(;
+ Box mybox2 = new Box)(;
+ double vol;
+
+ // assign values to mybox1's instance variables
+ mybox1.width = 10;
+ mybox1.height = 20;
+ mybox1.depth = 15;
+
+ /* assign different values to mybox2's
+ instance variables */
+ mybox2.width = 3;
+ mybox2.height = 6;
+ mybox2.depth = 9;
+
+ // get volume of first box
+ vol = mybox1.volume)(;
+ System.out.println("Volume is " + vol);
+
+ // get volume of second box
+ vol = mybox2.volume)(;
+ System.out.println("Volume is " + vol);
+ }
+ }

همانطوريكه مي بينيد ، وقتي ()volume فراخواني مي شود ، در سمت راست يك
دستور انتساب قرار مي گيرد. در سمت چپ يك متغير است كه در اين حالت vol ميباشد
كه مقدار برگشتي توسط ()volume را دريافت مي كند . بدين ترتيب ، بعد از اجراي + vol = mybox.volume)(;

مقدار ()mybox1.volume برابر 3000 شده و سپس اين مقدار در vol ذخيره خواهد
شد .
دو نكته مهم درباره برگرداندن مقادير وجود دارد :
ؤ نوع داده برگشت شده توسط يك روش بايد با نوع برگشتي مشخص شده توسط همان
روش سازگار باشد. بعنوان مثال ، اگر نوع برگشتي برخي روشها boolean باشد، نبايد
يك عدد صحيح را برگردان نماييد .
ؤ متغيري كه مقدار برگشتي توسط يك روش را دريافت مي كند ( نظير vol در اين
مثال ) بايد همچنين با نوع برگشتي مشخص شده براي آن روش سازگاري داشته باشد .
يك نكته ديگر : برنامه قبلي را مي توان كمي كاراتر نيز نوشت زيرا هيچ نياز
واقعي براي متغير vol وجود ندارد . فراخواني ()volume را مي شد بطور مستقيم
( بصورت زير ) در دستور ()println استفاده نمود :

+ System.out.println("Volume is " + mybox1.volume90);

در اين حالت ، هنگاميكه ()println اجرا مي شود ، ()mybox1.volume بصورت
خودكار فراخواني شده و مقدار آن به ()println گذر مي كند .

افزودن روشي كه پارامترها را مي گيرد
اگرچه برخي روشها نيازي به پارامترها ندارند ، اما اكثر روشها اين نياز را
دارند . پارامترها به يك روش ، امكان عمومي شدن را مي دهند . يعني كه يك روش
پارامتردار (parameterized) مي تواند روي طيف گوناگوني از داده ها عمل كرده و
يا در شرايط نسبتا" گوناگوني مورد استفاده قرار گيرد . براي مشاهده اين نكته
از يك برنامه خيلي ساده استفاده مي كنيم . در اينجا روشي را مشاهده مي كنيد كه
مربع عدد 10 را برمي گرداند :

+ int square)(
+ {
+ return 10 * 10;
+ }

در حاليكه اين روش در حقيقت مقدار مربع عدد 10 را برمي گرداند ، اما كاربرد
آن بسيار محدود است . اما اگر روش را بگونه اي تغيير دهيد كه پارامتري را بگيرد
همانطوريكه خواهيد ديد ، مي توانيد ()square را مفيدتر بسازيد .

+ int square(int i)
+ {
+ return i * i;
+ }

اكنون ()square مربع هر مقداري را كه فراخواني شود ، برمي گرداند . يعني كه
اكنون ()square يك روش با هدف عمومي است كه مي تواند مربع هر مقدار عدد صحيح
( بجاي فقط عدد 10 ) را محاسبه مي كند .
مثالي را در زير مشاهده مي كنيد :

+ int x/ y;
+ x = square(5); // x equals 25
+ x = square(9); // x equals 81
+ y = 2;
+ x = square(y); // x equals 4

در اولين فراخواني ()square مقدار 5 به پاارمتر i گذر مي كند . در دومين
فراخواني ، i مقدار 9 را دريافت مي كند . سومين فراخواني مقدار y كه در اين
مثال 2 است را مي گذراند . همانطوريكه اين مثالها نشان مي دهند، ()square قادر
است مربع هر داده اي را كه از آن مي گذرد ، برگرداند .
مهم است كه دو اصطلاح پارامتر (parameter) و آرگومان (argument) را بوضوح
درك نماييم . پارامتر ، متغيري است كه توسط يك روش تعريف شده و هنگام فراخواني
روش ، مقداري را دريافت مي كند. بعنوان مثال ، در ()square، i يك پارامتر است .
آرگومان مقداري است كه هنگام فراخواني يك روش به آن گذر مي كند . بعنوان مثال
(َ100)square مقدار100 را بعنوان يك آرگومان گذر ميدهد. داخل ()square، پارامتر i
مقداري را دريافت مي كند .
مي توانيد يك روش پارامتردار را براي توسعه كلاس Box مورداستفاده قرار دهيد.
در مثالهاي قبلي ، ابعاد هر يك box بايد بصورت جداگانه با استفاده از يك سلسله
دستورات نظير مورد زير ، تعيين مي شدند :

+ mybox1.width = 10;
+ mybox1.height = 20;
+ mybox1.depth = 15;

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

+ // This program uses a parameterized method.
+
+ class Box {
+ double width;
+ double height;
+ double depth;
+
+ // compute and return volume
+ double volume )({
+ return width * height * depth;
+ }
+ // sets dimensions of box
+ void setDim(double w/ double h/ double d ){
+ width = w;
+ height = h;
+ depth = d;
+ }
+ }
+
+ class BoxDemo5 {
+ public static void main(String args[] ){
+ Box mybox1 = new Box)(;
+ Box mybox2 = new Box)(;
+ double vol;
+
+ // initialize each box
+ mybox.setDim(10/ 20/ 15);
+ mybox.setDim(3/ 6/ 9);
+
+ // get volume of first box
+ vol = mybox1.volume)(;
+ System.out.println("Volume is " + vol);
+
+ // get volume of second box
+ vol = mybox2.volume)(;
+ System.out.println("Volume is " + vol);
+ }
+ }

همانطوريكه مي بينيد ، روش ()setDim براي تعيين ابعاد هر box مورد استفاده
قرار مي گيرد . بعنوان مثال وقتي

+ mybox1.setDim(10/ 20/ 15);

اجرا مي شود ، عدد 10 به پارامتر w ، 20به h و 15به d كپي مي شود . آنگاه heightو depthو نسبت داده

کيفيت مقاله :
عالی خوب متوسط ضعيف


سازندگان Constructors ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۸۰ مراجعه امروز
۴۲۹۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
سازندگان Constructors
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۱۷۴ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

سازندگان Constructors

خيلي خسته كننده است كه هربار يك نمونه ايجاد مي شود كليه متغيرهاي يك كلاس
را مقداردهي اوليه نماييم . حتي هنگاميكه توابع سهل الاستفاده نظير ()setDim را
اضافه مي كنيد ، بسيار ساده تر و دقيق تر آن است كه كليه تنظيمات در زمان ايجاد
اوليه شي ئ انجام شود . چون نياز به مقدار دهي اوليه بسيار رايج است ، جاوا به
اشيائ امكان مي دهد تا در زمان ايجاد شدن خودشان را مقدار دهي اوليه نمايند .
اين مقدار دهي اوليه خودكار بااستفاده از سازنده (constructor) انجام مي گيرد.
يك سازنده بمحض ايجاد يك شي ئ بلافاصله آن را مقدار دهي اوليه مي نمايد . اين
سازنده نام همان كلاسي را كه در آن قرار گرفته اختيار نموده و از نظر صرف و نحو
مشابه يك روش است . وقتي يكبار سازنده اي را تعريف نماييد، بطور خودكار بلافاصله
پس از ايجاد يك شي ئ و قبل از اينكه عملگر new تكميل شود ، فراخواني خواهد شد .
سازندگان كمي بنظر عجيب مي آيند زيرا فاقد نوع برگشتي و حتي فاقد void هستند .
بخاطر اينكه نوع مجازي برگشتي سازنده يك كلاس ، همان نوع خود كلاس مي باشد . اين
وظيفه سازنده است كه وضعيت داخلي يك شي ئ را بگونه اي مقدار دهي اوليه نمايد كه
كدي كه يك نمونه را ايجاد مي كند ، بلافاصله يك شي ئ كاملا" قابل استفاده و مقدار
دهي شده بوجود آورد .
مي توانيد مثال مربوط به Box را طوري بازنويسي كنيد كه ابعاد يك box وقتي
كه يك شي ئ ساخته مي شود ، بطور خودكار مقدار دهي اوليه شوند . براي انجام اين
كار ، يك سازنده را جايگزين ()setDim نماييد . كار را با تعريف يك سازنده ساده
شروع مي كنيم كه بسادگي ابعاد هر box را بهمان مقادير تنظيم ميكند. اين روايت
جديد بقرار زير است :

+ /* Here/ Box uses a constructor to initialize the
+ dimensions of a box.
+ */
+ class Box {
+ double width;
+ double height;
+ double depth;
+
+ // This is the constructor for Box.
+ Box )({
+ System.out.println("Constructing Box");
+ width = 10;
+ height = 10;
+ depth = 10;
+ }
+
+ // compute and return volume
+ double volume )({
+ return width * height * depth;
+ }
+ }
+
+ class BoxDemo6 {
+ public static void main(String args[] ){
+ // declare/ allocate/ and initialize Box objects
+ Box mybox1 = new Box)(;
+ Box mybox2 = new Box)(;
+
+ double vol;
+
+ // get volume of first box
+ vol = mybox1.volume)(;
+ System.out.println("volume is " + vol);
+
+ // get volume of second box
+ vol = mybox2.volume)(;
+ System.out.println("volume is " + vol);
+ }
+ }

پس از اجراي اين برنامه ، خروجي آن بصورت زير خواهد شد :

Constructing Box
Constructing Box
Volume is 1000
Volume is 1000

همانطوريكه مشاهده مي كنيد ، mybox1و mybox2و هنگام ايجاد شدن بوسيله ()Box
مقداردهي اوليه ميشوند. چون سازنده به همه boxها همان ابعاد يعني 10x10x10
را مي دهد ، هم mybox1 و هم mybox2 فضاي اشغالي يكساني خواهند داشت . دستور
()println داخل ()Box فقط بمنظور توصيف بهتر قرار گرفته است . اكثر توابع
سازنده چيزي را نمايش نمي دهند. آنها فقط خيلي ساده ، اشيائ را مقدار دهي اوليه
مي كنند .
قبل از ادامه بحث ، عملگر new را مجددا" بررسي ميكنيم . همانطوريكه مي دانيد
هنگاميكه يك شي ئ را اختصاص مي دهيد ، شكل عمومي زير را مشاهده مي كنيد :

class-var = new classname)(;

اكنون مي توانيد بفهميد چرا پرانتزها بعد از نام كلاس مورد نيازند . آنچه
واقعا" اتفاق مي افتد اين است كه سازنده كلاس فراخواني شده است . بدين ترتيب
در خط

+ Box mybox1 = new Box)(;

()newBox سازنده ()Box را فراخواني مي كند اگر يك سازنده براي كلاس تعريف
نشود ، آنگاه جاوا يك سازنده پيش فرض براي كلاس ايجاد مي كند . بهمين دليل خط
قبلي از كد در روايتهاي اوليه Box كه هنوز يك سازنده تعريف نشده بود ، كار
مي كرد. سازنده پيش فرض بطور خودكار كليه متغيرهاي نمونه را با عدد صفر، مقدار
دهي اوليه مي نمايد . سازنده پيش فرض غالبا" براي كلاسهاي ساده كفايت مي كند
اما براي كلاسهاي پيچيده تر كفايت نمي كند . هر بار كه سازنده خاص خود را تعريف
كنيد ، ديگر سازنده پيش فرض استفاده نخواهد شد .

سازندگان پارامتردار شده (parameterized)
هنگاميكه سازنده ()Box در مثال قبلي يك شي ئ Box را مقدار دهي اوليه مي كند
چندان سودمند نيست ، زيرا كليه box ها ، ابعاد يكساني دارند . آنچه مورد نياز
است ، روشي براي ساخت اشيائ Box داراي ابعاد گوناگون است . ساده ترين راه
افزودن پارامترها به سازنده است . همانطوريكه احتمالا" حدس مي زنيد ، اين عمل
سودمندي سازندگان را افزايش مي دهد . بعنوان مثال ، روايت بعدي Box يك سازنده
پارامتردار شده را تعريف مي كند كه ابعاد يك box را همانطوريكه آن پارامترها
مشخص شده اند ، تنظيم مي كند. دقت كافي به چگونگي ايجاد اشيائ Box داشته باشيد.

+ /* Here/ Box uses a parameterized constructor to
+ initialize the dimensions of a box.
+ */
+ class Box {
+ double width;
+ double height;
+ double depth;
+
+ // This is the constructor for Box.
+ Box(double w/ double h/ double d ){
+ width = w;
+ height = h;
+ depth = d;
+ }
+
+ // compute and return volume
+ double volume )({
+ return width * height * depth;
+ }
+ }
+
+ class BoxDemo7 {
+ public static void main(String args[] ){
+ // declare/ allocate/ and initialize Box objects
+ Box mybox1 = new Box(10/ 20/ 15);
+ Box mybox2 = new Box(3/ 6/ 9);
+
+ double vol;
+
+ // get volume of first box
+ vol = mybox1.volume)(;
+ System.out.println("volume is " + vol);
+
+ // get volume of second box
+ vol = mybox2.volume)(;
+ System.out.println("volume is " + vol);
+ }
+ }

خروجي اين برنامه بقرار زير است :

Volume is 3000
Volume is 162

همانطوريكه مي بينيد ، هر شي ئ همانطوريكه در پارامترهاي سازنده اش مشخص شده
مقدار دهي اوليه خواهد شد .

+ Box mybox1 = new Box(10/ 20/ 15);

هنگاميكه new شي ئ را ايجاد مي كند ، مقادير 10 ، 20 ، 15 به سازنده ()Box
گذر مي كنند . بدين ترتيب كپي خاص mybox1از widthز، height،و depthو بترتيب

کيفيت مقاله :
عالی خوب متوسط ضعيف


واژه كليدي This ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۸۳ مراجعه امروز
۴۲۹۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
واژه كليدي This
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۸۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

واژه كليدي This

گاهي لازم است يك روش به شي ئ كه آن را فراخواني نموده ، ارجاع نمايد . براي
اين منظور، جاوا واژه كليدي this را تعريف كرده است . this را مي توان داخل هر
روشي براي ارجاع به شي ئ جاري (current) استفاده نمود. يعني this همواره ارجاعي
است به شي ئ كه روش روي آن فراخواني شده است . مي توانيد از this هر جايي كه
ارجاع به يك شي ئ از نوع كلاس جاري مجاز باشد ، استفاده نماييد .
براي اينكه بفهميد this به چه چيزي ارجاع مي كند ، روايت بعدي ()Box را در
نظر بگيريد :

+ // A redundant use of this.
+ Box(double w/ double h/ double d ){
+ this.width = w;
+ this.height = h;
+ this.depth = d;
+ }

اين روايت ()Box دقيقا" مثل روايت اوليه كار مي كند . استفاده از this به
ندرت انجام گرفته اما كاملا"صحت دارد. داخل ()Box همواره this به شي ئ فراخوانده
شده ارجاع مي كند . اگرچه در اين مثالها بندرت پيش آمده مي كند . اگرچه در اين
مثالها بندرت پيش آمده ، اما this در ساير متون بسيار مفيد است .

مخفي نمودن متغير نمونه
حتما" مي دانيد كه اعلان دو متغير محلي با يك نام داخل يك قلمرو يا قلمروهاي
بسته شده ، غير مجاز است . بطرز خيلي جالبي ، مي توانيد متغيرهاي محلي شامل
پارامترهاي رسمي براي روشها ، داشته باشيد كه با اسامي متغيرهاي نمونه كلاسها
مشترك باشند . اما ، هنگاميكه يك متغير محلي همان اسم متغير نمونه را داشته
باشد، متغير محلي ، متغير نمونه را مخفي مي سازد. بهمين دليل بود كه از width height
و depthو بعنوان اسامي پارامترهاي سازنده ()Box داخل كلاس Box استفاده
نكرديم . اگر از آنها بهمين روش استفاده مي كرديم ، آنگاه width به پارامتر
رسمي ارجاع مي كرد و متغير نمونه width را مخفي مي ساخت . اگرچه آسان تر است
كه از اسامي متفاوت استفاده كنيم ، اما راه حل ديگري براي چنين شرايطي وجود
دارد . چون this امكان ارجاع مستقيم به شي ئ را به شما مي دهد ، مي توانيد با
استفاده از آن هر نوع تصادف و يكي شدن اسامي بين متغيرهاي نمونه و متغيرهاي
محلي را رفع نماييد . بعنوان مثال ، در اينجا روايت ديگري از ()Box وجود دارد
كه از width، height،و depthو بعنوان اسامي پارامترها استفاده نموده و آنگاه
از this براي دستيابي به متغيرهاي نمونه با همين اسامي استفاده كرده است :

+ // Use this to resolve name-space collisions.
+ Box(double width/ doublee height/ double depth ){
+ this.width = width;
+ this.height = height;
+ this.depth = depth;
+ }

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


جمع آوري زباله Garbage collection ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۸۶ مراجعه امروز
۴۳۰۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
جمع آوري زباله Garbage collection
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۵۵ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

جمع آوري زباله Garbage collection

از آنجاييكه اشيائ بصورت پويا و با استفاده از عملگر new تخصيص مي يابند
ممكن است تعجب كنيد كه چگونه اين اشيائ خراب شده و حافظه آنها آزاد شده و
مجددا" تخصيص مي يابد . در برخي زبانها ، نظير C++ ، اشيائ تخصيص يافته پويا
بايد بصورت دستي و با استفاده از عملگر delete رها شوند . جاوا در اين مورد
روش متفاوتي دارد. جاوا اينكار را بصورت خودكار براي شما انجام مي دهد. تكنيكي
كه تخصيص مجدد اشيائرا انجام ميدهد،اصطلاحا" جمع آوري زباله garbage collection
ناميده مي شود. طرز كار آن بشرح بعدي مي باشد : وقتي كه هيچگونه ارجاعي به يك
شي ئ وجود نداشته باشد، فرض مي شود كه آن شي ئ نيازي به خراب كردن اشيائ بصراحت
نظير زبان C++ وجود ندارد . جمع آوري زباله طي اجراي برنامه شما فقط بصورت
پراكنده و گاه و بيگاه اتفاق مي افتد ( البته اصلا" اگر اتفاق بيفتد ) . اين
جريان بخاطر اينكه يك يا دو شي ئ وجود دارند كه ديگر استفاده نمي شوند ، اتفاق
نمي افتد . بعلاوه ، پياده سازيهاي گوناگون حين اجراي جاوا ، شيوه هاي متفاوتي
در جمع آوري زباله بوجود مي آورد، اما در غالب اوقات هنگام نوشتن برنامه هايتان اين موضوع نگراني نداشته باشيد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


روش ()finalize ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۸۹ مراجعه امروز
۴۳۰۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
روش ()finalize
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۷۳ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

روش ()finalize

گاهي لازم است تا يك شي ئ هنگاميكه در حال خراب شدن است ، يك عمل خاصي را
انجام دهد. بعنوان مثال ، ممكن است يك شي ئ دربرگيرنده منابع غير جاوا نظير يك
دستگيره فايل (file handle) يا فونت كاراكتر ويندوز باشد، و مي خواهيد اطمينان
يابيد كه قبل از اينكه آن شي ئ خراب شود ، منابع فوق آزاد شوند . براي اداره
چنين شرايطي ، جاوا مكانيسمي تحت نام finalization ( تمام كننده ) فراهم آورده
است .
با استفاده از اين مكانيسم ، مي توانيد عمليات مشخصي را تعريف نماييد كه
زمانيكه يك شي ئ در شرف مرمت شدن توسط جمع آوري زباله است ، اتفاق بيفتند .
براي افزودن يك تمام كننده (finalizer) به يك كلاس ، خيلي راحت كافي است تا
روش ()finalize را تعريف نماييد. سيستم حين اجراي جاوا هرگاه در شرف چرخش مجدد
يك شي ئ از كلاسي باشد ، اين روش را فراخواني مي كند . داخل روش ()finalize شما
عملياتي را مشخص مي كنيد كه بايد درست قبل از خرابي آن شي ئ انجام گيرند . جمع
كننده زباله (garbage collector) بطور متناوب اجرا شده و بدنبال اشيايي ميگردد
كه ديگر مورد ارجاع هيچيك از شرايط اجرايي نبوده و يا غير مستقيم توسط ساير
اشيائ ارجاع شده باشند . درست قبل از اينكه يك داراي رها شود، سيستم حين اجراي
جاوا روش ()finalize را روي شي ئ فراخواني مي كند .
شكل عمومي روش ()finalize بقرار زير مي باشد :

protected void finalize)(
{
// finalization code here
}

دراينجا واژه كليدي protected توصيفگري است كه از دسترسي به روش ()finalize
توسط كدهاي تعريف شده خارج از كلاس جلوگيري مي كند.
مهم است بدانيد كه روش ()finalize درست مقدم بر جمع آوري زباله فراخواني
مي شود . بعنوان مثال وقتي يك شي ئ از قلمرو خارج مي شود ، اين روش فراخواني
نخواهد شد.اين بدان معني است كه نميتوانيد تشخيص بدهيد كه چه زماني ()finalize
اجرا خواهد شد و يا اصلا" اجرا نخواهد شد . بنابراين ، برنامه شما بايد ساير
وسائل براي آزاد كردن منابع سيستم مورد استفاده شي ئ را تدارك ببيند . برنامه
نبايد براي عمليات برنامه اي عادي ، متكي به روش ()finalize باشد .
نكته : اگر با C++ آشنايي داريد، پس مي دانيد كه C++ امكان مي دهد تا يك خراب
كننده (destructor) براي يك كلاس تعريف نماييد ، كه هرگاه يك شي ئ خارج
از قلمرو قرار گيرد ، فراخواني خواهد شد . جاوا چنين كاري نكرده و از
اين ايده پشتيباني نمي كند . روش ()finalize فقط به يك تابع خراب كننده
نزديك مي شود. به مرور كه تجربه بيشتري با جاوا كسب مي كنيد ، مي بينيد
كه نياز به توابع خراب كننده بسيار كم است زيرا زير سيستم جمع آوري حسن انجام مي دهد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دو دستور كنترلي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۹۲ مراجعه امروز
۴۳۰۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دو دستور كنترلي
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۳۸ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

دو دستور كنترلي

اين دو دستور يك جنبه بسيار مهم از جاوا يعني بلوك هاي كد (block of code)
را تشريح مي كنند .

دستور if(if statement()
دستور if در جاوا نظير دستور lf درهر يك از زبانهاي برنامه نويسي كار ميكند.
بعلاوه اين دستور از نظر قواعد صرف و نحو با دستور ifدر Cرو C++و شباهت دارد .
ساده ترين شكل آن را در زير مشاهده مي كنيد :

if( condition )statement;

در اينجا شرط (condition) يك عبارت بولي (Boolean) است . اگر شرايط درست
باشد ، آنگاه دستور اجرا خواهدشد . اگر شرايط صحيح نباشد ، آنگاه دستور پشت سر
گذاشته مي شود (bypassed). بعنوان مثال در نظر بگيريد :

+ if(num < 100 )println("num is less then 100");

در اين حالت ، اگر متغير num شامل مقداري كوچكتر از 100 باشد ، عبارت شرطي
درست بوده و ()println اجرا خواهد شد . اگر num شامل مقداري بزرگتر يا مساوي 100
باشد ، آنگاه روش ()println پشت سر گذاشته مي شود .
بعدا" خواهيد ديد كه جاوا يك ضميمه كامل از عملگرهاي رابطه اي (Relational)
تعريف مي كند كه قابل استفاده در عبارات شرطي هستند . چند نمونه از آنها بشرح
زير است :

|
مفهوم آن | عملگر |
|
كوچكتر از | < |
|
بزرگتر از | > |
|
مساوي با | = = |

دقت داشته باشيد كه آزمايش تساوي با علامت تساوي انجام مي گيرد .
در زير برنامه اي مشاهده مي كنيد كه يك دستور if را توصيف كرده است :

+ /*
+ Demonstrate the if.
+ Call this file "IfSample.java".
+ */
+ class IfSample {
+ public static void main( String args [] ){
+ int x/ y;
+
+ x = 10;
+ y = 20;
+ if(x < y )System.out.println("x is less than y");
+
+ x = x * 2;
+ if(x == y )System.out.println("x now equal to y");
+
+ x = x * 2;
+ if(x > y )System.out.println("x now greater than y");
+
+ // this won't display anything
+ if(x == y )System.out.println("you won't see this");
+ }
+ }

خروجي توليد شده توسط اين برنامه بشرح زير خواهد بود :

x is less than y
x now equal to y
x now greater than y

به يك نكته ديگر در اين برنامه دقت نماييد . خط

+ int x/ y;

دو متغير xو yو را با استفاده از فهرست جدا شده با كاما اعلان مي كند .

حلقه for
شايد از تجربيات قبلي در برنامه نويسي تا بحال فهميده باشيد كه دستورات
حلقه (loop statements) يك بخش بسيار مهم در كليه زبانهاي برنامه نويسي هستند.
جاوا نيز از اين قاعده مستثني نيست . در حقيقت همانگونه كه در فصل پنجم خواهيد
ديد ، جاوا يك دسته بندي پر قدرت از ساختارهاي حلقه اي عرضه مي كند . شايد از
همه اين ساختارها سليس تر حلقه for باشد . اگر با Cو C++و آشنايي داشته باشيد
خوشحال خواهيد شد كه بدانيد نحوه كار حلقه هاي for در جاوا با اين زبانها مشابه
است . اگر با Cو C++و آشنايي نداريد ، باز هم فراگيري استفاده از حلقه for
بسيار ساده خواهد بود . ساده ترين شكل اين حلقه بقرار زير مي باشد :

for( initialization; condition )statement;

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

+ /*
+ Demonstrate the for loop.
+ Call this file "ForTest.java".
+ */
+ class ForTest {
+ public static void main(String args [] ){
+ int x;
+
+ for(x = 0; x<10; x = x+1)
+ System.out.println("This is x :" + x);
+ }
+ }

اين برنامه ، خروجي زير را توليد خواهد نمود :

this is x:0
this is x:1
this is x:2
this is x:3
this is x:4
this is x:5
this is x:6
this is x:7
this is x:8
this is x:9

در اين مثال ، x متغير كنترل حلقه است . در بخش مقداردهي اوليه حلقه for به
اين متغير مقدار صفر داده مي شود. در شروع هر تكرار ( شامل مرحله اول ) آزمايش
شرط 10 اجرا خواهد شد ، و سپس بخش اجراي مكرر حلقه اجرا خواهد شد . اين روال ماداميكه
آزمايش شرايط صحيح باشد ، ادامه مي يابد .
بعنوان يك نكته قابل تامل ،در برنامه هاي حرفه اي نوشته شده توسط جاوا بندرت
بخش اجراي مكرر حلقه بصورت برنامه قبلي نوشته مي شود . يعني شما بندرت دستوري
مثل عبارت زير خواهيد ديد :

+ x = x + 1;

دليل اين است كه جاوا دربرگيرنده يك عملگر افزايشي ويژه است كه همين عمليات
را بطور موثرتري انجام مي دهد . اين عملگر افزايشي ++ است ( دو علامت جمع در
كنار هم ) . عملگر افزايشي ، عملوند خود را يكي يكي افزايش خواهد داد . با
استفاده از عملگر افزايشي دستور قبلي را مي توان بصورت زير نوشت :

+ x++;

بدين ترتيب for در برنامه قبلي را معمولا" بصورت زير مي نويسند :

+ for(x = 0; x<10; x++)

ممكن است بخواهيد اين مورد را آزمايش كنيد . همانطوريكه خواهيد ديد ، حلقه
درست مثل قبل و بهمان ترتيب اجرا خواهد شد .
جاوا همچنين يك عملگر كاهشي (decrement) فراهم نموده كه باعلامت (- -) مشخص يكي يكي كاهش خواهد داد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


كلاس پشته A stack class ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۹۵ مراجعه امروز
۴۳۱۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كلاس پشته A stack class
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۸۳ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

كلاس پشته A stack class

اگرچه كلاس Box براي نشان دادن اجزائضروري يك كلاس مناسب بود، اما فاقد ارزش
عملي است . همانطوريكه از بحث برنامه نويسي شي ئ گرا (oop) بياد داريد ، يكي از
مزاياي بسيار مهم oop، كپسول سازي داده ها و كدي است كه با اين داده ها سر و كار
دارد . كلاس مكانيسمي است كه كپسول سازي در جاوا انجام مي گيرد. با خلق يك كلاس
شما نوع جديدي از داده را ايجاد مي كنيد كه هم طبيعت داده هاي مورد استفاده و
هم روالهاي ضروري براي كار با داده ها را تعريف مي كند . علاوه بر اين ، روشها
يك رابط پايدار و كنترل شده به داده هاي كلاس را تعريف مي كنند . بدين ترتيب
مي توانيد از طريق روشهاي يك كلاس از آن كلاس استفاده نماييد بدون اينكه نگران
جزئيات پياده سازي كلاس باشيد و يا اينكه نگران باشيد كه داده ها واقعا" چگونه
داخل آن كلاس مديريت مي شوند .
در يك مضمون ، يك كلاس شبيه يك " موتور داده "(data engine() است . براي كار
با موتور از طريق ابزارهاي كنترل كننده اش ، نيازي به دانش و اشراف كامل بر
چگونگي كاركرد داخلي موتور نداريد . در حقيقت ، از آنجاييكه جزئيات پنهان
شده اند ، مي توان كاركرد داخلي آن را بر حسب نياز تغيير داد . ماداميكه كد شما
كلاس را از طريق روشهايش استفاده مي كند ، مي توان جزئيات دروني را بدون ايجاد
اثرات جانبي در خارج كلاس تغيير داد .
پشته (stack) ، داده ها را بر حسب آنچه اول آمده آخر بيرون مي رود ذخيره
مي كند . بنابراين پشته شبيه يك پشته از بشقابهاي روي هم چيده است . اولين
بشقاب قرار گرفته روي ميز ، آخرين بشقابي است كه از آنجا خارج مي شود . پشته ها
بطور سنتي از طريق دو عمل نشاندن (push) و پراندن (pop) كنترل مي شوند . براي
نهادن يك قلم روي پشته ، از push استفاده مي كنيم . براي بيرون آوردن يك قلم
از پشته ، از pop استفاده مي كنيم . خواهيد ديد كه كپسول سازي كل مكانيسم پشته
بسيار ساده است .
در اينجا يك كلاس تحت نام stack وجود دارد كه يك پشته را براي اعداد صحيح
پياده سازي مي كند :

+ // This class defines an integer stack that can hold 10 values.
+ class Stack {
+ int stck[] = new int[10];
+ int tos;
+
+ // Initialize top-of-stack
+ Stack )({
+ tos =- 1;
+ }
+
+ // Pash an item onto the stack
+ void push(int item ){
+ if(tos==9)
+ System.out.println("Stack is full.");
+ else
+ stck[++tos] = item;
+ }
+
+ // Popan item from the stack
+ int pop )({
+ if(tos < 0 ){
+ System.out.println("Stack underflow.");
+ return 0;
+ }
+ else
+ return stck[tos--];
+ }
+ }

همانطوريكه مي بينيد ، كلاس stack دو قلم داده و سه روش را تعريف مي كند .
پشته اعداد صحيح توسط آرايه stck نگهداري مي شود . اين آرايه توسط متغير tos
نمايه سازي مي شود كه همواره نمايه بالاي پشته را نشان مي دهد . سازنده ()stack
متغير tos را با عدد 1- مقدار دهي اوليه مي كند ، كه نشان دهنده يك پشته خالي
است . روش ()push يك قلم را روي پشته مي نشاند . براي بازيابي يك قلم از پشته
روش ()pop را فراخواني مي كنيم . از آنجاييكه دسترسي به پشته توسط ()push و
()pop انجام مي گيرد ، اين حقيقت كه پشته توسط يك آرايه نگهداري مي شود واقعا"
با استفاده از پشته مرتبط نيست . بعنوان مثال پشته بايد در يك ساختار پيچيده تر
داده نگهداري شود ، نظير فهرست پيوندي (linked list) ، اما رابط تعريف شده
بوسيله ()push و ()pop همچنان دست نخورده باقي مي ماند .
كلاس Test stack كه در زير نشان داده ايم ، نشان دهنده كلاس stack است . اين
كلاس دو پشته عدد صحيح ايجاد كرده ، برخي مقادير را روي هر يك قرار داده و سپس
آن مقادير را مي پراند .

+ class TestStack {
+ public static void main(String args[] ){
+ Stack mystack1 = new Stack)(;
+ Stack mystack2 = new Stack)(;
+
+ // push some numbers onto the stack
+ for(int i=0; i<10; i++ )mystack1.push(i);
+ for(int i=10; i<20; i++ )mystack2.push(i);
+
+ // pop those numbers off the stack
+ System.out.println("Stack in mystack1:");
+ for(int i=0; i<10; i++)
+ System.out.println(mystack1.pop))(;
+
+ System.out.println("Stack in mystack2:");
+ for(int i=0; i<10; i++)
+ System.out.println(mystack2.pop))(;
+ }
+ }

اين برنامه خروجي زير را توليد مي كند :

Stack in mystack1:
9
8
7
6
5
4
3
2
1
0
Stack in mystack2:
19
18
17
16
15
14
13
12
11
10

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


نگاهي دقيق تر به روشها و كلاسها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۴۹۸ مراجعه امروز
۴۳۱۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نگاهي دقيق تر به روشها و كلاسها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۴۵ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

نگاهي دقيق تر به روشها و كلاسها

از اين پس موضوعات مربوط به روشها، شامل انباشتن (over loading) ، گذر دادن
پارامترها(parameter passing) و خود فراخواني يا همان برگشت پذيري (recursion)
را بررسي مي كنيم . و درباره كنترل دسترسي ، استفاده از واژه كليدي Static و
يكي از مهمترين كلاسهاي توكار جاوا يعني string بحت خواهيم نمود .

کيفيت مقاله :
عالی خوب متوسط ضعيف


انباشتن روشها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۰۱ مراجعه امروز
۴۳۱۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انباشتن روشها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۳۴ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

انباشتن روشها

در جاوا اين امكان وجود دارد كه دو يا چند روش را داخل يك كلاس كه همان نام
را دارد تعريف نمود ، البته ماداميكه اعلان پارامترهاي آن روشها متفاوت باشد .
در چنين شرايطي ، روشها را مي گويند " انباشته شده " و اين نوع پردازش را "
انباشتن روش " مي نامند . انباشتن روش يكي از راههايي است كه جاوا بوسيله آن "
چند شكلي " را پياده سازي مي كند . اگر تا بحال از زباني كه امكان انباشتن
روشها را دارد استفاده نكرده ايد ، اين مفهوم در وهله اول بسيار عجيب بنظر
مي رسد . اما خواهيد ديد كه انباشتن روش يكي از جنبه هاي هيجان انگيز و سودمند
جاوا است .
وقتي يك روش انباشته شده فراخواني گردد ، جاوا از نوع و يا شماره آرگومانها
بعنوان راهنماي تعيين روايت (Version) روش انباشته شده اي كه واقعا" فراخواني
مي شود ، استفاده مي كند . بدين ترتيب ، روشهاي انباشته شده بايد در نوع و يا
شماره پارامترهايشان متفاوت باشند . در حاليكه روشهاي انباشته شده ممكن است
انواع برگشتي متفاوتي داشته باشند ، اما نوع برگشتي بتنهايي براي تشخيص دو
روايت از يك روش كافي نخواهد بود. وقتي جاوا با يك فراخواني به يك روش انباشته
شده مواجه مي شود ، خيلي ساده روايتي از روش را اجرا مي كند كه پارامترهاي آن
با آرگومانهاي استفاده شده در فراخواني مطابقت داشته باشند .
در اينجا يك مثال ساده وجود دارد كه نشان دهنده انباشتن روش مي باشد :

+ // Demonstrate method overloading.
+ class OverloadDemo {
+ void test )({
+ System.out.println("No parameters");
+ }
+
+ // Overload test for one integer parameter.
+ void test(int a ){
+ System.out.println("a :" + a);
+ }
+
+ // Overload test for two integer parameters.
+ void test(int a/ int b ){
+ System.out.println("a and b :" + a + " " + b);
+ }
+
+ // Overload test for a double parameter.
+ double test(double a ){
+ System.out.println("double a :" + a);
+ return a*a;
+ }
+ }
+
+ class Overload {
+ public static void main(String args[] ){
+ OverloadDemo ob = new OverloadDemo)(;
+ double result;
+
+ // call all versions of test)(
+ ob.test)(;
+ ob.test(10);
+ ob.test(10/ 20);
+ result = ob.test(123.2);
+ System.out.println("Result of ob.test(123.2 :)" + result);
+ }
+ }

اين برنامه خروجي زير را توليد مي كند :

No parameters
a :10
a and b :10 20
double a :123.2
Result of ob.test(123.2 :)15178.2

همانطوريكه مي بينيد ، ()test چهار بار انباشته شده است . اولين روايت
پارامتري نمي گيرد ، دومين روايت يك پارامتر عدد صحيح مي گيرد ، سومين روايت
دو پارامتر عدد صحيح مي گيرد و چهارمين روايت يك پارامتر double مي گيرد . اين
حقيقت كه چهارمين روايت ()test همچنين مقداري را برمي گرداند، هرگز نتيجه حاصل
از عمل انباشتن نيست ، چون انواع برگشتي نقشي در تجزيه و تحليل انباشت ندارند.
وقتي يك روش انباشته شده فراخواني ميشود،جاوا بدنبال تطبيقي بين آرگومانهاي
استفاده شده براي فراخواني روش و پارامترهاي آن روش مي گردد . اما ، اين تطابق
نبايد لزوما" هميشه صحيح باشد. در برخي شرايط تبديل انواع خودكار جاوا ميتواند
نقشي در تجزيه و تحليل انباشت داشته باشد . بعنوان مثال ، برنامه بعدي را در
نظر بگيريد :

+ // Automatic type conversions apply to overloading.
+ class OverloadDemo {
+ void test )({
+ System.out.println("No parameters");
+ }
+
+ // Overload test for two integer parameters.
+ void test(int a/ int b ){
+ System.out.println("a and b :" + a + " " + b);
+ }
+
+ // Overload test for a double parameter.
+ double test(double a ){
+ System.out.println("Inside test(double )a :" + a);
+ }
+ }
+
+ class Overload {
+ public static void main(String args[] ){
+ OverloadDemo ob = new OverloadDemo)(;
+ int i = 88;
+
+ ob.test)(;
+ ob.test(10/ 20);
+
+ ob.test(i); // this will invoke test(double)
+ ob.test(123.2); // this will invoke test(double)
+ }
+ }

اين برنامه خروجي زير را توليد مي كند :

No parameters
a and b :10 20
Inside test(double )a :88
Inside test(double )a :123.2

همانطوريكه مشاهده ميكنيد، اين روايت ازoverloadDemo تعريف كننده (int)test
نمي باشد . بنابراين هنگاميكه ()test همراه با يك آرگومان عدد صحيح داخل overload
فراخواني مي شود ، هيچ روش تطبيق دهنده پيدا نخواهد شد . اما جاوا
مي تواند بطور خودكار يك عدد صحيح را به يك double تبديل نمايد و اين تبديل
براي رفع فراخواني مورداستفاده قرار ميگيرد. بنابراين ، بعد از آنكه (int)test
پيدا نمي شود ، جاوا i را به double ارتقائ داده و آنگاه (double)test را
فراخواني مي كند . البته اگر (int)test تعريف شده بود ، فراخواني مي شد . جاوا
فقط در صورتي كه هيچ تطبيق دقيقي پيدا نكند ، از تبديل خودكار انواع استفاده
مي كند .
انباشتن روش از چند شكلي هم پشتيباني مي كند زيرا يكي از شيوه هايي است كه
جاوا توسط آن الگوي " يك رابط و چندين روش " را پياده سازي مي كند . براي درك
اين مطلب ، مورد بعدي را درنظر بگيريد.در زبانهايي كه از انباشتن روش پشتيباني
نمي كنند ، هر روش بايد يك اسم منحصر بفرد داشته باشد . اما غالبا" مي خواهيد
يك روش را براي چندين نوع داده مختلف پياده سازي نماييد . مثلا" تابع قدر مطلق
را در نظر بگيريد . در زبانهايي كه از انباشتن روش پشتيباني نمي كنند معمولا"
سه يا چند روايت مختلف از اين تابع وجود دارد ، كه هر يك اسم متفاوتي اختيار
مي كند . بعنوان نمونه ، در زبان C تابع ()abs قدر مطلق يك عدد صحيح را
برمي گرداند ، ()labs قدر مطلق يك عدد صحيح long را برمي گرداند ، ()fabs قدر
مطلق يك عدد اعشاري را برمي گرداند . از آنجاييكه زبان C از انباشتن روش
پشتيباني نمي كند ، هر تابع بايد اسم خاص خودش را داشته باشد ، حتي اگر هر سه
تابع يك وظيفه واحد را انجام دهند. از نظر ذهني اين حالت ، شرايط پيچيده تري را
نسبت به آنچه واقعا" وجود دارد ، ايجاب مي كند . اگرچه مفهوم اصلي اين توابع
يكسان است ، اما همچنان مجبوريد سه اسم را بخاطر بسپاريد . اين شرايط در جاوا
اتفاق نمي افتد ، زيرا تمامي روش هاي مربوط به قدر مطلق مي توانند از يك اسم
واحد استفاده نمايند . در حقيقت كتابخانه كلاس استاندارد جاوا Java's standard)
(class library شامل يك روش قدر مطلق موسوم به ()abs مي باشد . اين روش توسط
كلاس Math در جاوا انباشته شده تا كليه انواع رقمي را مديريت نمايد . جاوا بر
اساس نوع آرگومان ، تصميم مي گيرد كه كدام روايت از ()abs را فراخواني نمايد .
ارزش انباشتن روشها در اين است كه مي توان با استفاده از يك اسم مشترك به
كليه روشهاي مرتبط با هم دسترسي پيدا كرد. بدين ترتيب ،اسم abs معرف عمل عمومي
است كه اجرا خواهد شد . تعيين روايت مخصوص براي هر يك از شرايط خاص بر عهده
كامپايلر مي باشد . برنامه نويس فقط كافي است تا اعمال عمومي كه بايد انجام
شوند را بخاطر بسپارد . بدين ترتيب با استفاده از مفهوم چند شكلي ، چندين اسم
به يك اسم خلاصه شده اند. اگرچه اين مثال بسيار ساده بود، امااگر مفهوم زيربنايي
آن را گسترش دهيد ، مي فهميد كه انباشتن روشها تا چه حد در مديريت پيچيدگي در
برنامه ها سودمند و كارساز است .
وقتي يك روش را انباشته مي كنيد ، هر يك از روايتهاي آن روش قادرند هر نوع
عمل مورد نظر شما را انجام دهند. هيچ قانوني مبني بر اينكه روشهاي انباشته شده
بايد با يكديگر مرتبط باشند، وجود ندارد. اما از نقطه نظر روش شناسي ، انباشتن
روشها مستلزم يك نوع ارتباط است . بدين ترتيب ، اگرچه مي توانيد از يك اسم
مشترك براي انباشتن روشهاي غير مرتبط با هم استفاده نماييد ، ولي بهتر است اين
كار را انجام ندهيد . بعنوان مثال ، مي توانيد از اسم sqr براي ايجاد روشهايي
كه مربع يك عدد صحيح و ريشه دوم عدد اعشاري را برمي گرداند ، استفاده نماييد .
اما اين دو عمل كاملا" با يكديگر متفاوتند. بكارگيري انباشتن روش درچنين مواقعي
سبب از دست رفتن هدف اصلي اين كار خواهد شد. در عمل ، فقط عمليات كاملا" نزديك
بهم را انباشته مي كنيد .

انباشتن سازندگان Overloading constructors
علاوه بر انباشتن روشهاي معمولي ، مي توان روشهاي سازنده را نيز انباشته
نمود. در حقيقت براي اكثر كلاسهايي كه در دنياي واقعي ايجاد مي كنيد ، سازندگان
انباشته شده بجاي استثنائ يك عادت هستند .
در زير آخرين روايت Box را مشاهده مي كنيد :

+ class Box {
+ double width;
+ double height;
+ double depth;
+
+ // This is the constructor for Box.
+ Box(double w/ double h/ double d ){
+ width = w;
+ height = h;
+ depth = d;
+ }
+
+ // compute and return volume
+ double volume )({
+ return width * height * depth;
+ }
+ }

همانطوريكه مي بينيد ، سازنده ()Box نيازمند سه پارامتر است . يعني كليه
اعلانات اشيائ Box بايد سه آرگومان به سازنده ()Box بگذرانند . بعنوان مثال
دستور بعدي فعلا" نامعتبر است : + Box ob = new Box)(;

ازآنجاييكه ()Box نيازمند سه آرگومان است ، فراخواني آن بدون آرگومانها خطا
است . اين مورد، سوالات مهمي را پيش رو قرار مي دهد. اگر فقط يك box را بخواهيد
و اهميتي نمي دهيد و يا نمي دانيد كه ابعاد اوليه آن چه بوده اند ، چه پيش
مي آيد ? همچنين ممكن است بخواهيد يك مكعب را با مشخص كردن يك مقدار كه براي
كليه ابعاد آن استفاده مي شوند، مقدار دهي اوليه نماييد ? آنگونه كه قبلا" كلاس Box
نوشته شده ، اين گزينه ها در دسترس شما نخواهد بود .
خوشبختانه راه حل اين مشكلات كاملا" ساده است : خيلي ساده تابع سازنده Box را
انباشته كنيد بگونه اي كه شرايط توصيف شده را اداره نمايد . برنامه بعدي شامل
يك روايت توسعه يافته Box است كه اينكار را انجام مي دهد :

+ /* Here/ Box defines three constructors to initialize
+ the dimensions of a box various ways.
+ */
+ class Box {
+ double width;
+ double height;
+ double depth;
+ // constructor used when all dimensions specified
+ Box(double w/ double h/ double d ){
+ width = w;
+ height = h;
+ depth = d;
+ }
+
+ // constructor used when no dimensions specified
+ Box )({
+ width =- 1; // use- 1 to indicate
+ height =- 1; // an uninitialized
+ depth =- 1; // box
+ }
+
+ // constructor used when cube is created
+ Box(double len ){
+ width = height = deoth = len;
+ }
+
+ // compute and return volume
+ double volume )({
+ return width * height * depth;
+ }
+ }
+
+ class OverloadDemo {
+ public static void main(String args[] ){
+ // create boxes using the various constructors
+ Box mybox1 = new Box(10/ 20/ 15);
+ Box mybox2 = new Box)(;
+ Box mycube = new Box(7);
+
+ double vol;
+
+ // get volume of first box
+ vol = mybox1.volume)(;
+ System.out.println("Volume of mybox1 is " + vol);
+
+ // get volume of second box
+ vol = mybox2.volume)(;
+ System.out.println("Volume of mybox2 is " + vol);
+
+ // get volume of cube
+ vol = mycube.volume)(;
+ System.out.println("Volume of mycube is " + vol);
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

Volume of mybox1 is 3000
Volume of mybox2 is- 1
Volume of mycube is 343

ne اجرا مي شود ، پارامترها را مشخص

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از اشيائ بعنوان پارامترها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۰۴ مراجعه امروز
۴۳۲۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از اشيائ بعنوان پارامترها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۲۵ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از اشيائ بعنوان پارامترها

تاكنون فقط از انواع ساده بعنوان پارامترهاي روشها استفاده كرده ايم . اما
هم صحيح و هم معمول است كه اشيائ را نيز به روشها گذر دهيم . بعنوان مثال
برنامه ساده بعدي را در نظر بگيريد :

+ // Objects may be passed to methods.
+ class Test {
+ int a/ b;
+ Test(int i/ int j ){
+ a = i;
+ b = j;
+ }
+
+ // return true if o is equal to the invoking object
+ boolean equals(Test o ){
+ if(o.a == a && o.b == b )return true;
+ else return false;
+ }
+ }
+
+ class PassOb {
+ public static void main(String args[] ){
+ Test ob1 = new Test(100/ 22);
+
+ Test ob2 = new Test(100/ 22);
+ Test ob3 = new Test-(1/- 1);
+
+ System.out.println("ob1 == ob2 :" + ob1.equals(ob2));
+
+ System.out.println("ob1 == ob3 :" + ob1.equals(ob3));
+ }
+ }

اين برنامه ، خروجي بعدي را توليد مي كند :

ob1 == ob2 :true
ob1 == ob3 :false

همانطوريكه مشاهده ميكنيد، روش ()equals داخل Test دو شي ئ را از نظر كيفيت
مقايسه نموده و نتيجه را برمي گرداند . يعني اين روش ، شي ئ فراخواننده را با
شيئي كه گذر كرده مقايسه مي كند . اگر محتوي آندو يكسان باشد ، آنگاه روش true
را برمي گرداند . در غير اينصورت false را برمي گرداند . توجه داشته باشيد كه
پارامتر o در ()equals مشخص كننده Test بعنوان نوع آن مي باشد. اگرچه Test يك
نوع كلاس ايجاد شده توسط برنامه است ،اما بعنوان انواع توكار جاوا و بهمان روش
مورد استفاده قرار گرفته است .
يكي از رايجترين كاربردهاي پارامترهاي شيئي مربوط به سازندگان است . غالبا"
ممكن است بخواهيد يك شي ئ جديد را بسازيد طوري كه اين شي ئ در ابتدا نظير يك شي ئ
موجود باشد. براي انجام اينكار بايد يك تابع سازنده تعريف نماييد كه يك شي ئ از
كلاس خود را بعنوان يك پارامتر انتخاب مي كند . بعنوان مثال ، روايت بعدي از
()Box به يك شي ئ امكان داده تا آغازگر ديگري باشد :

+ // Here/ Box allows one object to initialize another.
+ class Box {
+ double width;
+ double height;
+ double depth;
+
+ // construct clone of an object
+ Box(Box ob ){ // pass object to constructor
+ width = ob.width;
+ height = ob.height;
+ depth = ob.depth;
+ }
+
+ // constructor used when all dimensions specified
+ Box(double w/ double h/ double d ){
+ width = w;
+ height = h;
+ depth = d;
+ }
+
+ // constructor used when no dimensions specified
+ Box )({
+ width =- 1; // use- 1 to indicate
+ height =- 1; // an uninitialized
+ depth =- 1; // box
+ }
+
+ // constructor used when cube is created
+ Box(double len ){
+ width = height = depth
+ }
+
+ // compute and return volume
+ double volume )({
+ return width * height * depth;
+ }
+ }
+
+ class OverloadCons2 {
+ public static void main(String args[] ){
+ // create boxes using the various constructors
+ Box mybox1 = new Box(10/ 20/ 15);
+ Box mybox2 = new Box)(;
+ Box mycube = new Box(7);
+
+ Box myclone = new Box(mybox1);
+
+ double vol;
+
+ // get volume of first box
+ vol = mybox1.volume)(;
+ System.out.println("Volume of mybox1 is " + vol);
+
+ // get volume of second box
+ vol = mybox2.volume)(;
+ System.out.println("Volume of mybox2 is " + vol);
+
+ // get volume of cube
+ vol = mycube.volume)(;
+ System.out.println("Volume of cube is " + vol);
+
+ // get volume of clone
+ vol = myclone.volume)(;
+ System.out.println("Volume of clone is " + vol);
+ }
+ }

بعدا" خواهيد ديد كه وقتي شروع به ايجاد كلاسهاي خود مي نماييد، معمولا" براي
اينكه اجازه دهيم تا اشيائ بصورتي موثر و آسان ساخته شوند ، لازم است اشكال هاي سازنده را فراهم آوريم .

کيفيت مقاله :
عالی خوب متوسط ضعيف


نگاهي دقيق تر به گذر دادن آرگومانها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۰۷ مراجعه امروز
۴۳۲۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نگاهي دقيق تر به گذر دادن آرگومانها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۲۲ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

نگاهي دقيق تر به گذر دادن آرگومانها

در كل ، دو راه وجود دارد تا يك زبان كامپيوتري يك آرگومان را به يك زير
روال گذر دهد. اولين راه " فراخواني بوسيله مقدار "(call-by-value() است . اين
روش مقدار يك آرگومان را در پارامتر رسمي زير روال كپي مي كند . بنابراين
تغييراتي كه روي پارامتر زير روال اعمال مي شود ، تاثيري بر آرگوماني كه براي
فراخواني آن استفاده شده نخواهد داشت . دومين راهي كه يك آرگومان مي تواند گذر
كند " فراخواني بوسيله ارجاع "(call-by-reference() است . در اين روش ، ارجاع
به يك آرگومان ( نه مقدار آن آرگومان ) به پارامتر گذر داده مي شود . داخل زير
روال از اين ارجاع براي دسترسي به آرگومان واقعي مشخص شده در فراخواني استفاده
مي شود . اين بدان معني است كه تغييرات اعمال شده روي پارامتر ، روي آرگوماني
كه براي فراخواني زير روال استفاده شده ، تاثير خواهد داشت . خواهيد ديد كه
جاوا از هر دو روش برحسب اينكه چه چيزي گذر كرده باشد ، استفاده مي كند .
در جاوا ، وقتي يك نوع ساده را به يك روش گذر مي دهيد ، اين نوع بوسيله
مقدارش گذر ميكند . بنابراين ، آنچه براي پارامتري كه آرگومان را دريافت ميكند
اتفاق بيفتد هيچ تاثيري در خارج از روش نخواهد داشت . بعنوان مثال ، برنامه
بعدي را در نظر بگيريد :

+ // Simple types are passed by value.
+ class Test {
+ void meth(int i/ int j ){
+ i *= 2;
+ j /= 2;
+ }
+ }
+
+ class CallByValue {
+ public static void main(String args[] ){
+ Test ob = new Test)(;
+ int a = 15/ b = 20;
+
+ System.out.println("a and b before call :" +
+ a + " " + b);
+
+ ob.meth(a/ b);
+
+ System.out.println("a and b after call :" +
+ a + " " + b);
+ }
+ }

خروجي برنامه فوق بقرار زير مي باشد :

a and b before call :15 20
a and b after call :15 20

بخوبي مشاهده مي كنيد كه عمليات اتفاق افتاده داخل ()meth هيچ تاثيري روي
مقادير aو bو در فراخواني استفاده شده اند، نخواهد داشت . در اينجا مقادير آنها
به 30 و 10 تغيير نمي يابد .
وقتي يك شي ئ را به يك روش گذر مي دهيد ، شرايط بطور مهيجي تغيير مي كند
زيرا اشيائ بوسيله ارجاعشان گذر داده مي شوند . بياد آوريد كه وقتي يك متغير
از يك نوع كلاس ايجاد مي كنيد ، شما فقط يك ارجاع به شي ئ خلق مي كنيد . بدين
ترتيب ، وقتي اين ارجاع را به يك روش گذر مي دهيد ، پارامتري كه آن را دريافت
مي كند . بهمان شي ئ ارجاع مي كند كه توسط آرگومان به آن ارجاع شده بود . اين
بدان معني است كه اشيائ با استفاده از طريقه " فراخواني بوسيله ارجاع " به
روشها گذر داده مي شوند. تغييرات اشيائ داخل روش سبب تغيير شيئي است كه بعنوان
يك آرگومان استفاده شده است . بعنوان مثال ، برنامه بعدي را در نظر بگيريد :

+ // Objects are passed by reference.
+
+ class Test {
+ int a/ b;
+
+ Test(int i/ int j ){
+ a = i;
+ b = j;
+ }
+
+ // pass an object
+ void meth(Test o ){
+ o.a *= 2;
+ o.b /= 2;
+ }
+ }
+
+ class CallByRef {
+ public static void main(String args[] ){
+ Test ob = new Test(15/ 20);
+
+ System.out.println("ob.a and ob.b before call :" +
+ ob.a + " " + ob.b);
+
+ ob.meth(ob);
+
+ System.out.println("ob.a and ob.b after call :" +
+ ob.a + " " + ob.b);

برنامه فوق ، خروجي زير را توليد مي كند :

ob.a and ob.b before call :15 20
ob.a and ob.b after call :30 10

همانطوريكه مي بينيد ، در اين حالت ، اعمال داخل ()meth ، شيئي را كه بعنوان
يك آرگومان استفاده شده تحت تاثير قرار داده است .
يك نكته جالب توجه اينكه وقتي يك ارجاع شي ئ به يك روش گذر داده مي شود، خود
ارجاع از طريق " فراخواني بوسيله مقدار " گذر داده مي شود . اما چون مقداري كه
بايد گذر داده شود خودش به يك شي ئ ارجاع مي كند ، كپي آن مقدار همچنان به همان
شي ئ ارجاع مي كند كه آرگومان مربوطه ارجاع مي كند .
ياد آوري : وقتي يك نوع ساده به يك روش گذر داده ميشود اينكار توسط " فراخواني
بوسيله مقدار " انجام ميگيرد. اشيائتوسط " فراخواني بوسيله ارجاع "
گذر داده مي شوند .

برگرداندن اشيائ
يك روش قادر است هر نوع داده شامل انواع كلاسي كه ايجاد ميكنيد را برگرداند.
بعنوان مثال ، در برنامه بعدي روش ()incrByTen يك شي ئ را برمي گرداند كه در آن
مقدار a ده واحد بزرگتر از مقدار آن در شي ئ فراخواننده است .

+ // Returning an object.
+ class Test {
+ int a;
+
+ Test(int i ){
+ a = i;
+ }
+
+ Test incrByTen )({
+ Test temp = new Test(a+10);
+ return temp;
+ }
+ }
+
+ class RetOb {
+ public static void main(String args[] ){
+ Test ob1 = new Test(2);
+ Test ob2;
+ ob2 = ob1.incrByTen)(;
+ System.out.println("ob1.a :" + ob1.a);
+ System.out.println("ob2.a :" + ob2.a);
+
+ ob2 = ob2.incrByTen)(;
+ System.out.println("ob2.a after second increase :"
+ + ob2.a);
+ }
+ }

خروجي برنامه فوق بقرار زير مي باشد :

ob1.a :2
ob2.a :12
ob2.a after second increase :22

همانطوريكه مشاهده مي كنيد ، هر بار كه ()incrByTen فراخوانده مي شود ، يك
شي ئ جديد توليد شده و يك ارجاع به آن شي ئ جديد به روال فراخواننده برگردان
مي شود .
مثال قبلي يك نكته مهم ديگر را نشان ميدهد : از آنجاييكه كليه اشيائ بصورت
پويا و با استفاده از new تخصيص مي يابند ، نگراني راجع به شيئي كه خارج از
قلمرو برود نخواهيد داشت ، زيرا در اين صورت روشي كه شي ئ درآن ايجاد شده پايان
خواهد گرفت . يك شي ئ ماداميكه از جايي در برنامه شما ارجاعي به آن وجود داشته
باشد ، زنده خواهد ماند . وقتي كه ارجاعي به آن شي ئ وجود نداشته باشد ، دفعه مرمت خواهد شد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


جادوي جاوا كدهاي بايتي The Byte codes ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۱۰ مراجعه امروز
۴۳۲۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
جادوي جاوا كدهاي بايتي The Byte codes
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۱۷۴ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

جادوي جاوا كدهاي بايتي The Byte codes

كليد اصلي جادوي جاوا براي حل مشكل امنيت و قابليت حمل در اين است كه خروجي
يك كامپايلر جاوا، كدهاي قابل اجرا نيستند، بلكه كدهاي بايتي هستند . كد بايتي
يك مجموعه كاملا" بهينه شده از دستورالعمل هايي است كه براي اجرا توسط يك ماشين
مجازي (Virtual Machine) طراحي شده كه معادل سيستم حين اجراي (run-time) جاوا
باشد . يعني سيستم حين اجراي جاوا يك مفسر (interpreter) براي كد بايتي است .
اين امر ممكن است تا حدي سبب شگفتي شود. همانطوريكه اطلاع داريد C++ به كد قابل
اجرا كامپايل مي شود . در حقيقت اكثر زبانهاي برنامه نويسي مدرن طوري طراحي
شده اند كه قابل كامپايل نه قابل تفسير باشند و اين امر بلحاظ مسائل اجرايي
است .اما اين واقعيت كه برنامه هاي جاوا قابل تفسير شدن است به حل مشكلات پيوسته
با بارگذاري برنامه ها روي اينترنت كمك مي كند . دليل آن روشن است .
جاوا بگونه اي طراحي شده تا يك زبان قابل تفسير باشد. از آنجاييكه برنامه هاي
جاوا قبل از آنكه قابل كامپايل باشند قابل تفسير هستند، امكان استفاده از آنها
در طيف گسترده اي از محيط ها وجود دارد . دليل آن هم بسيار روشن است . فقط كافي
است تا سيستم حين اجراي جاوا براي هر يك از محيط ها اجرا گردد . هنگاميكه بسته
نرم افزاري حين اجرا براي يك سيستم خاص موجود باشد ، برنامه جاوا روي آن سيستم
قابل اجرا خواهد شد . بياد داشته باشيد كه اگر چه جزئيات سيستم حين اجراي جاوا
از يك محيط تا محيط ديگر متفاوت است ، اما همه آنها يك كد بايتي جاوا را تفسير
مي كنند . اگر جاوا يك زبان قابل كامپايل مي بود ، آنگاه براي هر يك از انواع cpu
متصل به اينترنت ، بايد روايتهاي مختلفي از جاوا نوشته مي شد . اين راه حل
چندان قابل انطباق نيست .بنابراين "تفسير" راحتترين شيوه براي ايجاد برنامه هاي
واقعا" قابل حمل است .
اين واقعيت كه جاوا يك زبان قابل تفسيراست ، به مسئله امنيت هم كمك ميكند.
از آنجايي كه اجراي هر يك برنامه هاي جاوا تحت كنترل سيستم حين اجرا انجام شده
سيستم فوق مي تواند برنامه را دربرگرفته و مانع توليد اثرات جانبي خارج از
سيستم گردد . همانطوريكه خواهيد ديد ، مسئله امنيت نيز توسط محدوديت هاي خاصي
كه در زبان جاوا وجود دارد اعمال خواهد شد .
هنگاميكه يك برنامه تفسير ميشود، معمولا" كندتر از زماني كه به كدهاي اجرايي
كامپايل شود ، اجرا خواهد شد . اما در مورد جاوا اين تفاوت در زمان اجرا چندان
زياد نيست .استفاده از كد بايتي امكان اجراي سريعتر برنامه هارا بوجود مي آورد.
يك نكته ديگر : اگر چه جاوا طوري طراحي شده تا تفسير شود ، اما محدوديتي
براي كامپايل كدهاي بايتي آن به كدهاي معمولي وجود ندارد . حتي اگر كامپايل
پويا به كدهاي بايتي اعمال شود ، همچنان جنبه هاي امنيتي و قابليت حمل آن محفوظ
مي ماند ، زيرا سيستم حين اجرا همچنان درگير محيط اجرايي مي ماند . بسياري از
محيط هاي حين اجراي جاوا اين روش " درست در زمان "(just in time() كامپايل
نمودن كدهاي بايتي به كدهاي معمولي را مورد استفاده قرار مي دهند . چنين عملكردي قابل رقابت با C++ مي باشند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


خود فراخواني يا برگشت پذيري Recursion ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۱۳ مراجعه امروز
۴۳۲۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
خود فراخواني يا برگشت پذيري Recursion
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۴۴ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

خود فراخواني يا برگشت پذيري Recursion

جاوا از خود فراخواني پشتيباني مي كند . خود فراخواني پردازشي است كه در آن
چيزي بر حسب خودش تعريف شود . در ارتباط با برنامه نويسي جاوا ، خود فراخواني
خصلتي است كه به يك روش امكان فراخواني خودش را مي دهد . روشي كه خودش را
فراخواني مي كند موسوم به " خود فراخوانده " يا برگشت پذير (recursive) است .
مثال كلاسيك براي خود فراخواني محاسبه فاكتوريل يك رقم است . فاكتوريل يك
عدد N عبارت است از حاصلضرب كليه اعداد از 1تا Nا . بعنوان مثال فاكتوريل 3
معادل 1x2x3 يا عدد 6 است . در زير نشان داده ايم چگونه مي توان با استفاده از
يك روش خود فراخوان ، فاكتوريل را محاسبه نمود :

+ // A simple example of recursion.
+ class Factorial {
+ // this is a recursive function
+ int fact(int n ){
+ int result;
+
+ if(n==1 )return 1;
+ result = face(n-1 )* n;
+ return result;
+ }
+ }
+
+ class Recursion {
+ public static void mane(String args[] ){
+ Factorial f = new Factorial)(;
+
+ System.out.println("Factorial of 3 is " + f.face(3));
+ System.out.println("Factorial of 4 is " + f.face(4));
+ System.out.println("Factorial of 5 is " + f.face(5));
+ }
+ }

خروجي اين برنامه را در زير نشان داده ايم :

Factorial of 3 is 6
Factorial of 4 is 24
Factorial of 5 is 120

اگر با روشهاي خود فراخوان ناآشنا باشيد ، آنگاه عمليات ()fact ممكن است تا
حدي بنظرتان گيج كننده باشد . طرز كار آن را توضيح داده ايم . وقتي ()fact با
يك آرگومان 1 فراخواني مي شود ، تابع مقدار 1 را برگردان مي كند ، در غير اين
صورت اين تابع حاصلضرب *n(َn-1)fact را برگردان ميكند. براي ارزيابي اين غبارت
()fact را با n-1 فراخواني مي كنيم . اين پردازش آنقدر تكرار مي شود تا n مساوي 1
باشد و فراخواني هاي روش ، شروع به برگردان نمايند .
براي درك بهتر نحوه كار روش ()fact اجازه دهيد يك مثال كوتاه بياوريم .
وقتي فاكتوريل 3 را محاسبه مي كنيد، اولين فراخواني ()fact سبب دومين فراخواني
با آرگومان 2 مي شود . اين فراخواني سبب مي شود تا ()fact براي سومين بار با
آرگومان 1 فراخواني شود . اين فراخواني مقدار 1 را برگردان مي كند كه بعدا" در 2
( مقدار n در فراخواني دوم ) ضرب مي شود. اين نتيجه ( يعني عدد 2 ) آنگاه به
فراخواني اصلي ()fact برگردان شده و در 3 ( مقدار اصلي n ) ضرب مي شود . جواب
كل عدد 6 است . اگر دستورات ()println را در ()fact جايگذاري نماييد بسيار
جالب خواهد شد چون نشان خواهد داد كه هر فراخواني در چه سطحي است و جوابهاي
مياني چه مقاديري هستند .
وقتي يك روش خودش را فراخواني مي كند ، حافظه پشته ها به متغيرهاي محلي و
پارامترهاي جديد تخصيص داده مي شود و كد روش نيز از همان اول با همين متغيرهاي
جديد اجرا مي شود . يك خود فراخواني ، كپي جديدي از روش ايجاد نمي كند ، بلكه
فقط آرگومانها جديد هستند . همچنانكه هر خود فراخواني مقداري را برمي گرداند
متغيرهاي محلي و پارامترهاي قديمي از روي پشته برداشته مي شوند ، و اجرا در
نقطه اي از فراخواني داخل روش از سر گرفته خواهد شد . روشهاي خود فراخوان را
مي توان تلسكوپي ناميد كه باز و بسته مي شوند .
روايتهاي خود فراخواني بسياري از روالها ، ممكن است كمي كندتر از روايتهاي
تكراري اجرا شوند و اين بخاطر افزوده شدن انباشت فراخوانهاي تابع اضافي است .
بسياري از خود فراخواني ها به يك روش ممكن است سبب سر ريز شدن يك پشته شوند .
از آنجاييكه ذخيره سازي پارامترها و متغيرهاي محلي روي پشته انجام مي گيرد و
هر فراخواني جديد يك كپي جديد از اين متغيرها بوجود مي آورد ، اين امكان وجود
دارد كه پشته خراب شود . اگر چنين اتفاقي بيفتد ، سيستم حين اجراي جاوا يك
استثنائ را بوجود مي آورد. اما احتمالا" نگراني درباره اين مسائل نخواهيد داشت
مگر آنكه يك روال خود فراخواني از حالت عادي خارج شود .
مهمترين مزيت روشهاي خود فراخوان اين است كه از آنها براي ايجاد روايتهاي
ساده تر و روشنتر از الگوريتمهايي كه مي توان با رابطه هاي تكراري هم ايجاد نمود
استفاده مي شود . بعنوان مثال ، الگوريتم دسته بندي Quicksort در روش تكراري
(iterative) بسيار بسختي پياده سازي مي شود . برخي مشكلات ، بخصوص مشكلات مربوط
به Ai بنظر مي رسد كه نيازمند راه حلهاي خود فراخواني هستند. در نهايت ، اينكه
بسياري از مردم شيوه هاي خود فراخواني را بهتر از شيوه هاي تكراري درك مي كنند .
هنگام نوشتن روشهاي خود فراخوان ، بايد يك دستور if داشته باشيد كه روش را
مجبور كند تا بدون اجراي فراخوان خود فراخوان ، برگردان نمايد . اگر اينكار را
انجام ندهيد ، هر بار كه روش را فراخواني كنيد ، هرگز برگردان نخواهد كرد .
هنگام كار با خود فراخواني ،اين يكي از خطاهاي رايج است .از دستورات ()println
هنگام توسعه برنامه بطور آزادانه استفاده كنيد تا به شما نشان دهد چه چيزي در
حال اتفاق افتادن است و اگر اشتباهي پيش آمده ، بتوانيد اجرا را متوقف سازيد .
دراينجا مثالي از خودفراخواني را مشاهده كنيد. روش خودفراخواني ()printArray
اولين عنصر i در آرايه values را چاپ مي كند :

+ // Another example that uses recursion.
+
+ class RecTest {
+ int values[];
+
+ RecTest(int i ){
+ values = new int[i];
+ }
+
+ // display array -- recursivaly
+ void printArray(int i ){
+ if(i==0 )return;
+ else printArray(i-1);
+ System.out.println("[" +( i-1 )+ "] " + values[i-1]);
+ }
+ }
+
+ class Recursion2 {
+ public static void mane(String args[] ){
+ RecTest ob = new RecTest(10);
+ int i;
+
+ for(i=0; i<10; i++ )ob.values[i] = i;
+
+ ob.printArray(10);
+ }
+ }

اين برنامه خروجي زير را توليد مي كند :

[0] 0
[1] 1
[2] 2
[3] 3
[4] 4
[5] 5
[6] 6

کيفيت مقاله :
عالی خوب متوسط ضعيف


تعريف كنترل دسترسي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۱۶ مراجعه امروز
۴۳۳۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تعريف كنترل دسترسي
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۲۰ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

تعريف كنترل دسترسي

مي دانيد كه كپسول سازي ، داده ها را با كدي كه با آن داده ها سر و كار دارد
پيوند ميدهد. اما كپسول سازي يك حصلت بسيار مهم ديگر هم دارد: كنترل دستيابي .
(access control) . از طريق كپسول سازي ، مي توانيد كنترل كنيد چه بخشهايي از
يك برنامه مي توانند به اعضائ يك كلاس دسترسي داشته باشند . با كنترل نمودن
دستيابي ، مي توانيد از سوئ استفاده جلوگيري نماييد. بعنوان مثال ، اجازه دادن
براي دسترسي به داده ها فقط از طريق يك مجموعه خوش تعريف از روشها ، مانع سوئ
استفاده از آن داده ها مي شود . بنابراين ، وقتي اين كار بخوبي پياده سازي شود
يك كلاس يك " جعبه سياه "(black box() توليد مي كند كه امكان دارد مورد استفاده
قرار گيرد، اما عملكرد دروني آن جعبه در معرض دسترسي ديگران قرارنخواهد داشت .
اما كلاسهايي كه قبلا" تعريف شده اند اين هدف را بطور كامل برآورده نمي سازند .
بعنوان مثال ، كلاس stack را درنظر بگيريد. اگرچه اين امر حقيقت دارد كه روشهاي
()push و ()pop رابطهاي كنترل شده اي به پشته هستند ، اما اين رابط تاكيد نشده
است . يعني اين امكان وجود دارد كه بخش ديگري از برنامه اين روشها را دور زده
و مستقيما" به پشته دسترسي يابد . البته اين خاصيت در دستان افراد ناجور، سبب
مشكلاتي خواهد شد . در اين قسمت مكانيسمي به شما معرفي مي كنيم كه توسط آن با
دقت تمام دسترسي به اعضائ مختلف يك كلاس را كنترل مي كنيد .
چگونگي دسترسي به يك عضو توسط " توصيفگر دسترسي "(access specifier() كه
اعلان آن عضو را تغيير ميدهد، تعريف خواهد شد. جاوا مجموعه غني از " توصيفگرهاي
دسترسي " را عرضه مي كند . برخي جوانب كنترل دسترسي بشدت با وراثت و بسته ها
(packages) مرتبط اند . ( يك بسته ضرورتا" يك نوع گروه بندي از كلاسها است . )
اگر يكبار بنيادهاي كنترل دسترسي را فرا گيريد ، آنگاه بقيه مطالب را براحتي
درك خواهيد نمود .
توصيفگرهاي دسترسي در جاوا public، privateو protectedو هستند. جاوا همچنين
يك سطح دسترسي پيش فرض را تعريف كرده است . protected زماني استفاده مي شود كه
وراثت وجود داشته باشد .
با تعريف publicو privateو شروع مي كنيم . اگر يك عضو كلاسي را با توصيفگر public
توصيف مي كنيم ، آن عضو توسط هر كد ديگري در برنامه قابل دسترسي خواهد
بود . اگر يك عضو كلاسي را بعنوان private مشخص مي كنيم ، پس آن عضو فقط توسط
ساير اعضائ همان كلاس قابل دسترسي است . اكنون مي فهميد كه چرا هميشه قبل از
()main مشخصگر public قرار مي گرفت . اين روش توسط كدي خارج از برنامه يعني
توسط سيستم حين اجراي جاوا فراخواني خواهد شد . اگر هيچ توصيفگر دسترسي
استفاده نشده باشد ، آنگاه بصورت پيش فرض عضو يك كلاس ، داخل بسته مربوط به خود public
است ، اما خارج از بسته مربوط به خود قابل دسترسي نمي باشد .
در كلاسهايي كه تاكنون توسعه داده ايم ، كليه اعضائ يك كلاس از حالت دسترسي
پيش فرض كه ضرورتا" همان public است ، استفاده كرده اند . اما هميشه اين حالت
مطلوب شما نيست . معمولا" مايليد تا دسترسي به اعضائ داده اي يك كلاس را محدود
نماييد و فقط از طريق برخي روشها امكان پذير سازيد .
همچنين ، شرايطي وجود دارند كه مايليد روشهايي را كه براي يك كلاس اختصاصي
هستند ، تعريف نماييد .
يك توصيفگر دسترسي قبل از ساير مشخصات نوع عضو يك كلاس قرار مي گيرد . يعني
كه اين توصيفگر بايد شروع كننده دستور اعلان يك عضو باشد ، يك مثال را مشاهده
مي كنيد :

+ public int i;
+ private bouble j;
+
+ private int myMethod(int a/ char b ){ //...

براي درك تاثيرات دسترسي عمومي (public) و اختصاصي (private) برنامه بعدي
را در نظر بگيريد :

+ /* This program demonstrates the difference between
+ public and private.
+ */
+ class Test {
+ int a; // default access
+ public int b; // public access
+ private int c; // private access
+
+ // methods to access c
+ void setc(int i ){ // set c's value
+ c = i;
+ }
+ int getc )({ // get c's value
+ return c;
+ }
+ }
+
+ class AccessTest {
+ public static void main(String args[] ){
+ Test ob = new Test)(;
+
+ // These are OK/ a and b may be accessed directly
+ ob.a = 10;
+ ob.b = 20;
+
+ // This is not OK and will cause an error
+ // ob.c = 100; // Error!
+
+ // You must access c through its methods
+ ob.setc(100); // OK
+
+ System.out.println("a/ b/ and c :" + ob.a + " " +
+ ob.b + " " + ob.getc))(;
+ }
+ }

همانطوريكه مشاهده مي كنيد ، داخل كلاس Test، a، از دسترسي پيش فرض استفاده
مي كند كه دراين مثال مطابق مشخص نمودن public است .b بطور صريح بعنوان public
مشخص شده است . c داراي دسترسي اختصاصي است . بدان معني كه اين عضو توسط كدهاي
خارج از كلاس قابل دسترسي نخواهد بود. همچنين در داخل كلاس Access Test، نميتوان c
را بصورت مستقيم مورد استفاده قرار داد . اين عضو را بايد از طريق روش هاي
عمومي اش يعني ()setcو()getc) مورد دسترسي قرار داد. اگر نشانه صحيح (comment)
را ابتداي خط تغيير مكان دهيد :

+ // ob.c = 100; // Error!

آنگاه نمي توانيد اين برنامه را كامپايل كنيد كه علت آن هم نقض دسترسي
(access violation) است .
براي اينكه با جنبه هاي عملي كنترل دسترسي در مثالهاي عملي تر آشنا شويد
روايت توسعه يافته از كلاس stack را در برنامه زير مشاهده فرماييد :

+ // This class defines an integer stack that can hold 10 values.
+ class Stack {
+ /* Now/ both stck and tos are private .This means
+ that they cannot be accidentally or maliciously
+ altered in a way that would be harmful to the stack.
+ */
+ private int stck[] = new int[10];
+ private int tos;
+
+ // Initialize top-of-stack
+ Stack )({
+ tos =- 1;
+ }
+
+ // Push an item onto the stack
+ void push(int item ){
+ if(tos==9)
+ System.out.println("Stack is full.");
+ else
+ stck[++tos] = item;
+ }
+
+ // Pop an item frome the stack
+ int pop )({
+ if(tos < 0 ){
+ System.out.println("Stack underflow.");
+ return 0;
+ }
+ else
+ return stck[tos--];
+ }
+ }

همانطوريكه مشاهده مي كنيد ، هم stck كه پشته را نگهداري مي كند و هم tos
كه نمايه بالاي پشته است بعنوان private مشخص شده اند . اين بدان معني است كه
آنها قابل دسترسي و جايگزيني جزئ از طريق ()push و ()pop نيستند . بعنوان مثال
اختصاصي نمودن tos ساير بخشهاي برنامه اتان را در مقابل قرار دادن غير عمدي
مقداري كه فراتر از انتهاي آرايه stck باشد ، محافظت مي كند .
برنامه بعدي نشاندهنده كلاس توسعه يافته stack است .سعي كنيد خطوط غيرتوضيحي
را حركت دهيد تا بخود اثبات كنيد كه اعضائstckو tosو در حقيقت غير قابل دسترسي
هستند .

+ class TestStack {
+ public static void main(String args[] ){
+ Stack mystack1 = new Stack)(;
+ Stack mystack2 = new Stack)(;
+
+ // push some numbers onto the stack
+ for(int i=0; i<10; i++ )mystack1.push(i);
+ for(int i=10; i<20; i++ )mystack2.push(i);
+
+ // pop those numbers off the stack
+ System.out.println("Stack in mystack1:");
+ for(int i=0; i<10; i++)
+ System.out.println(mystack1.pop))(;
+ System.out.println("Stack in mystack2:");
+ for(int i=0; i<10; i++)
+ System.out.println(mystack2.pop))(;
+
+ // these statements are not legal
+
+ // mystack1.tos =- 2;
+ // mystack2.stck[3] = 100;
+ }
+ }

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


درك مفهوم static ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۱۹ مراجعه امروز
۴۳۳۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
درك مفهوم static
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۶۰ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

درك مفهوم static

شرايطي وجود دارد كه مايليد يك عضو كلاس را طوري تعريف كنيد كه مستقل از هر
شي ئ آن كلاس مورد استفاده قرار گيرد. بطور معمول يك عضو كلاس بايد فقط همراه يك
شي ئ از همان كلاس مورد دسترسي قرار گيرد . اما ، اين امكان وجود دارد كه عضوي
را ايجاد كنيم كه توسط خودش استفاده شود ، بدون اينكه به يك نمونه مشخص ارجاع
نمايد . براي ايجاد چنين عضوي ، قبل از اعلان آن واژه كليدي static را قرار
دهيد . وقتي يك عضو بعنوان static اعلان مي شود ، مي توان قبل از ايجاد هر شي ئ
از آن كلاس ، و بدون ارجاعي به هيچيك از اشيائ ، آن را مورد استفاده قرار داد .
مي توانيد هم روشها و هم متغيرها را بعنوان static اعلان نماييد. رايجترين مثال
براي يك عضو static ، همان ()main است . ()main بعنوان static اعلان مي شود چون
بايد قبل از وجود هر نوع شيئي فراخواني شود .
متغيرهاي نمونه اعلان شده بعنوان static ضرورتا" متغيرهاي سراسري هستند .
هنگاميكه اشيائ كلاس آن اعلان مي شوند ، هيچ كپي از متغير static ساخته نمي شود.
در عوض ، كليه نمونه هاي آن كلاس همان متغير static را باشتراك مي گذارند .
روشهاي اعلان شده بعنوان static داراي چندين محدوديت هستند :
ؤ آنها فقط ساير روشهاي static را فراخواني مي كنند .
ؤ آنها فقط به داده هاي static دسترسي دارند .
ؤ آنها بهيچ وجه امكان ارجاع به thisو superو را ندارند .
اگر لازم است محاسباتي انجام دهيد تا متغيرهاي static را مقدار دهي اوليه
نماييد ، مي توانيد يك بلوك static اعلان نماييد كه فقط يكبار آنهم زماني كه
كلاس براي اولين مرتبه بارگذاري مي شود ، اجرا گردد . مثال بعدي كلاسي را نشان
ميدهد كه يك روش static برخي متغيرهاي static و يك بلوك مقداردهي اوليه static
دارد :

+ // Demonstrate static variables/ methods/ and blocks.
+ class UseStatic {
+ static int a = 3;
+ static int b;
+
+ static void meth(int x ){
+ System.out.println("x = " + x);
+ System.out.println("a = " + a);
+ System.out.println("b = " + b);
+ }
+
+ static {
+ System.out.println("Static block initialized.");
+ b = a * 4;
+ }
+
+ public static void main(String args[] ){
+ meth(42);
+ }
+ }

بمحض اينكه كلاس usestatic بارگذاري شود ، كليه دستورات static اجرا ميشوند.
ابتدا a برابر 3 قرار گرفته ، سپس بلوك static اجرا شده ( يك پيام را چاپ
مي كند ) و در نهايت مقدار a*4 يا 12در bر بعنوان مقدار اوليه نهاده مي شود .
سپس ()main فراخواني مي شود كه ()math را فراخواني نموده و مقدار 42 را به x
مي گذراند . سه دستور ()println به دو متغير static يعني aو bو و همچنين به
متغير محلي x ارجاع مي كنند .
يادآوري : ارجاع به هر يك از متغيرهاي نمونه داخل يك روش static غيرمجاز است .
خروجي برنامه فوق بشرح زير مي باشد :

Static block initialized.
x = 42
a = 3
b = 12

خارج از كلاسي كه تعريف شده اند ، روشها و متغيرهاي static را مي توان مستقل
از هر نوع شي ئ مورد استفاده قرار داد . براي انجام اينكار ، فقط كافي است نام
كلاس را با يك عملگر نقطه اي بعد از آن مشخص نماييد . بعنوان مثال ، اگر بخواهيد
يك روش static را از خارج كلاس مربوطه فراخواني كنيد ، با استفاده از شكل عمومي
زير اينكار را انجام مي دهيد :

classname.method)(

در اينجا classname نام كلاسي است كه روش static در آن اعلان شده است . همان
طوري كه مي توانيد ببينيد ، اين شكل بندي مشابه همان است كه براي فراخواني
روش هاي غيرstatic از طريق متغيرهاي ارجاع شي ئ انجام ميگرفت . يك متغير static
را نيز مي توان با همان روش با استفاده از عملگر نقطه اي روي نام كلاس مورد
دسترسي قرار داد. اين روشي است كه جاوا بوسيله آن يك روايت كنترل شده از توابع
سراسري و متغيرهاي سراسري را پياده سازي مي كند .
در اينجا يك مثال وجود دارد . داخل ()main روش ()classname و متغير b كه static
هستند در خارج از كلاسهاي خود مورد دسترسي قرار مي گيرند .

+ class StaticDemo {
+ static int a = 42;
+ static int b = 99;
+ static void callme )({
+ System.out.println("a = " + a);
+ }
+ }
+
+ class StaticByName {
+ public static void main(String args[] ){
+ StaticDemo.callme)(;
+ System.out.println("b + " + StaticDemo.b);
+ }
+ }

خروجي اين برنامه بقرار زير خواهد بود :

کيفيت مقاله :
عالی خوب متوسط ضعيف


معرفي final ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۲۲ مراجعه امروز
۴۳۳۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
معرفي final
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۹۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

معرفي final

مي توان يك متغير را بعنوان final اعلان نمود . انجام اينكار محتوي آن متغير
را در مقابل اصلاحات و تغييرات محافظت مي كند. بدين ترتيب يك متغير final را در
همان زمان اعلان بايد مقدار دهي اوليه نماييد. ( final در اين حالت مشابه const
در زبان Cو C++و مي باشد . ) بعنوان مثال :

+ final int FILE_NEW = 1;
+ final int FILE_OPEN = 2;
+ final int FILE_SAVE = 3;
+ final int FILE_SAVEAS = 4;
+ final int FILE_QUIT = 5;

بخشهاي بعدي برنامه شما اكنون مي توانند از FILE-OEOPEN و غيره بعنوان
ثابت ها استفاده نمايند بدون اينكه نگراني درباره تغيير مقدار آن داشته باشند.
اين يك قرار داد رايج كد بندي است كه كليه شناسه هاي حروف بزرگ را براي
متغيرهاي final انتخاب نماييم . متغيرهاي اعلان شده بعنوان final حافظه اي را روي
مبناي هر نمونه (per-instance basic) اشغال نمي كنند. بنابراين يك متغير final
ضرورتا" يك ثابت است .
واژه كليدي final را مي توان براي روشها نيز بكار برد ، اما معني آن اساسا" از آن چيزي است كه براي متغيرها استفاده مي شود .

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از بلوكهاي كد Blocks of code ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۲۵ مراجعه امروز
۴۳۴۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از بلوكهاي كد Blocks of code
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۲۷ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از بلوكهاي كد Blocks of code

جاوا اين امكان را فراهم نموده تا دو يا چند دستور در بلوكهاي كد گرد آوري
شوند كه آنها را معمولاcode blocks " مي نامند . اينكار با محصور كردن دستورات
بين ابروهاي باز و بسته انجام مي گيرد. يكبار كه يك بلوك كد ايجاد مي شود، اين
بلوك كه تبديل به يك واحد منطقي شده و هر جايي كه يك دستور ساده بتوان استفاده
نمود، مورد استفاده قرار مي گيرد. بعنوان مثال ، يك بلوك ممكن است هدف دستورات if
و يا for جاوا باشد . دستور if زير را در نظر بگيريد :

+ if(x < y ){ // begin a block
+ x = y;
+ y = 0;
+ } // end of block

در اينجا اگر x كوچكتر از y باشد ، آنگاه هر دو دستور موجود در داخل بلوك
اجرا خواهند شد . بنابراين دو دستور داخل بلوك تشكيل يك واحد منطقي داده اند و
آنگاه اجراي يك دستور منوط به اجراي دستور ديگر خواهد بود . نكته كليدي در
اينجا اين است كه هر گاه لازم باشد دو يا چند دستور را بطور منطقي پيوند دهيد
توسط ايجاد يك بلوك اينكار را انجام مي دهيد .
به يك مثال ديگر نگاه كنيد. برنامه بعدي از يك بلوك كد بعنوان هدف (target)
يك حلقه for استفاده مي كند .

+ /*
+ Demonstrate a block of code.
+ Call this file "BlockTest.java"
+ */
+ class BlockTest {
+ public static void main(String args[] ){
+ int x/ y;
+ y = 20;
+ // the target of this loop is a block
+ for(x = 0; x<10; x++ ){
+ System.out.println("This is x :" + x);
+ System.out.println("This is y :" + y);
+ y = y - 2;
+ }
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

This is x:0
This is y:20
This is x:1
This is y:18
This is x:2
This is y:16
This is x:3
This is y:14
This is x:4
This is y:12
This is x:5
This is y:10
This is x:6
This is y:8
This is x:7
This is y:6
This is x:8
This is y:4
This is x:9
This is y:2

در اين حالت ، هدف حلقه for يك بلوك كد است نه يك دستور منفرد. بدين ترتيب
هر بار كه حلقه تكرار مي شود ، سه دستور داخل بلوك اجرا خواهد شد . اين حقيقت
در خروجي توليد شده توسط برنامه كاملا" هويداست .
همانگونه كه بعدا" خواهيد ديد، بلوكهاي كد داراي ويژگيها و كاربردهاي ديگري
هم هستند . اما دليل اصلي حضور آنها ايجاد واحدهاي منطقي و تفكيك ناپذير از باشد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


آرايه هاي دوباره ملاقات شده Arrays Revisited ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۲۸ مراجعه امروز
۴۳۴۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آرايه هاي دوباره ملاقات شده Arrays Revisited
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۸۲ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

آرايه هاي دوباره ملاقات شده Arrays Revisited

آرايه ها بعنوان اشيائ پياده سازي مي شوند . بهمين دليل ، يك خصلت ويژه وجود
دارد كه مي توانيد از مزيت آن استفاده نماييد . بطور اخص ، اندازه يك آرايه
يعني تعداد اعضايي كه يك آرايه ميتواند نگهداري نمايد را مي توان در متغير
نمونه length پيدا نمود . كليه آرايه ها اين متغير را دارند، و اين متغير هميشه
اندازه آرايه را نگهداري مي كند. در اينجا برنامه اي وجود دارد كه اين خاصيت را
نشان مي دهد :

+ // This program demonstrates the length array member.
+ class Length {
+ public static void main(String args[] ){
+ int a1[] = new int [10];
+ int a2[] = {3/ 5/ 7/ 1/ 8/ 99/ 44/- 10};
+ int a3[] = {4/ 3/ 2/ 1};
+
+ System.out.println("length of a1 is " + a1.length);
+ System.out.println("length of a2 is " + a2.length);
+ System.out.println("length of a3 is " + a3.length);

خروجي اين برنامه بقرار زير مي باشد :

length of a1 is 10
length of a2 is 8
length of a3 is 4

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

+ // Improved Stack class that uses the length array member.
+ class Stack {
+ private int stck[];
+ private int tos;
+
+ // allocate and initialize stack
+ Stack(int size ){
+ stck = new int[size];
+ tos =- 1;
+ }
+
+ // Push an item onto the stack
+ void push(int item ){
+ if(tos==stck.length-1 )// use length member
+ System.out.println("Stack is full.");
+ else
+ stck[++tos] = item;
+ }
+
+ // Pop an item from the stack
+ int pop )({
+ if(tos < 0 ){
+ System.out.println("Stack underflow.");
+ return 0;
+ }
+ else
+ return stck[tos--];
+ }
+ }
+
+ class TestStack2 {
+ public static void main(String args[] ){
+ Stack mystack1 = new Stack(5);
+ Stack mystack2 = new Stack(8);
+
+ // push some numbers onto the stack
+ for(int i=0; i<5; i++ )mystack1.push(i);
+ for(int i=0; i<5; i++ )mystack2.push(i);
+
+ // pop those numbers off the stack
+ System.out.println("Stack in mystack1:");
+ for(int i=0; i<5; i++)
+ System.out.println(mystack1.pop))(;
+
+ System.out.println("Stack in mystack2:");
+ for(int i=0; i<8; i++)
+ System.out.println(mystack2.pop))(;
+ }
+ }

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


كشف كلاس رشته اي (string) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۳۱ مراجعه امروز
۴۳۴۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كشف كلاس رشته اي (string)
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۸۶ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

كشف كلاس رشته اي (string)
string
احتمالا" رايجترين كلاس استفاده شده در كتابخانه كلاس جاوا مي باشد .
دليل روشن اين امر آن است كه رشته ها يكي ازبخشهاي خيلي مهم برنامه نويسي هستند.
اولين چيزي كه بايد درباره رشته ها درك كنيد اين است كه هر رشته اي كه بوجود
مي آوريد در واقع يك شي ئاز نوع string است .حتي ثابتهاي رشته (stringconstants)
بواقع اشيائ نوع string هستند . بعنوان مثال ، در دستور

+ System.out.println("This is a String/ too");

رشته "This is a string/ttoo" يك ثابت رشته string است . خوشبختانه ، جاوا
ثابت هاي رشته را بهمان روشي اداره ميكند كه زبانهاي كامپيوتري رشته هاي معمولي
را اداره مي كنند و بنابراين نگراني در اين زمينه نخواهيد داشت .
دومين مطلبي كه بايد درباره رشته ها درك كنيد اين است كه اشيائاز نوع string
غير قابل تغييرند. هربار كه يك شي ئ string ايجاد مي شود، محتوي آن تغييرناپذير
خواهد بود . اين امر بنظر خيلي محدود كننده است اما بدو دليل چنين نيست :
ؤ اگر مايليد تا يك رشته را تغيير دهيد، هميشه مي توانيد يك رشته جديد شامل
موارد تغيير داده شده بسازيد .
ؤ جاوا يك قرينه كلاس string ، تحت نام string Buffer تعرف نموده كه امكان
تغيير رشته ها را مي دهد ، بنابراين كليه عمليات مربوط به رشته هاي معمولي در
جاوا نيز در دسترس قرار مي گيرند .
رشته ها را بطرق گوناگون مي توان ساخت . ساده ترين راه ، استفاده از دستوري
مشابه دستور زير است :

+ String myString = "this is a test";

هر بار كه يك شي ئ string را ايجاد نماييد ، مي توانيد آن را در هر جايي كه
استفاده از يك رشته مجاز است ، بكار بريد . بعنوان مثال ، اين دستور كلمه my string
را نمايش مي دهد :

+ System.out.println(myString);

جاوا يك عملگر براي اشيائ string بصورت + تعريف كرده است . از اين عملگر
براي مسلسل كردن ( بهم پيوستن ) دو رشته استفاده مي شود . بعنوان مثال ، اين
دستور

+ String myString = "I" + " like " + "Java.";
mystring
"I like java."
+ //Demonstrating Strings.
+ class StringDemo {
+ public static void main(String args[] ){
+ String strOb1 = "First String";
+ String strOb2 = "Second String";
+ String strOb3 = strOb1 + " and " + strOb2;
+
+ System.out.println(strOb1);
+ System.out.println(strOb2);
+
+ System.out.println(strOb3);
+ }
+ }

خروجي توليد شده توسط اين برنامه بصورت زير مي باشد :

First String
Second String
First String and Second String

كلاس string دربرگيرنده چندين روش است كه مي توانيد از آنها استفاده نماييد.
در اينجا چند تا را بررسي مي كنيم . مي توانيد با استفاده از روش ()equals دو
رشته را از نظر مساوي بودن آزمايش نماييد . همچنين با فراخواني روش ()length
مي توانيد طول (length) يك رشته را بدست آوريد . و با فراخواني ()charAt
مي توانيد كاراكتر قرار گرفته در يك نمايه مشخص درون يك رشته را بدست آوريد .
اشكال عمومي اين سه روش بصورت زير مي باشند :

boolean equals( string object)
int length)(
char charAt( intindex)

در اينجا برنامه اي را مشاهده مي كنيد كه اين روشها را نشان مي دهد :

+ // Demonstrating some String methods.
+ class StringDemo2 {
+ public static void main(String args[] ){
+ String strOb1 = "First String";
+ String strOb2 = "Second String";
+ String strOb3 = strOb1;
+
+ System.out.println("Length of strOb1 :" +
+ strOb1.length))(;
+
+ System.out.println("Char at index 3 in strOb1 :" +
+ strOb1.charAt(3));
+
+ if(strOb1.equals(strOb2))
+ System.out.println("strOb1 == strOb2");
+ else
+ System.out.println("strOb1 != strOb2");
+
+ if(strOb1.equals(strOb3))
+ System.out.println("strOb1 == strOb3");
+ else
+ System.out.println("strOb1 != strOb3");
+ }
+ }

اين برنامه خروجي زير را توليد مي كند :

Length of strOb1 :12
Char at index 3 in strOb1 :s
strOb1 != strOb2
strOb1 == strOb3

البته ميتوانيد آرايه هايي از رشته ها داشته باشيد، درست همانطوريكه ميتوانيد
آرايه هايي از هر نوع شي ئ داشته باشيد . بعنوان مثال :

    + // Demonstrate String arrays.
+ class StringDemo3 {
+   public static void main(String args[] ){
+     String str[] = { "one"/ "two"/ "three" };
+
+     for(int i=0; i
  +       System.out.println("str[" + i + "] :" +
+                           str[i]);
+   }
+ }

خروجي اين برنامه بقرار زير مي باشد :

str[0] :one
str[1] :two
str[2] :three

مي در غالب برنامه هاي جاوا دارند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از آرگونهاي خط فرمان (Command-Line) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۳۴ مراجعه امروز
۴۳۵۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از آرگونهاي خط فرمان (Command-Line)
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۷۳ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از آرگونهاي خط فرمان (Command-Line)

گاهي مي خواهيد اطلاعاتي را به يك برنامه در حال اجرا ، بگذرانيد . اين كار
با گذراندن آرگومانهاي خط فرمان به روش ()main انجام مي گيرد . يك آرگومان خط
فرمان اطلاعاتي است كه مستقيما" بعد از نام برنامه روي خط فرماني كه اين برنامه
اجرا مي شود ، قرار مي گيرد . دسترسي به آرگومانهاي خط فرمان داخل يك برنامه
جاوا بسيار ساده است . آنها در آرايه هاي string گذر كرده و در روش ()main به
عنوان رشته ذخيره شده اند. بعنوان مثال ، برنامه بعدي كليه آرگومانهاي خط فرمان
كه با اين برنامه فراخواني شده را نمايش مي دهد :

   + // display all command-line arguments.
+ class CommandLine {
+   public static void main(String args[] ){
+     for(int i=0; i
  +       System.out.println("args[" + i + "] :" +
+                           args[i]);
+   }
+ }

سعي كنيد اين برنامه را بصورت زير ، اجرا كنيد :

+ java CommandLine this is a test 100- 1

پس از اجراي اين برنامه ، خروجي زير را مشاهده مي كنيد :

args[0] :this
args[1] :is
args[2] :a
args[3] :test
args[4] :100
args[5]- :1

يادآوري : كليه آرگومانهاي خط فرمان بعنوان رشته ها گذر داده مي شوند. شما بايد ادير عددي را بصورت دستي به اشكال داخلي شان تبديل نماييد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


وراثت inheritance ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۳۷ مراجعه امروز
۴۳۵۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
وراثت inheritance
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۶۸ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

وراثت inheritance

وراثت را يكي از سنگ بناهاي برنامه نويسي شي ئ گراست ، زيرا امكان ايجاد
طبقه بنديهاي سلسله مراتبي را بوجود مي آورد . با استفاده از وراثت ، مي توانيد
يك كلاس عمومي بسازيد كه ويژگيهاي مشترك يك مجموعه اقلام بهم مرتبط را تعريف
نمايد . اين كلاس بعدا" ممكن است توسط ساير كلاسها بارث برده شده و هر كلاس ارث
برنده چيزهايي را كه منحصر بفرد خودش باشد به آن اضافه نمايد . در روش شناسي
جاوا ، كلاسي كه بارث برده مي شود را كلاس بالا (superclass) مي نامند . كلاسي كه
عمل ارث بري را انجام داده و ارث برده است را زير كلاس (subclass) مي نامند .
بنابراين ، يك " زير كلاس " روايت تخصصي تر و مشخص تر از يك " كلاس بالا " است .
زير كلاس ، كليه متغيرهاي نمونه و روشهاي توصيف شده توسط كلاس بالا را بارث برده و منحصر بفرد خود را نيز اضافه مي كند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مباني وراثت ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۴۰ مراجعه امروز
۴۳۵۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مباني وراثت
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۴۸ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

مباني وراثت

براي ارث بردن از يك كلاس ، خيلي ساده كافيست تعريف يك كلاس را با استفاده از
واژه كليدي extends در كلاس ديگري قرار دهيد . براي فهم كامل اين مطلب ، مثال
ساده اي را نشان مي دهيم . برنامه بعدي يك كلاس بالا تحت نام A و يك زير كلاس موسوم
به B ايجاد مي كند . دقت كنيد كه چگونه از واژه كليدي extends استفاده شده تا
يك زير كلاس از A ايجاد شود .

+ // A simple example of inheritance.
+
+ // Create a superclass.
+ class A {
+ int i/ j;
+
+ void showij )({
+ System.out.println("i and j :" + i + " " + j);
+ }
+ }
+
+ // Create a subclass by extending class A.
+ class B extends A {
+ int k;
+
+ void showk )({
+ System.out.println("k :" + k);
+ }
+ void sum )({
+ System.out.println("j+j+k :" +( i+j+k));
+ }
+ }
+
+ class SimpleInheritance {
+ public static void main(String args[] ){
+ A superOb = new A)(;
+
+ B subOb = new B)(;
+
+ // The superclass may be used by itself.
+ superOb.i = 10;
+ superOb.j = 20;
+ System.out.println("Contents of superOb :");
+ superOb.showij)(;
+ System.out.println)(;
+
+ /* The subclass has access to all public members of
+ its superclass .*/
+ subOb.i = 7;
+ subOb.j = 8;
+ subOb.k = 9;
+ System.out.println("Contents of subOb :");
+ subOb.showj)(;
+ subOb.showk)(;
+ System.out.println)(;
+
+ System.out.println("Sum of i/ j and k in subOb:");
+ subOb.sum)(;
+ }
+ }

خروجي اين برنامه ، بقرار زير مي باشد :

Contents of superOb:
i and j :10 20

Contents of subOb:
i and j :7 8
k :9

Sum of i/ j and k in subOb:
i+j+k :24

همانطوريكه مي بينيد ، زير كلاس B دربرگيرنده كليه اعضائ كلاس بالاي مربوطه
يعني A است . بهمين دليل است كه subob مي تواند به iو jو دسترسي داشته و
()showij را فراخواني نمايد . همچنين داخل ()sum مي توان بطور مستقيم iو jو
همانگونه كه قبلا" بخشي از B بودند ، ارجاع نمود .
اگرچه A كلاس بالاي B مي باشد ، اما همچنان يك كلاس كاملا" مستقل و متكي بخود
است . كلاس بالا بودن براي يك زير كلاس بدان معني نيست كه نمي توان خود آن كلاس
بالا را بتنهايي مورد استفاده قرار داد . بعلاوه ، يك زير كلاس مي تواند كلاس بالاي
يك زير كلاس ديگر باشد .
شكل عمومي اعلان يك class كه از يك كلاس بالا ارث مي برد ، بصورت زير است :

class subclass-name extends superclass-name {
// body of class
}

براي هر زير كلاسي كه ايجاد مي كنيد ، فقط يك كلاس بالا مي توانيد تعريف كنيد.
جاوا از انتقال وراثت چندين كلاس بالا به يك كلاس منفرد پشتيباني نمي كند . ( از
اين نظر جاوا با C++ متفاوت است كه در آن وراثت چند كلاسه امكان پذير است . )
قبلا" گفتيم كه مي توانيد يك سلسله مراتب از وراثت ايجاد كنيد كه در آن يك زير
كلاس ، كلاس بالاي يك زير كلاس ديگر باشد . اما ، هيچ كلاسي نمي تواند كلاس بالاي
خودش باشد .

دسترسي به اعضائ و وراثت
اگرچه يك زير كلاس دربرگيرنده كليه اعضائكلاس بالاي خود مي باشد، اما نميتواند
به اعضايي از كلاس بالا كه بعنوان private اعلان شده اند ، دسترسي داشته باشد .
بعنوان مثال ، سلسله مراتب ساده كلاس زير را در نظر بگيريد :

+ /* In a class hierarchy/ private members remain
+ private to their class.
+
+ This program contains an error and will not
+ compile.
+ */
+
+ // Create a superclass.
+ class A {
+ int i; // public by default
+ private int j; // private to A
+
+ void setij(int x/ int y ){
+ i = x;
+ j = y;
+ }
+ }
+
+ // A's j is not accessible here.
+ class B extends A {
+ int total;
+
+ void sum )({
+ total = i + j; // ERROR/ j is not accessible here
+ }
+ }
+
+ class Access {
+ public static void main(String args[] ){
+ B subOb = new B)(;
+
+ subOb.setij(10/ 12);
+
+ subOb.sum)(;
+ System.out.println("Total is " + subOb.total);
+ }
+ }

اين برنامه كامپايل نخواهد شد زيرا ارجاع به j داخل روش ()sumدر Bر سبب نقض
دسترسي خواهد شد. از آنجاييكه j بعنوان private اعلان شده ، فقط توسط ساير اعضائ
كلاس خودش قابل دسترسي است و زير كلاسها هيچگونه دسترسي به آن ندارند .
يادآوري : يك عضو كلاس كه بعنوان private اعلان شده براي كلاس خودش اختصاصي خواهد
بود . اين عضو براي كدهاي خارج از كلاسش از جمله زير كلاسها ، قابل
دسترسي نخواهد بود .

يك مثال عملي تر
اجازه دهيد به يك مثال عملي تر بپردازيم كه قدرت واقعي وراثت را نشان خواهد
داد . در اينجا ، روايت نهايي كلاس Box بنحوي گسترش يافته تا يك عنصر چهارم
تحت نام weight را دربرگيرد . بدين ترتيب ، كلاس جديد شامل width، height، depth
و weightويك box خواهد بود .

+ // This program uses inheritance to extend Box.
+ class Box {
+ double width;
+ double height;
+ double depth;
+
+ // construct clone of an object
+ Box(Box ob ){ // pass object to constructor
+ width = ob.width;
+ height = ob.height;
+ depth = ob.depth;
+ }
+
+ // constructor used when all dimensions specified
+ Box(double w/ double h/ double d ){
+ width = w;
+ height = h;
+ depth = d;
+ }
+
+ // constructor used when all dimensions specified
+ Box )({
+ width =- 1; // use- 1 to indicate
+ height =- 1; // an uninitialized
+ depth =- 1; // box
+ }
+
+ // compute and return volume
+ double volume )({
+ return width * height * depth;
+ }
+ }
+
+ // Here/ Box is extended to include weight.
+ class BoxWeight extends Box {
+ double weight; // weight of box
+
+ // constructor for BoxWeight
+ BoxWeight(double w/ double h/ double d/ double m ){
+ width = w;
+ height = h;
+ depth = d;
+ weight = m;
+ }
+ }
+
+ class DemoBoxWeight {
+ public static void main(String args[] ){
+ Boxweight mybox1 = new BoxWeight(10/ 20/ 15/ 34.3);
+ Boxweight mybox2 = new BoxWeight(2/ 3/ 4/ 0.076);
+ double vol;
+
+ vol = mybox1.volume)(;
+ System.out.println("Volume of mybox1 is " + vol);
+ System.out.println("Weight of mybox1 is " + mybox1.weight);
+ System.out.println)(;
+
+ vol = mybox2.volume)(;
+ System.out.println("Volume of mybox2 is " + vol);
+ System.out.println("Weight of mybox2 is " + mybox2.weight);
+ }
+ }

خروجي اين برنامه بصورت زير مي باشد :

Volume of mybox1 is 3000
Weight of mybox1 is 34.3

Volume of mybox2 is 24
Weight of mybox2 is 0.076
Boxweight

كليه مشخصات Box را بارث برده و به آنها عنصر weight را اضافه
مي كند . براي Boxweight ضرورتي ندارد كه كليه جوانب موجود در Box را مجددا"
ايجاد نمايد . بلكه مي تواند بسادگي Box را طوري گسترش دهد تا اهداف خاص خودش
را تامين نمايد .
يك مزيت عمده وراثت اين است كه كافيست فقط يكبار يك كلاس بالا ايجاد كنيد كه
خصلتهاي مشترك يك مجموعه از اشيائ را تعريف نمايد ، آنگاه مي توان از آن براي
ايجاد هر تعداد از زير كلاسهاي مشخص تر استفاده نمود . هر زير كلاس مي تواند
دقيقا" با طبقه بندي خودش تطبيق يابد . بعنوان مثال ، كلاس بعدي ، از Box بارث
برده و يك خصلت رنگ (color) نيز در آن اضافه شده است .

+ // Here/ Box is extended to include color.
+ class ColorBox extends Box {
+ int color; // color of box
+
+ ColorBox(double w/ double h/ double d/ double c ){
+ width = w;
+ height = h;
+ depth = d;
+ color = c;
+ }
+ }

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

يك متغير كلاس بالا مي تواند به يك شي ئ زير كلاس ارجاع نمايد
يك متغير ارجاع مربوط به يك كلاس بالا را مي توان به ارجاعي ، به هر يك از
زير كلاسهاي مشتق شده از آن كلاس بالا ، منتسب نمود . در بسياري از شرايط ، اين
جنبه از وراثت كاملا" مفيد و سودمند است . بعنوان مثال ، مورد زير را در نظر
بگيريد :

+ class RefDemo {
+ public static void main(String args[] ){
+ Boxweight weightbox = new BoxWeight(3/ 5/ 7/ 8.37);
+ Box plainbox = new Box)(;
+ double vol;
+
+ vol = weightbox.volume)(;
+ System.out.println("Volume of weightbox is " + vol);
+ System.out.println("Weight of weightbox is " +
+ weightbox.weight);
+ System.out.println)(;
+
+ // assign BoxWeight reference to Box reference
+ plainbox = weightbox;
+
+ vol = plainbox.volume)(; // OK/ volume )(defined in Box
+ System.out.println("Volume of plainbox is " + vol);
+
+ /* The following statement is invalid because plainbox
+ dose not define a weight member .*/
+
+ // System.out.println("Weight of plainbox is " + plainbox.weight
+ }
+ }

در اينجا weightbox يك ارجاع به اشيائ Boxweight است و plainbox يك ارجاع
به اشيائ Box است . از آنجاييكه Boxweight يك زير كلاس از Box است ، مي توان plainbox
را بعنوان يك ارجاع به شي ئ weightbox منتسب نمود .
نكته مهم اين است كه نوع متغير ارجاع و نه نوع شيئي كه به آن ارجاع شده
است كه تعيين مي كند كدام اعضائ قابل دسترسي هستند . يعني هنگاميكه يك ارجاع
مربوط به يك شي ئ زير كلاس ، به يك متغير ارجاع كلاس بالا منتسب مي شود ، شما فقط
به آن بخشهايي از شي ئ دسترسي داريد كه توسط كلاس بالا تعريف شده باشند . بهمين
دليل است كه plainbox نمي تواند به weight دسترسي داشته باشد حتي وقتي كه به
يك شي ئ Boxweight ارجاع مي كند . اگر به آن فكر كنيد ، آن را احساس مي كنيد
زيرا يك كلاس بالا آگاهي و احاطه اي نسبت به موارد اضافه شده به زيركلاس مربوطه اش
نخواهد داشت . بهمين دليل است كه آخرين خط از كد موجود در قطعه قبلي از توضيج رج شده است . براي يك ارجاع Box امكان ندارد تا به فيلد weight دسترسي داشته

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از Super ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۴۳ مراجعه امروز
۴۳۵۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از Super
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۰۶۳ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

استفاده از Super

در مثالهاي قبلي كلاسهاي مشتق شده از Box به كارايي و قدرتمندي كه امكان
داشت ، پياده سازي نشدند . بعنوان مثال ، سازنده Boxweight بطور صريحي فيلدهاي width
، height،و depthو در ()Box را مقدار دهي اوليه مي كند . اين امر نه تنها
كدهاي پيدا شده در كلاس بالاي آنها را دو برابر مي كند كه غير كاراست ، بلكه
دلالت دارد بر اينكه يك زير كلاس بايد دسترسي به اين اعضائ داشته باشد . اما
شرايطي وجود دارند كه مي خواهيد يك كلاس بالا ايجاد كنيد كه جزئيات پياده سازي
خودش را خودش نگهداري كند . در اين شرايط ، راهي براي يك زير كلاس وجود ندارد
تا مستقيما"به اين متغيرهاي مربوط به خودش دسترسي داشته و يا آنها را مقداردهي
اوليه نمايد . از آنجاييكه كپسول سازي يك خصلت اوليه oop است ، پس باعث تعجب
نيست كه جاوا راه حلي براي اين مشكل فراهم كرده باشد . هرگاه لازم باشد تا يك
زير كلاس به كلاس بالاي قبلي خودش ارجاع نمايد ، اينكار را با استفاده از واژه
كليدي super انجام مي دهيم . super
دو شكل عمومي دارد . اولين آن سازنده كلاس بالا را فراخواني مي كند .
دومين آن بمنظور دسترسي به يك عضو كلاس بالا كه توسط يك عضو زير كلاس مخفي مانده
است ، استفاده مي شود .

استفاده از super
يك زيركلاس ميتواند روش سازنده تعريف شده توسط كلاس بالاي مربوطه را بااستفاده
از اين شكل super فراخواني نمايد :

super( parameter-list);

در اينجاparameter-list مشخص كننده هر پارامتري است كه توسط سازنده در كلاس
بالا مورد نياز باشد. ()super بايد همواره اولين دستور اجرا شده داخل يك سازنده
زير كلاس باشد .
بنگريد كه چگونه از ()super استفاده شده ، و همچنين اين روايت توسعه يافته
از كلاس ()Boxweight را در نظر بگيريد :

+ // BoxWeight now uses super to initialize its Box attributes.
+ class BoxWeight extends Box {
+ double weight; // weight of box
+
+ // initialize width/ height/ and depth using super)(
+ BoxWeight(double w/ double h/ double d/ double m ){
+ super(w/ h/ d); // call superclass constructor
+ weight = m;
+ }
+ }

در اينجا ()Boxweight فراخواني ()super را با پارامترهاي w، h،و dو انجام
مي دهد. اين كار سبب فراخوانده شدن سازنده ()Box شده با استفاده از اين مقادير width
، height،و depthو را مقدار دهي اوليه مي كند . ديگر Boxweight خودش اين
مقادير اوليه را مقدار دهي نمي كند . فقط كافي است تا مقدار منحصر بفرد خود : weight
را مقدار دهي اوليه نمايد . اين عمل Box را آزاد مي گذارد تا در صورت
تمايل اين مقادير را private بسازد .
در مثال قبلي ، ()super با سه آرگومان فراخواني شده بود . اما چون سازندگان
ممكن است انباشته شوند ، مي توان ()super را با استفاده از هر شكل تعريف شده
توسط كلاس بالا فراخواني نمود . سازنده اي كه اجرا مي شود ، هماني است كه با
آرگومانها مطابقت داشته باشد . بعنوان مثال ، در اينجا يك پياده سازي كامل از Boxweight
وجود دارد كه سازندگان را براي طرق گوناگون و ممكن ساخته شدن يك box
فراهم مي نمايد. در هر حالت ()super با استفاده از آرگومانهاي تقريبي فراخواني
ميشود. دقت كنيد كه widthو heightوو depthو داخل Box بصورت اختصاصي درآمده اند.

+ // A complete implementation of BoxWeight.
+ class Box {
+ private double width;
+ private double heght;
+ private double deoth;
+
+ // construct clone of an object
+ Box(Box ob ){ // pass object to constructor
+ width = ob.width;
+ height = ob.height;
+ depth = ob.depth;
+ }
+
+ // constructor used when all dimensions specified
+ Box(double w/ double h/ double d ){
+ width = w;
+ height = h;
+ depth = d;
+ }
+
+ // constructor used when no dimensions specified
+ Box )({
+ width =- 1; // use- 1 to indicate
+ height =- 1; // an uninitialized
+ depth =- 1; // box
+ }
+
+ // constructor used when cube is created
+ Box(double len ){
+ width = height = depth = len;
+ }
+
+ // compute and return volume
+ double volume )({
+ return width * height * depth;
+ }
+ }
+
+ // BoxWeight now fully implements all construtors.
+ class BoxWeight extends Box {
+ double weight; // weight of box
+
+ // construct clone of an object
+ BoxWeight(BoxWeight ob ){ // pass object to consructor
+ super(ob);
+ weight = ob.weight;
+ }
+
+ // constructor used when all parameters are specified
+ Box(double w/ double h/ double d/ double m ){
+ super(w/ h/ d); // call superclass constructor
+
+ weight = m;
+ }
+
+ // default constructor
+ BoxWeight )({
+ super)(;
+ weight =- 1;
+ }
+
+ // constructor used when cube is created
+ BoxWeight(double len/ double m ){
+ super(len);
+ weight = m;
+ }
+ }
+
+ class DemoSuper {
+ public static void main(String args[] ){
+ BoxWeight mybox1 = new BoxWeight(10 .20 .15 .34.3);
+ BoxWeight mybox2 = new BoxWeight(2/ 3/ 4/ 0.076);
+ BoxWeight mybox3 = new BoxWeight)(; // default
+ BoxWeight mycube = new BoxWeight(3/ 2);
+ BoxWeight myclone = new BoxWeight(mybox1);
+ double vol;
+
+ vol = mybox1.vilume)(;
+ System.out.println("Volume of mybox1 is " + vol);
+ System.out.println("Weight of mybox1 is " + mybox1.weight);
+ System.out.println)(;
+
+ vol = mybox2.vilume)(;
+ System.out.println("Volume of mybox2 is " + vol);
+ System.out.println("Weight of mybox2 is " + mybox2.weight);
+ System.out.println)(;
+
+ vol = mybox3.vilume)(;
+ System.out.println("Volume of mybox3 is " + vol);
+ System.out.println("Weight of mybox3 is " + mybox3.weight);
+ System.out.println)(;
+
+ vol = myclone.vilume)(;
+ System.out.println("Volume of myclone is " + vol);
+ System.out.println("Weight of myclone is " + myclone.weight);
+ System.out.println)(;
+
+ vol = mycube.vilume)(;
+ System.out.println("Volume of mycube is " + vol);
+ System.out.println("Weight of mycube is " + mycube.weight);
+ System.out.println)(;
+ }
+ }

اين برنامه خروجي زير را توليد مي كند :

Volume of mybox1 is 3000
Weight of mybox1 is 34.3

Volume of mybox2 is 24
Weight of mybox2 is 0.076

Volume of mybox3 is- 1
Weight of mybox3 is- 1

Volume of myclone is 3000
Weight of myclone is 34.3

Volume of mycube is 27
Weight of mycube is 2

توجه بيشتري نسبت به اين سازنده در ()Boxweight داشته باشيد :

+ // construct clone of an object
+ BoxWeight(BoxWeight ob ){ // pass object to constructor
+ super(ob);
+ weight = ob.weight;
+ }

توجه كنيد كه ()super با يك شي ئاز نوع Boxweight نه از نوع Box فراخواني
شده است و نيز سازنده (Box ob) Box را فراخواني مي كند . همانطوريكه قبلا" ذكر
شد ، يك متغير كلاس بالا را مي توان براي ارجاع به هر شي ئ مشتق شده از آن كلاس
مورد استفاده قرار داد . بنابراين ، ما قادر بوديم يك شي ئ Boxweight را به
سازنده Box گذر دهيم . البته Box فقط نسبت به اعضائ خودش آگاهي دارد .
اجازه دهيد مفاهيم كليدي مربوط به ()super را مرور نماييم . وقتي يك زيركلاس
()super را فراخواني مي كند ، در اصل سازنده كلاس بالاي بلافصل خود را فراخواني
مي كند . بنابراين ()super همواره به كلاس بالاي بلافصل قرار گرفته در بالاي كلاس
فراخوانده شده ، ارجاع مي كند . اين امر حتي در يك سلسله مراتب چند سطحي هم
صادق است . همچنين super بايد همواره اولين دستوري باشد كه داخل يك سازنده
زير كلاس اجرا مي شود .

دومين كاربرد super
دومين شكل super تا حدودي شبيه this كار مي كند، بجز اينكه super همواره به
كلاس بالاي زير كلاسي كه در آن استفاده مي شود ، ارجاع مي كند . شكل عمومي اين
كاربرد بصورت زير است :

Super .member

در اينجا ، member ممكن است يك روش يا يك متغير نمونه باشد . اين دومين شكل super
براي شرايطي كاربرد دارد كه در آن اسامي اعضائ يك زير كلاس ، اعضائ با
همان اسامي را در كلاس بالا مخفي مي سازند . اين سلسله مراتب ساده كلاس را در نظر
بگيريد :

+ // Using super to overcome name hiding.
+ class A {
+ int i;
+ }
+
+ // Create a subclass by extending class A.
+ class B extends A {
+ int i; // this i hides the in A
+
+ B(int a/ int b ){
+ super.i = a; // i in A
+ i = b; // i in B
+ }
+
+ void show )({
+ System.out.println("i in superclass :" + super.i);
+ System.out.println("i in subclass :" + i);
+ }
+ }
+
+ class UseSuper {
+ public static void main(String args[] ){
+ B subOb = new B(1/ 2);
+
+ subOb.show)(;
+ }
+ }

اين برنامه خروجي زير را نمايش مي دهد :

i in superclass :1
i in subclass :2

اگرچه متغير نمونه iدر Bر متغير iدر Aر را پنهان مي سازد ، اما super امكان
دسترسي به i تعريف شده در كلاس بالا بوجود مي آورد . همانطوريكه خواهيد ديد
همچنين ميتوان از super براي فراخواني روشهايي كه توسط يك زير كلاس مخفي شده اند

کيفيت مقاله :
عالی خوب متوسط ضعيف


خصلتهاي جاوا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۴۶ مراجعه امروز
۴۳۶۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
خصلتهاي جاوا
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۱۵۱ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

خصلتهاي جاوا

هيچ بحثي درباره اصل و نسب جاوا بدون بررسي خصلتهاي آن كامل نخواهد شد. اگر
چه امنيت و قابليت حمل ، نيروهاي اصلي تسريع كننده روند شكل گيري جاوا بودند
اما عوامل ديگري هم وجود دارند كه در شكل نهايي اين زبان تاثير داشتند . اين
ملاحظات كليدي توسط تيم جاوا در اصطلاحات زير و بعنوان خصلتهاي جاوا معرفي
شده اند .
ؤ ساده simple
ؤ ايمن secure
ؤ قابل حمل portable
ؤ شي ئ گرا object-oriented
ؤ قدرتمند Robust
ؤ چند نخ كشي شده Multithreeaded
ؤ معماري خنثي Architecture-neutral
ؤ تفسير شده Interpreted
ؤ عملكرد سطح بالا High-performance
ؤ توزيع شده Distributed
ؤ پويا Dynamic
قبلا" دو تا از اين خصلتها را بررسي كرده ايم : ايمن و قابل حمل . اكنون ساير
خصلتهاي جاوا را يك به يك بررسي خواهيم نمود .

ساده
جاوا طوري شده كه برنامه نويسان حرفه اي بسادگي آن را فراگرفته و بطور موثري
بكار مي برند . فرض كنيم كه شما تجربياتي در برنامه نويسي داريد ، آنگاه براي
كار با جاوا مشكل زيادي نخواهيد داشت . اگر قبلا" با مفاهيم شي ئ گرايي آشنا شده
باشيد ، آنگاه آموختن جاوا باز هم آسان تر خواهد شد . از همه بهتر اينكه اگر
يك برنامه نويس مجرب C++ باشيد ، حركت بطرف جاوا بسيار راحت انجام مي گيرد .
چون جاوا دستور زبان Cو C++و و همچنين بسياري از جوانب شي ئ گرايي C++ را بارث
برده ، اكثر برنامه نويسان براي كار با جاوا دچار مشكل نخواهند شد . علاوه بر
اينكه بسياري از مفاهيم پيچيده C++ يا در جاوا داخل نشده و يا با روشي آسان تر
و ساده تر مورد استفاده قرار گرفته اند .
فراسوي شباهتهاي جاوا با Cو C++و خاصيت ديگري در جاوا وجود دارد كه فراگيري
آن را بسيار ساده تر مي كند : جاوا تلاش كرده كه جنبه هاي استثنايي و خارق العاده
نداشته باشد . در جاوا ، تعداد اندكي از شيوه هاي كاملا" توصيف شده براي انجام
يك وظيفه وجود دارد .

شي ئ گرا
اگر چه اين زبان از اجداد خود تاثير گرفته ، اما طوري طراحي نشده تا كد
منبع آن قابل انطباق با ساير زبانهاي برنامه نويسي باشد . اين خاصيت به تيم
جاوا اجازه داده تا آزادانه روي يك تخته سنگ حكاكي نمايند . يكي از نتايج اين
آزادي در طراحي ، يك روش تميز، قابل استفاده و واقعيت گرا براي اشيائ(objects)
است . جاوا از بسياري از محيط هاي نرم افزاري اوليه براساس اشيائ مواردي را به
عاريت گرفته و توازني بين نظريه لفظ قلمي (purist) تحت عنوان " هر چيزي يك شي .
است " و نظريه واقعيت گرايي " جلوي راه من قرار نگير " بوجود آورده است . مدل
شي ئ در جاوا بسيار ساده و براحتي قابل گسترش است در حاليكه انواع ساده آن نظير
اعداد صحيح (integers) بعنوان عملكردهاي سطح بالاي غير شي ئ تلقي مي شوند .

قدرتمند
محيط چندگانه روي وب ايجاب كننده تقاضاهاي غير عادي براي برنامه هاست ، زيرا
اين برنامه ها بايد در طيف وسيعي از سيستم ها اجرا شوند . بدين ترتيب در طراحي
جاوا اولويت اول توانايي ايجاد برنامه هاي قدرتمند بوده است . براي كسب اطمينان
جاوا شما را به تعداد محدودي از نواحي كليدي محدود مي كند تا مجبور شويد
اشتباهات خود را در توسعه برنامه خيلي زود پيدا كنيد . در همين حال جاوا شما
را از نگراني درباره بسياري از اشتباهات رايج ناشي از خطاهاي برنامه نويسي
مي رهاند . از آنجاييكه جاوا يك زبان كاملا" نوع بندي شده است ، هنگام كامپايل
كد شما را كنترل مي كند . اما اين زبان كدهاي شما را هنگام اجرا نيز كنترل
مي نمايد . در حقيقت بسياري از اشكالات هاردديسك به شيار كه اغلب در حالتهاي
حين اجرا ايجاد مي شوند ، در جاوا ناممكن شده اند . آگاهي بر اينكه آنچه شما
نوشته ايد بصورتي قابل پيش بيني در شرايط متغير عمل مي كند ، يكي از جنبه هاي
اصلي جاوا است .
براي درك بهتر قدرتمندي جاوا، دو دليل عمده شكست برنامه ها را درنظر بگيريد:
اشتباهات در مديريت حافظه و شرايط استثنايي پيش بيني نشده ( يعني خطاهاي حين
اجرا ) . مديريت حافظه در محيطهاي برنامه نويسي سنتي يكي از وظايف دشوار و
آزار دهنده است . بعنوان نمونه در Cو C++و برنامه نويس بايد بصورت دستي كل
حافظه پويا را تخصيص داده و آزاد نمايد . اين امر گاه منجر به بروز مشكلاتي
مي شود . بعنوان نمونه گاهي برنامه نويسان فراموش مي كنند حافظه اي راكه قبلا"
تخصيص يافته ، آزاد نمايند . يا از اين بدتر ، ممكن است تلاش كنند حافظه اي را
كه توسط بخشي از كد ايشان در حال استفاده است ، آزاد نمايند . جاوا بوسيله
مديريت تخصيص حافظه و تخصيص مجدد حافظه واقعا" اين مشكلات را از ميان برداشته
است . ( در حقيقت تخصيص مجدد كاملا" خودكار انجام مي گيرد، زيرا جاوا يك مجموعه
سطل آشغال براي اشيائ غير قابل استفاده تهيه نموده است . ) شرايط استثنايي در
محيط هاي سنتي اغلب در حالتهايي نظير " تقسيم بر صفر "يا "file not found"ا
اتفاق مي افتند و بايد توسط ساختارهاي بد تركيب و زمخت مديريت شوند . جاوا در
اين زمينه بوسيله تدارك اداره استثنائات شي ئ گرايي object-oriented exception)
(handling اين مشكل را حل كرده است . در يك برنامه خوش ساخت جاوا، كليه خطاهاي
هنگام اجرا توسط برنامه شما مديريت خواهد شد .

چند نخ كشي شده
جاوا براي تامين نيازمنديهاي دنياي واقعي بمنظور ايجاد برنامه هاي شبكه اي و
فعل و انفعالي (interactive) طراحي شده است . براي تكميل اين هدف ، جاوا از
برنامه نويسي چند نخ كشي حمايت مي كند كه امكان نوشتن برنامه هايي به شما ميدهد
كه در آن واحد چندين كار را انجام مي دهند . سيستم حين اجراي جاوا ، يك راه حل
زيبا و بسيار ماهرانه براي همزماني چندين پردازش (process) ارائه مي دهد كه
امكان ساخت سيستم هاي فعل و انفعالي كه بنرمي اجرا ميشوند را بوجود آورده است .
راه حل سهل الاستفاده جاوا براي چند نخ كشي شده به شما امكان تفكر درباره رفتار
خاص برنامه تان ( و نه يك زير سيستم از چند وظيفه اي ) را مي دهد .

معماري خنثي Architecture-Neutral
يكي از مشغوليتهاي اساسي طراحان جاوا موضوع طول و قابليت حمل كدها بود .
يكي از مشكلات اصلي سر راه برنامه نويسان اين است كه تضميني وجود ندارد تا
برنامه اي را كه امروز مي نويسيد فردا حتي روي همان ماشين اجرا شود. ارتقائ
سيستم هاي عامل و پردازنده ها و تغييرات در منابع هسته اي سيستم ممكن است دست
بدست هم داده تا يك برنامه را از كار بيندازند . طراحان جاوا تصميمات متعدد و
دشواري در جاوا و حين اجرا اتخاذ نمودند تا بتوانند اين موقعيت را دگرگون
نمايند . هدف آنها عبارت بود از : يكبار بنويسيد ، هر جايي ، هر زمان و براي
هميشه اجرا كنيد . اين هدف تا حد زيادي توسط طراحان جاوا تامين شد .

تفسير شده و عملكرد سطح بالا
همانطوريكه ديديم ، جاوا قدرت ايجاد برنامه هايي قابل انطباق با چندين محيط
را بوسيله كامپايل كردن يك نوع معرفي واسطه تحت عنوان كد بايتي پيدا كرده است .
اين كدها روي هر نوع سيستمي كه يك حين اجراي جاوا را فراهم نمايد ، قابل اجرا
مي باشند . بسياري از راه حلهاي قبلي در زمينه برنامه هاي چند محيطه سبب كاهش
سطح عملكرد برنامه ها شده بود. ساير سيستم هاي تفسير شده نظيرBASIC، Tcl،و PERLو
از كمبزدها و نارساييهاي عملكرد رنج مي بردند . اما جاوا طوري طراحي شده تا
روي انواع cpu نيز بخوبي اجرا شود . اگر چه صحت دارد كه جاوا تفسير شده است
اما كدهاي بايتي جاوا آنچنان دقيق طراحي شده كه مي توان آنها را بسادگي و بطور
مستقيم به كدهاي ماشين خاص شما براي عملكردهاي سطح بالا ترجمه نمود . سيستم هاي
حين اجراي جاوا كه اين بهينه سازي " درست در زمان " را اجرا مي كنند ، سبب از
دست رفتن هيچيك از مزاياي كدهاي مستقل از زيربنا نخواهد شد. اكنون ديگر عملگرد
سطح بالا و زيربناهاي متعدد در تناقض با يكديگر نيستند .

توزيع شده
جاوا مختص محيط توزيع شده اينترنت طراحي شده زيرا پروتكل هاي Tcp/ip را
تبعيت مي كند . در حقيقت ، دستيابي به يك منبع توسط آدرس URL چندان تفاوتي با
دستيابي به يك فايل ندارد . روايت اوليه جاوا يعني oak دربرگيرنده جنبه هايي
براي پيام رساني آدرسهاي داخلي فضاي الكترونيكي بود . اين امر امكان مي داد تا
اشيائ روي دو نوع رايانه متفاوت ، پردازشهاي از راه دور را اجرا نمايند . جاوا
اخيرا"اين رابطها را در يك بسته نرم افزاري بنام (RMI) Remote Method Invocation
احيائ نموده است . اين جنبه يك سطح غير موازي از تجرد براي برنامه نويس سرويس
گيرنده / سرويس دهنده بوجود آورده است .

پويا
همراه برنامه هاي جاوا، مقادير قابل توجهي از اطلاعات نوع حين اجرا وجود دارد
كه براي مميزي و حل مجدد دستيابي به اشيائ در زمان اجرا مورد استفاده قرار
مي گيرند . اين امر باعث پيوند پوياي كد در يك شيوه مطمئن و متهورانه مي شود .
اين مسئله براي قدرتمندي محيط ريز برنامه (applet) كاملا" قاطع است ، جايي كه اجرا بصورت پويا ارتقائ

کيفيت مقاله :
عالی خوب متوسط ضعيف


ايجاد يك سلسله مراتب چند سطحي (Multilevel) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۴۹ مراجعه امروز
۴۳۶۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ايجاد يك سلسله مراتب چند سطحي (Multilevel)
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۸۳ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

ايجاد يك سلسله مراتب چند سطحي (Multilevel)

مي توانيد سلسله مراتبي بسازيد كه شامل چندين لايه وراثت بدلخواه شما باشند.
كاملا" موجه است كه از يك زير كلاس بعنوان كلاس بالاي يك كلاس ديگر استفاده كنيم .
بعنوان مثال اگر سه كلاس A، B،و Cو داشته باشيم آنگاه C مي تواند يك زير كلاس از B
و Bو يك زير كلاس از A باشد . وقتي چنين شرايطي اتفاق مي افتد ، هر زير كلاس
كليه خصلتهاي موجود در كليه كلاس بالاهاي خود را بارث مي برد . در اين شرايط ، C
كليه جنبه هاي Bو Aو را بارث مي برد .
در برنامه بعدي ، زير كلاس Boxweight بعنوان يك كلاس بالا استفاده شده تا زير
كلاس تحت عنوان shipment را ايجاد نمايد . shipment كليه خصلتهاي Boxweight و Box
را به ارث برده و يك فيلد بنام cost به آن اضافه شده كه هزينه كشتيراني يك
محموله را نگهداري مي كند .

+ // Extend BoxWeight to include shipping costs.
+
+ // Start with Box.
+ class Box {
+ private double width;
+ private double height;
+ private double depth;
+
+ // construct clone of an object
+ Box(Box ob ){ // pass object to constructor
+ width = ob.width;
+ height = ob.height;
+ depth = ob.depth;
+ }
+
+ // constructor used when all dimensions specified
+ Box(double w/ double h/ double d ){
+ width = w;
+ height = h;
+ depth = d;
+ }
+
+ // constructor used when no dimensions specified
+ Box )({
+ width =- 1; // use- 1 to indicate
+ height =- 1; // an uninitialized
+ depth =- 1; // box
+ }
+
+ // constructor used when cube is created
+ Box(double len ){
+ width = height = depth = len;
+ }
+
+ // compute and return volume
+ double volume )({
+ return width * height * depth;
+ }
+ }
+
+ // Add weight.
+ class BoxWeight extends Box {
+ double weight; // weight of box
+
+ // construct clone of an object
+ BoxWeight(BoxWeight ob ){ // pass object to constructor
+ super(ob);
+ weight = ob.weight;
+ }
+
+ // constructor used when all parameters are specified
+ BoxWeight(double w/ double h/ double d/ double m ){
+ super(w/ h/ d); // call superclass constructor
+ weight = m;
+ }
+
+ // default constructor
+ BoxWeight )({
+ super)(;
+ weight =- 1;
+ }
+
+ // constructor used when cube is created
+ BoxWeight(double len/ double m ){
+ super(len);
+ weight = m;
+ }
+ }
+
+ // Add shipping costs
+ class Shipment extends BoxWeight {
+ double cost;
+
+ // construct clone of an object
+ Shipment(Shipment ob ){ // pass object to constructor
+ super(ob);
+ cost = ob.cost;
+ }
+
+ // constructor used when all parameters are specified
+ BoxWeight(double w/ double h/ double d/
+ double m/ double c ){
+ super(w/ h/ d); // call superclass constructor
+ cost = c;
+ }
+ // default constructor
+ Shipment )({
+ super)(;
+ cost =- 1;
+ }
+
+ // constructor used when cube is created
+ BoxWeight(double len/ double m/ double c ){
+ super(len/ m);
+ cost = c;
+ }
+ }
+
+ class DemoShipment {
+ public static void main(String args[] ){
+ Shipment shipment1 =
+ new Shipment(10/ 20/ 15/ 10/ 3.41);
+ Shipment shipment2 =
+ new Shipment(2/ 3/ 4/ 0.76/ 1.28);
+
+ double vol;
+
+ vol = shipment1.volume)(;
+ System.out.println("Volume of shipment1 is " + vol);
+ System.out.println("Weight of shipment1 is "
+ + shipment1.weight);
+ System.out.println("Shipping cost :$" + shipment1.cost);
+ System.out.println)(;
+
+ vol = shipment2.volume)(;
+ System.out.println("Volume of shipment2 is " + vol);
+ System.out.println("Weight of shipment2 is "
+ + shipment2.weight);
+ System.out.println("Shipping cost :$" + shipment2.cost);
+ }
+ }

خروجي اين برنامه بصورت زير مي باشد :

Volume of shipment1 is 3000
Weight of shipment1 is 10
Shipping cost :$3.41

Volume of shipment2 is 24
Weight of shipment2 is 0.76
Shipping cost :$1.28

بدليل وراثت ، shipment مي تواند از كلاسهاي تعريف شده قبلي Boxو Boxweightو
استفاده نمايد و فقط اطلاعات اضافي كه براي كاربرد خاص خودش نياز دارد ، اضافه
نمايد . اين بخشي از ارزش وراثت است . وراثت امكان استفاده مجدد از كدهاي قبلي
را بخوبي بوجود آورده است .
اين مثال يك نكته مهم ديگر را نشان مي دهد: ()super همواره به سازنده موجود
در نزديكترين كلاس بالا ارجاع مي كند . ()superدر shipmentر سازنده Boxweight را
فراخواني ميكند. ()superدر Boxweightر سازنده موجود در Box را فراخواني ميكند.
در يك سلسله مراتب كلاس ، اگر يك سازنده كلاس بالا نيازمند پارامترها باشد، آنگاه
كليه زير كلاسها بايد آن پارامترها را بالاي خط (up the line) بگذرانند. اين امر
چه يك زير كلاس پارامترهاي خودش را نياز داشته باشد چه نياز نداشته باشد ، صحت
خواهد داشت .
نكته : در مثال قبلي ، كل سلسله مراتب كلاس ، شامل Box، Boxweight،و shipmentو
همگي در يك فايل نشان داده مي شوند. اين حالت فقط براي راحتي شما است .
اما در جاوا ، هر يك از سه كلاس بايد در فايلهاي خاص خودشان قرار گرفته
و جداگانه كامپايل شوند . در حقيقت ، استفاده از فايلهاي جداگانه يك مي و نه يك استثنائ در ايجاد سلسله مراتب كلاسهاست .

کيفيت مقاله :
عالی خوب متوسط ضعيف


وقتي كه سازندگان فراخواني مي شوند ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۵۲ مراجعه امروز
۴۳۶۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
وقتي كه سازندگان فراخواني مي شوند
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۷۰ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

وقتي كه سازندگان فراخواني مي شوند

وقتي يك سلسله مراتب كلاس ايجاد مي شود ، سازندگان كلاسها كه سلسله مراتب را
تشكيل مي دهند به چه ترتيبي فراخواني مي شوند ? بعنوان مثال ، با يك زير كلاس
تحت نام B و يك كلاس بالا تحت نام A ، آيا سازنده A قبل از سازنده B فراخواني
ميشود، يا بالعكس ? پاسخ اين است كه در يك سلسله مراتب كلاس ، سازندگان بترتيب
مشتق شدنشان از كلاس بالا به زير كلاس فراخواني مي شوند . بعلاوه چون ()super بايد
اولين دستوري باشد كه در يك سازنده زير كلاس اجرا مي شود ، اين ترتيب همانطور
حفظ مي شود ، خواه ()super استفاده شود يا نشود . اگر ()super استفاده نشود
آنگاه سازنده پيش فرض يا سازنده بدون پارامتر هر يك از زير كلاسها اجرا خواهند
شد . برنامه بعدي نشان مي دهد كه چه زماني سازندگان اجرا مي شوند :

+ // Demonstrate when constructors are called.
+
+ // Create a super class.
+ class A {
+ A )({
+ System.out.println("Inside A's constructor.")
+ }
+ }
+
+ // Create a subclass by extending class A.
+ class B extends A {
+ B )({
+ System.out.println("Inside B's constructor.")
+ }
+ }
+
+ // Create another subclass by extending B.
+ class C extends B {
+ C )({
+ System.out.println("Inside C's constructor.")
+ }
+ }
+
+ class CallingCons {
+ public static void main(String args[] ){
+ C c = new C)(;
+ }
+ }

خروجي اين برنامه بشرح زير مي باشد :

Inside A's constructor
Inside B's constructor
Inside C's constructor

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


لغو ( يا جلوگيري از پيشروي ) روش ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۵۵ مراجعه امروز
۴۳۷۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
لغو ( يا جلوگيري از پيشروي ) روش
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۵۵ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

لغو ( يا جلوگيري از پيشروي ) روش

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

+ // Method overriding.
+ class A {
+ int i/ j;
+
+ A(int a/ int b ){
+ i = a;
+ j = b;
+ }
+
+ // display i and j
+ void show )({
+ System.out.println("i and j :" + i + " " + j);
+ }
+ }
+
+ class B extends A {
+ int k;
+
+ B(int a/ int b/ int c ){
+ super(a/ b);
+ k = c;
+ }
+
+ // display k -- this overrides show )(in A
+ void show )({
+ System.out.println("k :" + k);
+ }
+ }
+
+ class Override {
+ public static void main(String args[] ){
+ B subOb = new B(1/ 2/ 3);
+
+ subOb.show)(; // this calls show )(in B
+ }
+ }

حاصل توليد شده توسط اين برنامه بقرار زير مي باشد :

k:3

وقتي ()show روي يك شي ئ از نوع B فراخواني مي شود ، روايتي از show كه داخل B
تعريف شده مورد استفاده قرار ميگيرد. يعني كه ، روايت ()show داخل B، روايت
اعلان شده در A را لغو مي كند .
اگر مي خواهيد به روايت كلاس بالاي يك تابع لغو شده دسترسي داشته باشيد ، اين
كار را با استفاده از super انجام دهيد . بعنوان مثال ، در اين روايت از B
روايت كلاس بالاي ()show داخل روايت مربوط به زير كلاس فراخواني خواهد شد . اين
امر به كليه متغيرهاي نمونه اجازه مي دهد تا بنمايش درآيند .

+ class B extends A {
+ int k;
+
+ B(int a/ int b/ int c ){
+ super(a/ b);
+ k = c;
+ }
+
+ void show )({
+ super.show)(; // this calls A's show)(
+ System.out.println("k :" + k);
+ }
+ }

اگر اين روايت از A را در برنامه قبلي جايگزين نماييد، خروجي زير را مشاهده
مي كنيد :

i and j :1 2
k:3

در اينجا ، ()super.show روايت كلاس بالاي ()show را فراخواني مي كند .
لغو روش فقط زماني اتفاق مي افتد كه اسامي و نوع دو روش يكسان باشند . اگر
چنين نباشد ، آنگاه دو روش خيلي ساده انباشته (overioaded) خواهند شد . بعنوان
مثال ، اين روايت اصلاح شده مثال قبلي را در نظر بگيريد :

+ // Methods with differing type signatures are overloaded -- not
+ // overridden.
+ class A {
+ int i/ j;
+
+ A(int a/ int b ){
+ i = a;
+ j = b;
+ }
+
+ // display i and j
+ void show )({
+ System.out.println("i and j :" + i + " " + j);
+ }
+ }
+
+ // Create a subclass by extending class A.
+ class B extends A {
+ int k;
+
+ B(int a/ int b/ int c ){
+ super(a/ b);
+ k = c;
+ }
+
+ // overload show)(
+ void show(String msg ){
+ System.out.println(msg + k);
+ }
+ }
+
+ class Override {
+ public static void main(String args[] ){
+ B subOb = new B(1/ 2/ 3);
+
+ subOb.show("This is k :"); // this calls show )(in B
+ subOb.show)(; // this calls show )(in A
+ }
+ }

حاصل توليد شده توسط اين برنامه بقرار زير مي باشد :

This is k:3
i and j :1 2

روايت ()showدر Bر يك پارامتر رشته اي مي گيرد . اين عمل سبب متفاوت شدن
تاييديه نوع آن از نوع موجود در A شده ، كه هيچ پارامتري را نمي گيرد. بنابراين نباشتگي ( يا مخفي شدن اسم ) اتفاق نمي افتد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


فرهنگ لغات مطالب Lexical issues ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۵۸ مراجعه امروز
۴۳۷۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فرهنگ لغات مطالب Lexical issues
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۵۲ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

فرهنگ لغات مطالب Lexical issues

اكنون كه با چندين برنامه كوتاه جاوا آشنا شده ايد ، بهتر است بطور رسمي تر
عناصر اتمي جاوا را معرفي كنيم . برنامه هاي جاوا مجموعه اي از فضاهاي خالي
(whitespaces) ، شناسه ها (identifiers) ، توضيحات (comments) ، مقادير لفظي
(literals) ، عملگرها (operators) ، جدا كننده ها (separators) و واژه هاي كليدي
(keywords) هستند . عملگرها در قسمتهاي بعد بررسي مي شوند . بقيه موارد را در
همين بحث توصيف خواهيم نمود .

فضاي خالي whitspace
جاوا زباني است با شكل آزاد . اين بدان معني است كه در جاوا هيچ نوع قوانين
فاصله گذاري خاصي وجود ندارد . بعنوان مثال ، برنامه Example 1 را مي توانيد
كلا" روي يك خط يا بهر طريق ديگري كه مايل به تايپ كردن باشيد بنويسيد ، مادامي
كه حداقل باندازه يك كاراكتر فضاي خالي بين قسمتهايي كه قبلا" توسط يك عملگر يا
يك جدا كننده معين نشده باشد ، وجود داشته باشد .
در جاوا ، فضاي خالي شامل يك فضا (space) ، فضاي خالي (Tab) يا يك خط جديد
(newline) است .

شناسه ها identifiers
از شناسه ها براي اسامي كلاسها، اسامي روشها و اسامي متغيرها استفاده مي شود.
يك شناسه ممكن است به صورت توالي توصيف گر حروف ، ارقام ، كاراكتر خط زير
(underscore) و كاراكتر علامت دار بالايي و پاييني باشد . اين شناسه ها نبايد با
يك رقم شروع شده چون ممكن است با يك مقدار حقيقي عددي اشتباه شوند . مجددا"
بياد آوريد كه جاوا بسيار حساس نسبت به مورد است و بنابراين VALUEو valueو دو
شناسه متفاوت در جاوا تلقي مي شوند . مثالهايي معتبر بشرح زير مي باشند :

AvgTemp count a4 $test This - is - ok

اسامي متغيرهاي غير معتبر شامل موارد زير هستند : 2count hight-temp Not/ok

مقادير لفظي Literals
يك مقدار ثابت در جاوا را با استفاده از يك مقدار لفظي (Literal) معرفي
مي كنند . بعنوان مثال ، در زير چند مقدار لفظي را مشاهده مي كنيد : 100 98.6 ` x ` "This is a test"

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

توضيحات comments
قبلا" هم گفتيم كه در جاوا سه نوع از توضيحات تعريف شده است . قبلا" دو نوع
آن يعني تك خطي و چند خطي را مشاهده كرديد . سومين نوع توضيحات را " توضيح
مستند سازي "(documentation comment() مي نامند . از اين نوع توضيح براي توليد
يك فايل HTML كه برنامه شما را مستند سازي مي كند ، استفاده خواهد شد . توضيح
مستند سازي با علامت /** شروع و با علامت */ پايان مي گيرد .

جدا كننده ها separators
جاوا تعداد محدودي از كاراكترها را بعنوان جدا كننده ها مورد استفاده قرار
مي دهد . پر كارترين جدا كننده در جاوا علامت (;) (semicolon) است . همانطوريكه
تا بحال ديده ايد، از اين جدا كننده براي پايان رساندن دستورات استفاده مي شود.
جدا كننده ها در جاوا را در جدول زير نشان داده ايم :

|
هدف آن | نام آن | نشانه |
|
از اين جدا كننده در تعريف احضار (invocation) روش | parenthesis | () | |
براي در بر گرفتن فهرست پارامترها استفاده مي شود. | | | |
همچنين براي توصيف حق تقدم عبارات شامل عبارات | پرانتز | | |
موجود در دستورات كنترلي ، و انواع قالبهاي محصور | | | |
كننده استفاده مي شود . | | |
|
از اين جدا كننده براي دربر گرفتن مقادير آرايه هاي | Braces | B {} | { |
مقداردهي شده بصورت خودكار ، استفاده مي شود . | | | |
همچنين براي توصيف يك بلوك كد براي كلاسها ، روشها | ابروها | | |
و حوزه هاي محلي استفاده مي شود . | | |
|
از اين جدا كننده براي اعلان انواع آرايه ها استفاده | | BaBrackets [] | [ |
مي شود . همچنين هنگام ارجاع به مقادير آرايه ها | | | |
بكار مي رود . | كروشه | |
|
اين جدا كننده دستورات را پايان مي دهد . | | ssemicolon ; |
|
جدا كننده شناسه هاي پي در پي در يك اعلان متغيرها | comma | c ' | |
همچنين براي زنجيره سازي دستورات در داخل يك دستور | | | for
|
استفاده خواهد شد . | | |
|
براي جدا كردن اسامي بسته ها از اسامي زير بسته ها و | period | p . | |
كلاسها استفاده مي شود . همچنين براي جدا كردن يك | | | |
متغير يا روش از متغير ارجاع استفاده خواهد شد . | | |

زاژه هاي كليدي جاوا The java keywords
تاكنون 47 واژه كليدي رزرو شده در زبان جاوا تعريف شده است . اين واژه هاي
كليدي در تركيب با دستور زبان عملگرها و جدا كننده ها ، تشكيل دهنده تعريف زبان
جاوا مي باشند . از اين واژه هاي كليدي نمي توان براي اسامي متغيرها ، كلاسها يا
روشها استفاده نمود .

abstract else long this
boolean extends native throw
break final new transient
byte finally package try
case float private void
catch for protected volatile
char goto public while
class if return
const implements short
continue import static
default instanceof super
do int switch
double interface synchronized

واژه هاي كليدي constو gotoو رزرو شده اما استفاده نمي شوند . در روزهاي
اوليه حضور جاوا ، واژه هاي كليدي ديگري نيز براي كاربردهاي احتمالي آينده رزرو
شده بود . اما مشخصات فعلي جاوا فقط واژه هاي كليدي فوق را تعريف نموده است .
علاوه بر واژه هاي كليدي / جاوا لغات true، false،و nullو را نيز رزرو كرده
است . اينها مقاديري هستند كه توسط جاوا تعريف شده اند . شما مجاز به استفاده

کيفيت مقاله :
عالی خوب متوسط ضعيف


توزيع (dispatch) پوياي روش ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۶۱ مراجعه امروز
۴۳۷۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
توزيع (dispatch) پوياي روش
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۵۵ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

توزيع (dispatch) پوياي روش

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

+ // Dynamic Method Dispatch
+ class A {
+ void callme )({
+ System.out.println("Inside A's callme method");
+ }
+ }
+
+ class B extends A {
+ // override callme)(
+ void callme )({
+ System.out.println("Inside B's callme method");
+ }
+ }
+
+ class C extends A {
+ // override callme)(
+ void callme )({
+ System.out.println("Inside C's callme method");
+ }
+ }
+
+ class Dispatch {
+ public static void main(String args[] ){
+ A a = new A)(; // object of type A
+ B b = new B)(; // object of type B
+ C c = new C)(; // object of type C
+ A r; // obtain a reference of type A
+
+ r = a; // r refers to an A object
+ r.callme)(; // calls A's version of callme
+
+ r = b; // r refers to a B object
+ r.callme)(; // calls B's version of callme
+
+ r = c; // r refers to a C object
+ r.callme)(; // calls C's version of callme
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

Inside A's callme method
Inside B's callme method
Inside C's callme method

اين برنامه يك كلاس بالاي تحت نام A و دو زير كلاس آن تحت نام Bو Cو را ايجاد
مي كند. زير كلاسهاي Bو Cو سبب لغو ()callme اعلان شده در A مي گردند. درون روش
()main اشيائي از نوع Aو Bوو Cو اعلان شده اند . همچنين يك ارجاع از نوع A بنام r
اعلان شده است . سپس برنامه يك ارجاع به هر يك از انواع اشيائ به r را نسبت
داده و از آن ارجاع براي فراخواني ()callme استفاده مي كند . همانطوريكه حاصل
اين برنامه نشان مي دهد ، روايتي از ()callme كه بايد اجرا شود توسط نوع شيئي
كه در زمان فراخواني مورد ارجاع قرار گرفته ، تعيين مي شود . اگر اين تعيين
توسط نوع متغير ارجاع يعني r انجام ميگرفت شما با سه فراخواني به روش ()callme
مربوط به A مواجه مي شديد .
نكته : كساني كه با C++ آشنا هستند تشخيص مي دهند كه روشهاي لغو شده در جاوا
مشابه توابع مجازي (virtual functions) در C++ هستند .

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

بكار بردن لغو روش
اجازه دهيد تا به يك مثال عملي تر كه از لغو روش استفاده مي كند ، نگاه
كنيم . برنامه بعدي يك كلاس بالا تحت نام Figure را ايجاد مي كند كه ابعاد اشيائ
مختلف دو بعدي را ذخيره مي كند . اين برنامه همچنين يك روش با نام ()area را
تعريف مي كند كه مساحت يك شي ئ را محاسبه مي كند. برنامه ، دو زير كلاس از Figure
مشتق مي كند . اولين آن Rectangle و دومين آن Triangle است . هر يك از اين زير
كلاسها ()area را طوري لغو ميكنند كه بترتيب مساحت يك مستطيل و مثلث را برگردان
كنند .

+ // Using run-time polymorphism.
+ class Figure {
+ double dim1;
+ double dim2;
+
+ Figure(double a/ double b ){
+ dim1 = a;
+ dim2 = b;
+ }
+
+ double area )({
+ System.out.println("Area for Figure is undefined.");
+ return 0;
+ }
+ }
+
+ class Rectangle extends Figure {
+ Rectangle(double a/ double b ){
+ super(a/ b);
+ }
+
+ // override area for rectangle
+ double area )({
+ System.out.println("Inside Area for Rectangle.");
+ return dim1 * dim2;
+ }
+ }
+
+ class Triangle extends Figure {
+ Triangle(double a/ double b ){
+ super(a/ b);
+ }
+
+ // override area for right triangle
+ double area )({
+ System.out.println("Inside Area for Triangle.");
+ return dim1 * dim2 / 2;
+ }
+ }
+
+ class FindAreas {
+ public static void main(String args[] ){
+ Figure f = new Figure(10/ 10);
+ Rectangle r = new Rectangle(9/ 5);
+ Triangle t = new Triangle(10/ 8);
+
+ Figure figref;
+
+ figref = r;
+ System.out.println("Area is " + figref.area))(;
+
+ figref = t;
+ System.out.println("Area is " + figref.area))(;
+
+ figref = f;
+ System.out.println("Area is " + figref.area))(;
+ }
+ }

حاصل اين برنامه بقرار زير است :

Inside Area for Rectangle.
Area is 45
Inside Area for Triangle.
Area is 40
Area for Figure is undefined.
Area is 0

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از كلاسهاي مجرد (abstract) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۶۴ مراجعه امروز
۴۳۸۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از كلاسهاي مجرد (abstract)
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۲۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از كلاسهاي مجرد (abstract)

شرايطي وجود دارد كه ميخواهيد يك كلاس بالا تعريف نماييد كه ساختار يك انتزاع
معين را بدون يك پياده سازي كامل از هر روشي ، اعلان نمايد. يعني گاهي مي خواهيد
يك كلاس بالا ايجاد كنيد كه فقط يك شكل عمومي شده را تعريف كند كه توسط كليه زير
كلاسهايش باشتراك گذاشته خواهد شد و پر كردن جزئيات اين شكل عمومي بعهده هر يك
از زير كلاس ها واگذار مي شود . يك چنين كلاسي طبيعت روشهايي كه زير كلاسها بايد
پياده سازي نمايند را تعريف مي كند . يك شيوه براي وقوع اين شرايط زماني است
كه يك كلاس بالا توانايي ايجاد يك پياده سازي با معني براي يك روش را نداشته
باشد . تعريف ()area خيلي ساده يك نگهدارنده مكان (place holder) است . اين
روش مساحت انواع شي ئ را محاسبه نكرده و نمايش نمي دهد .
هنگام ايجاد كتابخانه هاي خاص كلاس خود ، خواهيد ديد كه غير معمول نيست اگر
يك روش هيچ تعريف بامعني در متن (context) كلاس بالاي خود نداشته باشد . اين
شرايط را بدو طريق مي توانيد اداره نماييد . يك طريق اين است كه يك پيام هشدار
(warning) گزارش نماييد . اگرچه اين روش در برخي شرايط خاص مثل اشكال زدايي
(debugging) مفيد است ، اما روش دائمي نيست . ممكن است روشهايي داشته باشيد
كه بايد توسط زير كلاس لغو شوند تا اينكه آن زيركلاس معنادار بشود. كلاس Triangle
را در نظر بگيريد . اگر ()area تعريف نشود، اين كلاس هيچ معنايي ندارد . در اين
حالت ، شما بدنبال راهي هستيد تا مطمئن شويد كه يك زير كلاس در حقيقت كليه
روشهاي ضروري را لغو مي كند . راه حل جاوا براي اين مشكل روش مجرد abstract)
(method است .
مي توانيد توسط زير كلاسها و با مشخص نمودن اصلاح كننده نوع abstract، روشهاي
معيني را لغو نماييد . به اين روشها گاهي subclasser responsibilty اطلاق ميشود
زيرا آنها هيچ پياده سازي مشخص شده اي در كلاس بالا ندارند . بنابراين يك زيركلاس
بايد آنها را لغو نمايد چون نمي تواند بسادگي روايت تعريف شده در كلاس بالا را
استفاده نمايد . براي اعلان يك روش مجرد ، از شكل عمومي زير استفاده نماييد .

abstract type name( parameter-list);

همانطوريكه مشاهده مي كنيد در اينجا بدنه روش معرفي نشده است .
هر كلاسي كه دربرگيرنده يك يا چند روش مجرد باشد ، بايد بعنوان مجرد اعلان
گردد . براي اعلان يك كلاس بعنوان مجرد ، بسادگي از واژه كليدي abstract در جلوي
واژه كليدي class در ابتداي اعلان كلاس استفاده مي نماييد . براي يك كلاس مجرد
هيچ شيئي نمي توان ايجاد نمود . يعني يك كلاس مجرد نبايد بطور مستقيم با عملگر new
نمونه سازي شود . چنان اشيائي بدون استفاده هستند ، زيرا يك كلاس مجرد بطور
كامل تعريف نشده است . همچنين نمي توانيد سازندگان مجرد يا روشهاي ايستاي مجرد
اعلان نماييد . هر زير كلاس از يك كلاس مجرد بايد يا كليه روشهاي مجرد موجود در
كلاس بالا را پياده سازي نمايد ، و يا خودش بعنوان يك abstract اعلان شود .
در اينجا مثال ساده اي از يك كلاس با يك روش مجرد مشاهده مي كنيد كه بعد از
آن يك كلاس قرار گرفته كه آن روش را پياده سازي مي كند :

+ // A Simple demonstration of abstract.
+ abstract class A {
+ abstract void callme)(;
+
+ // concrete methods are still allowed in abstract classes
+ void callmetoo )({
+ System.out.println("This is a concrete method.");
+ }
+ }
+
+ class B extends A {
+ void callme )({
+ System.out.println("B's implementetion of callme.");
+ }
+ }
+
+ class AbstractDemo {
+ public static void main(String args[] ){
+ B b = new B)(;
+
+ b.callme)(;
+
+ b.callmetoo)(;
+ }
+ }

توجه كنيد كه هيچ شيئي از كلاس A در برنامه اعلان نشده است . همانطوريكه ذكر
شد ، امكان نمونه سازي يك كلاس مجرد وجود ندارد . يك نكته ديگر : كلاس A يك روش
واقعي با نام ()callmetoo را پياده سازي مي كند . اين امر كاملا" مقبول است .
كلاسهاي مجرد مي توانند ماداميكه تناسب را حفظ نمايند ، دربرگيرنده پياده سازيها
باشند .
اگرچه نمي توان از كلاسهاي مجرد براي نمونه سازي اشيائ استفاده نمود، اما از
آنها براي ايجاد ارجاعات شي ئ مي توان استفاده نمود زيرا روش جاوا براي چند
شكلي حين اجرا از طريق استفاده از ارجاعات كلاس بالا پياده سازي خواهد شد .
بنابراين ، بايد امكان ايجاد يك ارجاع به يك كلاس مجرد وجود داشته باشد بطوريكه
با استفاده از آن ارجاع به يك شي ئ زير كلاس اشاره نمود . شما استفاده از اين
جنبه را در مثال بعدي خواهيد ديد .
با استفاده از يك كلاس مجرد، مي توانيد كلاس Figure را توسعه دهيد. چون مفهوم
با معنايي براي مساحت يك شكل دو بعدي تعريف نشده وجود ندارد ، روايت بعدي اين
برنامه ()area را بعنوان يك مجرد داخل Figure اعلان مي كند . اين البته بدان
معني است كه كليه كلاسهاي مشتق شده از Figure بايد ()area را لغو نمايند .

+ // Using abstract methods and classes.
+ abstract class Figure {
+ double dim1;
+ double dim2;
+
+ Figure(double a/ double b ){
+ dim1 = a;
+ dim2 = b;
+ }
+
+ // area is now an abstract method
+ abstruct double area)(;
+ }
+ class Rectangle extends Figure {
+ Rectangle(duoble a/ double b ){
+ super(a/ b);
+ }
+
+ // override area for rectangle
+ double area )({
+ System.out.println("Inside Area for Rectangle.");
+ return dim1 * dim2;
+ }
+ }
+
+ class Triangle extends Figure {
+ Triangle(double a/ double b ){
+ super(a/ B);
+ }
+
+ // override area for right triangle
+ double area )({
+ System.out.println("Inside Area for Teriangle.");
+ return dim1 * dim2 / 2;
+ }
+ }
+
+ class AbstractAreas {
+ public static void main(String args[] ){
+ // Figure f = new Figure(10/ 10); // illegal now
+ Rectangle r = new Rectanlge(9/ 5);
+ Triangle t = new Triangle(10/ 8);
+
+ Figure figref; // this is OK/ no object is created
+
+ figref = r;
+ System.out.println("Area is " + figref.area))(;
+
+ figref = t;
+ System.out.println("Area is " + figref.area))(;
+ }
+ }

همانطوريكه توضيح درون ()main نشان مي دهد ، ديگر امكان اعلان اشيائ از نوع Figure
وجود ندارد چون اكنون بصورت مجرد است . كليه زير كلاسهاي Figure بايد
()area را لغو نمايند . براي اثبات اين امر، سعي كنيد يك زير كلاس ايجاد نماييد
كه ()area را لغو نمي كند . حتما" يك خطاي complle-time دريافت مي كنيد .
اگرچه امكان ايجاد يك شي ئاز نوع Figure وجود ندارد، اما مي توانيد يك متغير
ارجاع از نوع Figure ايجاد نماييد . متغير ??? بعنوان ارجاعي به Figure اعلان
شده و بدان معني است كه با استفاده ازآن مي توان به يك شي ئ از هر كلاس مشتق شده
از Figure ، ارجاع نمود . همانطوريكه توضيح داديم ، از طريق متغيرهاي ارجاع

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از Final با وراثت ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۶۷ مراجعه امروز
۴۳۸۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از Final با وراثت
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۱۸ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از Final با وراثت

واژه كليدي final سه كاربرد دارد . اول براي ايجاد مشابه يك ثابت اسم دار .
دو كاربرد ديگر مربوط به وراثت هستند و بررسي خواهند شد .

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

+ class A {
+ final void meth )({
+ System.out.println("This is a final method.");
+ }
+ }
+
+ class B extends A {
+ void meth )({ // ERROR! Can't override.
+ System.out.println("Illegal!");
+ }
+ }

چون ()meth بعنوان final اعلان شده ، نمي توان آن را در B لغو نمود . اگر
چنين تلاشي بكنيد ، نتيجه يك خطاي complle-time خواهد بود .
روشهاي اعلان شده بعنوان final گاهي مي توانند باعث افزايش عملكرد شوند :
چون كامپايلر مي داند كه آنها توسط يك زير كلاس لغو نخواهند شد، كامپايلر از
فراخواني inline به آنها آزاد مي شود. وقتي يك تابع كوچك final فراخواني ميشود
اغلب كامپايلر جاوا مي تواند كد بايتي را براي زير روال مستقيم درون خطي
(inline) كد كامپايل شده در روش فراخواننده كپي نمايد، و بدين ترتيب بالاسريهاي
پر هزينه همراه يك فراخوان روش را حذف مي نمايد . Inlining فقط يك گزينه با
روشهاي final است . بطور طبيعي ، جاوا فراخواني به روشها را بصورت پويا و در
زمان حين اجرا حل و فصل مي كند . اين عمل را late binding مي نامند . اما از
آنجاييكه روشهاي final را نمي توان لغو نمود ، يك فراخواني را مي توان در زمان
كامپايل حل و فصل نمود . اين را early binding مي نامند .

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

+ final class A {
+ //...
+ }
+
+ // The following class is illegal.
+ class B extends A { // ERROR! Can't subclass A
+ //...
+ }

همانطوريكه از " توضيحات " مشخص شده ، ارث بردن Bاز Aز غير مجاز شده چون A
بعنوان final اعلان شده است .

كلاس شي ئ The object class
يك كلاس مخصوص يعني object توسط جاوا تعريف شده است . كليه كلاسهاي ديگر
زير كلاسهاي object هستند . يعني object كلاس بالاي كليه كلاسهاي ديگر است . بدين
ترتيب يك متغير ارجاع نوع object مي تواند به يك شي ئ از هر كلاس ديگري ارجاع
نمايد . همچنين ، نظريه اينكه آرايه ها بعنوان كلاس پياده سازي مي شوند ، يك
متغير از نوع object مي تواند به هر آرايه اي ارجاع نمايد . object
روشهاي بعدي را تعريف مي كند . كه بدين ترتيب همه آنها در هر شيئي
قابل دسترسي هستند .
هدف آن روش

يك شيئي جديد ايجاد مي كند كه تكثير شده ()object clon
همان شي ئ است .
تعيين مي كند كه آيا شي ئ با شي ئ ديگر object) boolean equals
مساوي است يا نه . (object
قبل از اينكه يك شي ئ بدون استفاده در ()void finalize
چرخه مجدد قرار گيرد ، فراخواني ميشود .
كلاس يك شي ئ را حين اجرا نگهداري ميكند . ()class get class
كد hash همراه با اشيائ فراخوان را ()int hash code
برگردان مي كند .
اجراي يك رشته در حال انتظار روي شي ئ ()void notify
فراخوان كننده را از سر مي گيرد .
اجراي كليه رشته هاي در حال انتظار روي ()void notify All
شي ئ فراخوان كننده را از سر مي گيرد .
رشته اي كه توصيف كننده شي ئ است را ()string to string
برمي گرداند .
روي يك نخ (thread) ديگر از اجرا منتظر ()void wait
مي ماند .

(long millisconds) void wait void wait( long millisconds/
int nano seconds)

روشهاي ()getclass ، ()notify ، ()notify Allو waitو به عنوان final اعلان
مي شوند . ممكن است ساير موارد را لغو نماييد . فعلا" به دو روش دقت نماييد :
()equals و ()tostring . روش ()equals محتوي دو شي ئ را با يكديگر مقايسه نموده
و اگر دو شي ئ معادل هم باشند ، اين روش true را برمي گرداند و در غير اينصورت false
را برمي گرداند . روش ()to string رشته اي كه دربرگيرنده توصيفي از شيئي
كه روي آن فراخواني شده ، را برمي گرداند . اين روش همچنين هرگاه يك شي ئ حاصل
استفاده از ()println باشد بطور خودكار فراخواني خواهد شد . بسياري از كلاسها
اين روش را لغو مي كنند. انجام اين كار به آن كلاسها امكان مي دهد تا يك توصيف

کيفيت مقاله :
عالی خوب متوسط ضعيف


بسته ها و رابطها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۷۰ مراجعه امروز
۴۳۸۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بسته ها و رابطها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۴۰ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

بسته ها و رابطها

بسته ها (packages) ، ظروفي براي كلاسها هستند كه براي نگهداري فضاهاي
تقسيم بندي شده اسامي كلاسها استفاده مي شوند . بعنوان مثال ، يك بسته به شما
اجازه مي دهد تا يك كلاس با نام list ايجاد نموده كه آن را در بسته خود ذخيره
نماييد بدون نگراني از اينكه اين كلاس با يك كلاس ديگر با نام list و ذخيره شده
در جاي ديگري تلاقي داشته باشد . بسته ها بصورت سلسله مراتبي ذخيره شده و بطور
صريح به تعريف كلاس جديد وارد مي شوند .
از طريق استفاده از واژه كليدي interface ، جاوا به شما اجازه مي دهد تا
رابط را از پياده سازي مربوط به آن كاملا" مجرد نماييد. بااستفاده از interface
مي توانيد يك مجموعه از روشهايي كه قادرند براي يك يا چندين كلاس پياده سازي
شوند را مشخص نماييد. خود interface بواقع هيچ نوع پياده سازي را تعريف نميكند.
اگر رابطها مشابه با كلاسهاي مجرد abstract هستند ، اما يك ظرفيت بيشتر دارند :
يك كلاس مي تواند بيش از يك رابط را پياده سازي نمايد. اما، يك كلاس فقط ميتواند
از يك كلاس بالاي تكي ( مجرد يا غيره ) ارث ببرد .
بسته ها (packages) و رابطها (interfaces) دو عنصر اصلي در يك برنامه جاوا
مي باشند . بطور كلي ، يك فايل منبع جاوا مي تواند دربرگيرنده يكي از ( يا
كليه ) بخشهاي داخلي چهارگانه زير باشد :
يك دستور بسته اي تكي ( اختياري ) A single package statement
به هر تعداد دستورات وارده ( اختياري ) Any number of import statements
يك اعلان كلاس تكي بعنوان public ( لازم است ) A single public class declaration

به هر تعداد كلاسهاي اختصاصي براي بسته ( اختياري ) Any number of classes private to the package

تا بحال در مثالهاي مشاهده شده فقط يكي از اين موارد يعني اعلان كلاس تكي ه است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


بسته ها packages ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۷۳ مراجعه امروز
۴۳۸۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بسته ها packages
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۵۸ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

بسته ها packages

قبلا" نام هر مثالي از كلاس را از يك فضاي نام مخصوص (name space) مي گرفتيم .
يعني براي هر كلاس بايد يك نام منحصر بفرد استفاده مي شد تا از اختلاط نامها
جلوگيري شود . بدون يك راه مناسب براي مديريت فضاي اسامي ، پس از مدتي دچار
مشكلاتي خواهيد شد و مجبوريد براي هر كلاس منفرد ، اسامي توصيفي و مشكلي اختيار
كنيد. همچنين نيازمند راهي هستيد تا مطمئن شويد كه ناميكه براي يك كلاس انتخاب
مي كنيد بطور منطقي منحصر بفرد بوده و با نام كلاسهاي انتخاب شده توسط ساير
برنامه نويسان تصادم پيدا نخواهد كرد . خوشبختانه جاوا مكانيسمي براي بخش بندي
فضاي نام كلاس به قطعات قابل توجه (chunks) و قابل مديريت فراهم آورده است .اين
مكانيسم همان بسته يا package است . بسته هم يك روش نامگذاري و هم يك مكانيسم
كنترل رويت پذيري است . مي توانيد كلاسهايي را داخل يك بسته تعريف كنيد كه
بوسيله كدهاي خارج از بسته قابل دسترسي نباشند . همچنين مي توانيد اعضائ كلاسي
را تعريف كنيد كه فقط در معرض رويت ساير اعضائ همان بسته قرار داشته باشند .
اين امر به كلاسهاي شما امكان مي دهد تا يك آگاهي دروني از يكديگر داشته باشند
اما آن اطلاعات را براي ديگران افشاگري نكنند .

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

package pkg;

در اينجا pkg نام بسته است . بعنوان مثال ، دستور بعدي يك بسته تحت نام Mypackage
ايجاد مي كند :

+ package MyPackage;

جاوا از دايركتوريهاي فايل سيستم براي ذخيره سازي بسته ها استفاده مي كند .
بعنوان مثال فايلهاي class. براي كلاسهايي كه بعنوان بخشي از Mypackage اعلان
مي كنيد ، بايد در يك دايركتوري تحت نام Mypackage ذخيره شوند. بياد آوريد كه
جاوا بسيار حساس است ، بنابراين اسم دايركتوري بايد دقيقا"با اسم بسته مطابقت
داشته باشد .
اين امكان وجود دارد كه بيش از يك فايل شامل يك دستور يكسان package باشند.
دستور package خيلي ساده مشخص مي كند كه كلاسهاي تعريف شده در يك فايل به كدام
بسته تعلق دارند . اين دستور ساير كلاسهاي موجود در فايلهاي ديگر را از اينكه
بخشي از همان بسته اول باشند ، منع نمي كند . بسياري از بسته هاي دنياي واقعي
روي تعداد زيادي از فايلها گسترده مي شوند .
مي توانيد يك سلسله مراتب از بسته ها بسازيد . براي انجام اينكار ، خيلي
ساده اسم هر بسته را از اسم بالايي اش و با استفاده از يك نقطه جدا سازيد . شكل
عمومي يك دستور package چند سطحي بقرار زير است :

package pkg1[.pkg2[.pkg3]];

سلسله مراتب بسته بايد در فايل سيستم توسعه جاوا منعكس شود . بعنوان مثال
يك بسته اعلان شده بعنوان

+ package java.awt.image;

بايد در java/awt/image، java\awt\imageيا java:awt:imageا بترتيب روي فايل
سيستم unix، windows،يا Macintoshا ذخيره شود . اسم بسته خود را خيلي با دقت
انتخاب نماييد. نمي توانيد اسم يك بسته را تغيير دهيد مگر اينكه اسم دايركتوري
كه كلاسها در آن ذخيره شده اند را تغيير دهيد .

درك مفهوم CLASS PATH
قبل از اينكه مثالي براي استفاده از يك بسته معرفي كنيم ، لازم است بحث
مختصري درباره متغير محيطي CLASS PATH داشته باشيم . اگرچه بسته ها بسياري از
مشكلات از نقطه نظر كنترل دسترسي و اختلاط فضاي نام را حل مي كنند ، اما هنگام
كامپايل و اجرا نمودن آنها با مشكلات عجيب و غريبي مواجه مي شويد . زيرا مكان
مشخص در نظر گرفته شده بعنوان ريشه سلسله مراتب بسته توسط كامپايلر جاوا و
بوسيله CLASS PATH كنترل مي شود. تاكنون شما همه كلاسها را در يك بسته پيش فرض
يكسان و بدون اسم ذخيره مي كرديد. انجام اينكار به شما اجازه مي داد تا بسادگي
كد منبع را كامپايل نموده و مفسر جاوا را روي نتيجه ، با اسم بردن از كلاس روي
خط فرمان ، اجرا نماييد . اين مراحل بخوبي كار مي كرد زيرا مسير جاري در حال
كار و پيش فرض (0) معمولا" در متغير محلي CLASS PATH قرار دارد كه البته بصورت
پيش فرض براي سيستم حين اجراي جاوا تعريف شده است . اما وقتي بسته ها مخلوط شوند
كار بهمين راحتي نخواهد بود .
فرض كنيد كه يك كلاس با نام packTest در يك بسته با نام test ايجاد كرده ايد.
چون ساختار دايركتوري شما بايد با بسته هاي شما مطابقت داشته باشد يك دايركتوري
تحت عنوان test ايجاد نموده و PackTest.java را در آن قرار مي دهيد . بعدا"
ميتوانيد test را دايركتوري جاري قرار دهيد وPackTest.java را كامپايل نماييد.
اين امر سبب مي شود كه PackTest.class در دايركتوري test ذخيره شود. وقتي تلاش
مي كنيد تا packTest را اجرا كنيد ، مفسر جاوا يك پيام خطا مشابه "can't find class packTest"
گزارش مي كند . دليل آن است كه اكنون كلاس فوق را يك بسته با
نام test ذخيره شده است . ديگر نمي توانيد بسادگي بعنوان packTest به آن ارجاع
نماييد. بايد به آن كلاس با احتساب سلسله مراتب بسته آن ارجاع نماييد و هر بسته
را با يك نقطه از ديگري جدا كنيد . اين كلاس اكنون بايد با نام test.packTest
خوانده مي شود . اما اگر تلاش كنيد تا از test.packTest استفاده كنيد ، همچنان
يك پيام خطا مشابه "can't find class test/ppackTest" دريافت خواهد نمود .
دليل اينكه همچنان يك پيام خطا دريافت مي كنيد در متغير CLASS PATH شما
نهفته است . بياد آوريد كه CLASS PATH در بالاي سلسله مراتب كلاس قرار مي گيرد .
چيزي شبيه زير را دربرمي گيرد : +. ;C:\java classes

كه به سيستم حين اجراي جاوا مي گويد تا دايركتوري در حال كار جاري را كنترل
نموده و همچنين دايركتوري نصب standard java developers kit را كنترل نمايد .
مشكل اين است كه دايركتوري test در دايركتوري در حال كار جاري وجود ندارد زيرا
در خود دايركتوري test قرار داريد .
در اين نقطه دو انتخاب خواهيد داشت : دايركتوريهاي يك سطح بالاتر را تغيير
داده و javatest.packTest را آزمايش كنيد و يا اينكه بالاي سلسله مراتب توسعه
كلاس را به متغير محيطي CLASS PATH اضافه نماييد . آنگاه مي توانيد javatest packTest
. را از هر دايركتوري مورد استفاده قرار دهيد و جاوا فايل درست class.
را پيدا خواهد نمود . بعنوان مثال ، اگر روي كد منبع خودتان در يك دايركتوري
تحت نام C:mmyjava در حال كار باشيد ، آنگاه CLASS PATH خود را روي

+. ;C:\myjava;C:\java\classes

قرار دهيد .

يك مثال كوتاه از بسته
اگر بحث قبلي را در نظر داشته باشيد ، مي توانيد اين بسته ساده را آزمايش
كنيد :

+ // A simple package
+ package MyPack;
+
+ class Balance {
+ String name;
+ double bal;
+
+ Balance(String n/ double b ){
+ name = n;
+ bal = b;
+ }
+
+ void show )({
+ if(bal<0)
+ System.out.print("-->> ");
+ System.out.println(name + " :$" + bal);
+ }
+ }
+
+ class AccountBalance {
+ public static void main(String args[] ){
+ Balance current[] = new Balance[3];
+
+ current[0] = new Balance("K .J .Fielding"/ 123.23);
+ current[1] = new Balance("Will Tell"/ 157.02);
+ current[2] = new Balance("Tom Jackson"/- 12.33);
+
+ for(int i=0; i<3; i++ )current[i].show)(;
+ }
+ }

اين فايل را Mypack/java ناميده و آن را در يك دايركتوري تحت نام Mypack
قرار دهيد .
سپس فايل را كامپايل كنيد. مطمئن شويد كه فايل حاصل class.نيز در دايركتوري Mypack
قرار گرفته باشد. سپس اجراي كلاس Account Balance را آزمايش كنيد، البته
با استفاده از خط فرمان بعدي

+ java MyPack.AccountBalance

بياد داشته باشيد كه وقتي مي خواهيد اين فرمان را اجرا كنيد، لازم است تا در
دايركتوري بالاي Mypack باشيد و يا اينكه متغير محيطي CLASS PATH خود را بطور
مناسبي قرار داده باشيد .
همانطوريكه توضيح داديم ، Account Balance اكنون بخشي از بسته Mypack است .
اين بدان معني است كه نمي تواند بوسيله خودش اجرا شود. يعني نمي توانيد از اين
خط فرمان استفاده نماييد : +

کيفيت مقاله :
عالی خوب متوسط ضعيف


محافظت دسترسي Access protection ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۷۶ مراجعه امروز
۴۳۹۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
محافظت دسترسي Access protection
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۳۲ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

محافظت دسترسي Access protection

قبلا" مي دانستيد كه دسترسي به يك عضو private در يك كلاس فقط به ساير اعضائ
همان كلاس واگذار شده است . بسته ها بعد ديگري به كنترل دسترسي مي افزايند .
همانطوريكه خواهيد ديد ، جاوا سطوح چندي از محافظت براي اجازه كنترل خوب
طبقه بندي شده روي رويت پذيري متغيرها و روشهاي داخل كلاسها ، زير كلاسها و
بسته ها فراهم مي نمايد .
كلاسها و بسته ها هر دو وسايلي براي كپسول سازي بوده و دربرگيرنده فضاي نام
و قلمرو متغيرها و روشها مي باشند . بسته ها بعنوان ظروفي براي كلاسها و ساير
بسته هاي تابعه هستند . كلاسها بعنوان ظروفي براي داده ها و كدها مي باشند . كلاس
كوچكترين واحد مجرد در جاوا است . بلحاظ نقش متقابل بين كلاسها و بسته ها ، جاوا
چهار طبقه بندي براي رويت پذيري اعضائ كلاس مشخص كرده است :
زير كلاسها در همان بسته
غير زير كلاسها در همان بسته
زير كلاسها در بسته هاي مختلف
كلاسهايي كه نه در همان بسته و نه در زير كلاسها هستند .
سه مشخصگر دسترسي يعني private، public،و protectedو فراهم كننده طيف
گوناگوني از شيوه هاي توليد سطوح چند گانه دسترسي مورد نياز اين طبقه بنديها
هستند . جدول زير اين ارتباطات را يكجا نشان داده است .

| private Nomodifier protected public |
|
| |
Yes Yes Yes Yes همان كلاس | |
Yes Yes Yes No همان بسته زير كلاس | |
Yes Yes Yes No همان بسته غير زير كلاس | |
Yes Yes No No بسته هاي مختلف زير كلاس | |
Yes No No No بسته هاي مختلف غير زير كلاس |

اگرچه مكانيسم كنترل دسترسي در جاوا ممكن است بنظر پيچيده باشد، اما ميتوان
آن را بصورت بعدي ساده گويي نمود . هر چيزي كه بعنوان public اعلان شود از هر
جايي قابل دسترسي است . هر چيزي كه بعنوان private اعلان شود خارج از كلاس خودش
قابل رويت نيست . وقتي يك عضو فاقد مشخصات دسترسي صريح و روشن باشد ، آن عضو
براي زير كلاسها و ساير كلاسهاي موجود در همان بسته قابل رويت است . اين دسترسي
پيش فرض است . اگر مي خواهيد يك عضو ، خارج از بسته جاري و فقط به كلاسهايي كه
مستقيما" از كلاس شما بصورت زير كلاس درآمده اند قابل رويت باشد ، پس آن عضو را
بعنوان protected اعلان نماييد .
يك كلاس فقط دو سطح دسترسي ممكن دارد : پيش فرض و عمومي (public) . وقتي يك
كلاس بعنوان public اعلان مي شود ، توسط هر كد ديگري قابل دسترسي است . اگر يك
كلاس دسترسي پيش فرض داشته باشد ، فقط توسط ساير كدهاي داخل همان بسته قابل
دسترسي خواهد بود .

يك مثال از دسترسي
مثال بعدي كليه تركيبات مربوط به اصلاحگرهاي كنترل دسترسي را نشان مي دهد .
اين مثال داراي دو بسته و پنج كلاس است . بياد داشته باشيد كه كلاسهاي مربوط به
دو بسته متفاوت ، لازم است در دايركتوريهايي كه بعداز بسته مربوطه اشان نام برده
شده در اين مثال p1و p2و ذخيره مي شوند .
منبع اوليه بسته سه كلاس تعريف مي كند : protection، Derivedو samepackageو.
اولين كلاس چهار متغير int را در هر يك از حالات مختلف مجاز تعريف مي كند. متغير n
با حفاظت پيش فرض اعلان شده است . m-pri بعنوان private، n-pro، بعنوان protected
و n-pubو بعنوان public مي باشند .
هر كلاس بعدي در اين مثال سعي مي كند به متغيرهايي در يك نمونه از يك كلاس
دسترسي پيدا كند . خطوطي كه بلحاظ محدوديتهاي دسترسي ، كامپايل نمي شوند با
استفاده از توضيح يك خطي // از توضيح خارج شده اند . قبل از هر يك از اين خطوط
توضيحي قرار دارد كه مكانهايي را كه از آنجا اين سطح از حفاظت اجازه دسترسي
مي يابد را فهرست مي نمايد .
دومين كلاس Derived يك زير كلاس از protection در همان بسته p1 است . اين
مثال دسترسي Derived را به متغيري در protection برقرار مي سازد بجز n-pri كه
يك private است .
سومين كلاس Samepackage يك زير كلاس از protection نيست ، اما در همان بسته
قرار دارد و بنابراين به كليه متغيرها بجز n-pri دسترسي خواهد داشت .

+ package p1;
+
+ public class Protection {
+ int n = 1;
+ private int n_pri = 2;
+ protected int n_pro = 3;
+ public int n_pub = 4;
+
+ public Protection )({
+ System.out.println("base constructor");
+ System.out.println("n = " + n);
+ System.out.println("n_pri = " + n_pri);
+ System.out.println("n_pro = " + n_pro);
+ System.out.println("n_pub = " + n_pub);
+ }
+ }
+
+ class Derived extends Protection {
+ Derived )({
+ System.out.println("derived constructor");
+ System.out.println("n = " + n);
+
+ // class only
+ // System.out.println("n_pri = " + n_pri);
+
+ System.out.println("n_pro = " + n_pro);
+ System.out.println("n_pub = " + n_pub);
+ }
+ }
+
+ class SamePackage {
+ SamePackage )({
+ Protection p = new Protection)(;
+ System.out.println("same package constructor");
+ System.out.println("n = " + p.n);
+
+ // class only
+ // System.out.println("n_pri = " + p.n_pri);
+
+ System.out.println("n_pro = " + p.n_pro);
+ System.out.println("n_pub = " + p.n_pub);
+ }
+ }

اكنون كد منبع يك بسته ديگر يعني p2 را مشاهده مي كنيد . دو كلاس تعريف شده
در p2 دو شرايطي را كه توسط كنترل دسترسي تحت تاثير قرار گرفته اند را پوشش
داده است . اولين كلاس يعني protection 2 يك زير كلاس p1.protection است . اين
كلاس دسترسي به كليه متغيرهاي مربوط به p1.protection را بدست مي آورد غير از n-pri
( چون private است ) و n_ متغيري كه با محافظت پيش فرض اعلان شده است .
بياد داشته باشيد كه پيش فرض فقط اجازه دسترسي از داخل كلاس يا بسته را مي دهد
نه از زير كلاس هاي بسته هاي اضافي . در نهايت ، كلاس otherpackage فقط به يك
متغير n-pub كه بعنوان public اعلان شده بود دسترسي خواهد داشت .

+ package p2;
+
+ class Protection2 extends p1.Protection {
+ Protection2 )({
+ System.out.println("derived other package constructor");
+
+ // class or package only
+ System.out.println("n = " + n);
+
+ // class only
+ // System.out.println("n_pri = " + n_pri);
+
+ System.out.println("n_pro = " + n_pro);
+ System.out.println("n_pub = " + n_pub);
+ }
+ }
+
+ class OtherPackage {
+ OtherPackage )({
+ p1.Protection p = new p1.protection)(;
+ System.out.println("other package contryctor");
+
+ // class or package only
+ System.out.println("n = " + p.n);
+
+ // class only
+ // System.out.println("n_pri = " + p.n_pri);
+
+ // class/ subclass or package only
+ // System.out.println("n_pro = " + p.n_pro);
+
+ System.out.println("n_pub = " + p.n_pub);
+ }
+ }

اگر مايليد تا اين دو بسته را آزمايش كنيد ، در اينجا دو فايل آزمايشي وجود
دارد كه مي توانيد از آنها استفاده نماييد. يكي از اين فايلها براي بسته p1 را
در زير نشان داده ايم :

+ // Demo package p1.
+ package p1;
+
+ // Instantiate the various classes in p1.
+ public class Demo {
+ public static void main(String args[] ){
+ Protection ob1 = new Protection)(;
+ Derived ob2 = new Drived)(;
+ SamePackage ob3 = new SamePackage)(;
+ }
+ }

فايل آزمايشي براي p2 بقرار زير مي باشد :

+ // Demo package p2.
+ package p2;
+ // Instantiate the various classes in p2.
+ public class Demo {
+ public static void main(String args[] ){
+ Protection2 ob1 = new

کيفيت مقاله :
عالی خوب متوسط ضعيف


وارد كردن بسته ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۷۹ مراجعه امروز
۴۳۹۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
وارد كردن بسته ها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۲۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

وارد كردن بسته ها

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

import pkg1[pkg2](.classname |*);

در اينجا pkg1 نام يك بسته سطح بالاست و pkg2 نام يك بسته تابعه داخل بسته
خارجي است كه با يك نقطه جدا شده است . هيچ محدوديت عملي در خصوص عمق سلسله
مراتب بسته وجود ندارد ، بجز مواردي كه توسط فايل سيستم اعمال مي شود . در
نهايت ، يا يك classname صريح را مشخص مي كنيد و يا از يك ستاره (*) استفاده
مي كنيد كه نشان مي دهد كه كامپايلر جاوا بايد كل بسته را وارد نمايد . اين
قطعه كد هر دو شكل مذكور را نشان مي دهد :

+ import java.util.Date;
+ import java.io.*;

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

+ import java.lang.*;

اگر يك كلاس با همان اسم در دو بسته متفاوتي كه با استفاده از ستاره وارد
كرده ايد ، قرار داشته باشد ، كامپايلر ساكت (silent) مي ماند ، مگر اينكه سعي
كنيد يكي از آن كلاسها را استفاده نماييد. درآن حالت ، با يك خطاي compile-time
مواجه شده و مجبور مي شويد تا بطور صريح نام كلاس همراه با مشخصات بسته آن را
ذكر نماييد .
هر جايي از يك نام كلاس استفاده مي كنيد ، مي توانيد از نام با كيفيت كامل
استفاده نماييد. كه دربرگيرنده سلسله مراتب كامل بسته آن مي باشد. بعنوان مثال
اين قطعه ، از يك دستور import استفاده مي كند :

+ import java.util.*;
+ class MyDate extends Date {
+ }

همان مثال بدون دستور import بقرار زير خواهد بود :

+ class MyDate extends java.util.Date {
+ }

وقتي يك بسته وارد ميشود، فقط آن اقلامي در داخل بسته كه بعنوان public اعلان
شده اند در دسترس غير زير كلاسهاي موجود در كد وارد شده مي باشند . بعنوان مثال
اگر مي خواهيد كلاس Balance از بسته Mypack كه قبلا" نشان داده ايم ، بعنوان يك
كلاس مستقل براي كاربردهاي عمومي خارج از Mypack در دسترس باشد ، پس بايد آن را
بعنوان public اعلن نموده و آن را در فايل خودش ، بصورت زير قرار دهيد :

+ package MyPack;
+
+ /* Now/ the Balance class/ its constructor/ and its
+ show )(method are public .This means that they can
+ be used by non-subclass code outside their package.
+ */
+ public class Balance {
+ String name;
+ double bal;
+
+ public Balance(String n/ double b ){
+ name = n;
+ bal = b;
+ }
+
+ public void show )({
+ if(bal<0)
+ System.out.print("-->> ");
+ System.out.println(name + " :$" + bal);
+ }
+ }

همانطوريكه مي بينيد ، كلاس Balance اكنون بعنوان public مي باشد . همچنين
سازنده اين كلاس و روش ()show در آن نيز بعنوان public مي باشند . اين بدان معني
است كه همه آنها توسط هر نوع كدي خارج از بسته Mypack قابل دسترسي هستند .
بعنوان مثال ، در اينجا Test Balance وارد كننده Mypack شده و سپس قادر است از
كلاس Balance استفاده نمايد :

+ import MyPack.*;
+
+ class TestBalance {
+ public static void main(String args[] ){
+
+ /* Because Balance is public/ you may use Balance
+ class and call its constructor .*/
+ Balance test = new Balance("J .J .Jaspers"/ 99.88);
+
+ test.show)(; // you may also call show)(
+ }
+ }

بعنوان يك تجربه ، مشخصگر public را از كلاس Balance برداشته و سپس سعي كنيد ا بروز مي كنند.

کيفيت مقاله :
عالی خوب متوسط ضعيف


رابطها interfaces ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۸۲ مراجعه امروز
۴۳۹۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
رابطها interfaces
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۲۹ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

رابطها interfaces

بااستفاده از واژه كليدي interface، مي توانيد رابط يك كلاس را از پياده سازي
آن كلاس بطور كامل مجرد نماييد . يعني با استفاده از interface مي توانيد مشخص
نماييد يك كلاس چكاري بايد انجام دهد ، اما چگونگي آنرا مشخص نخواهيد كرد .
رابطها از نظر قواعد صرف و نحو مشابه كلاسها هستند ، اما فاقد متغيرهاي نمونه
هستند و روشهاي آنها بدون بدنه اعلان مي شود . در عمل ، اين بدان معني است كه
مي توانيد رابطهايي تعريف كنيد كه درباره چگونگي پياده سازي خود فرضيه اي
نمي سازند . هر بار كه رابط تعريف شود ، هر تعدادي از كلاسها مي توانند آن رابط interface
را پياده سازي نمايند. همچنين ، يك كلاس مي تواند هر تعداد رابطها را
پياده سازي نمايد .
براي پياده سازي يك رابط، كلاس بايد مجموعه كامل روشهاي تعريف شده توسط رابط
را ايجاد نمايد . اما ، هر كلاسي آزاد است تا جزئيات پياده سازي خودش را تعيين
نمايد . با استفاده از واژه كليدي interface ، جاوا به شما امكان مي دهد تا
حداكثر بهره از جنبه " يك رابط و چندين روش " در چند شكلي را بدست آوريد .
رابطها بمنظور حمايت از سرگيري پوياي روش در حين اجرا طراحي مي شوند . بطور
معمول ، براي اينكه يك روش از يك كلاس به كلاس ديگر فراخواني شود ، هر دو كلاس
بايد در زمان كامپايل حضور داشته باشند، بطوريكه كامپايلر جاوا بتواند آنها را
كنترل نموده و سازگاري روشها را تاييد نمايد . اين امر بتنهايي منجر به يك
محلط كلاس دهي ايستا و غير قابل توسعه خواهد شد . در يك چنين سيستمي بناچار
عملگرايي (functionality) در سلسله مراتب كلاس بالاتر و بالاتر مي رود بطوريكه
مكانيسم فوق ، در دسترس زير كلاسهاي بيشتري قرار خواهد گرفت . رابطها طراحي
ميشوند تا از بروز چنين مشكلي جلوگيري بعمل آورند. آنها قطع ارتباط بين تعريف
يك روش يا مجموعه اي از روشها و سلسله مراتب وراثت را بوجود مي آورند . از
آنجاييكه رابطها در سلسله مراتب متفاوتي از كلاسها قرار گرفته اند، براي كلاسهايي
كه بر حسب سلسله مراتب كلاس نامرتبط هستند ، امكان پياده سازي همان رابط وجود
دارد . اين نقطه اي است كه قدرت واقعي رابطها را نمايان مي سازد .
نكته : رابطها ، آن ميزان عملگرايي لازم براي بسياري از كاربردها را بوجود
مي آورند كه در غير اينصورت ناچار از متوسل شدن به وراثت چند گانه در
زباني نظير C++ خواهيم شد .

تعريف نمودن يك رابط
يك رابط مشابه يك كلاس تعريف مي شود . شكل عمومي يك رابط بصورت زير مي باشد:

access interface name {
return-type method-name1(parameter-list);
return-type method-name2(parameter-list);
type final-varname1 = value;
type final-varname2 = value;
//...
return-type method-nameN(parameter-list);
type final-varnameN = value;
}

در اينجا ، دسترسي (access) يا public است يا اصلا" بكار نمي رود . وقتي كه
مشخصگر دسترسي را نگنجانيم ، آنگاه دسترسي پيش فرض اعمال شده و رابط فقط براي
ساير اعضائ بسته اي كه در آن اعلان انجام گرفته ، در دسترس خواهد بود . وقتي كه
بعنوان public اعلان مي شود ، رابط ، توسط هر كد ديگري قابل استفاده خواهد بود. name
همان نام رابط است و بجاي آن هر شناسه معتبري را مي توان بكار برد . توجه
كنيد كه روشهاي اعلان شده داراي بدنه نيستند. انتهاي آنها بعداز parameter-list
يك (;) قرار ميگيرد و آنها ضرورتا" روشهاي مجرد هستند: ممكن است هيچ پياده سازي
پيش فرضي براي روشهاي مشخص شده داخل يك رابط وجود نداشته باشد . هر كلاسي كه
دربرگيرنده يك رابط باشد ، بايد كليه روشها را پياده سازي نمايد .
متغيرها را مي توان داخل اعلانات رابط ، اعلان نمود . آنها بطور ضمني final و static
هستند . بدين معني كه آنها توسط كلاس پياده سازي قابل تغيير نيستند .
آنها همچنين بايد با يك مقدار ثابت ، مقدار دهي اوليه شوند . اگر رابط خودش
بعنوان يك public اعلان شده باشد ، كليه روشها و متغيرها بطور ضمني public
خواهند بود .
اكنون مثالي از يك تعريف رابط را مشاهده مي كنيد. اين مثال يك رابط ساده را
تعريف مي كند كه دربرگيرنده روشي تحت نام ()callback است كه يك پارامتر تكي
عدد صحيح را مي گيرد .

+ interface Callback {
+ void callback(int param);
+ }

پياده سازي رابطها
هر بار رابطي را تعريف نماييد ، يك يا چندين كلاس مي توانند آن رابط را
پياده سازي نمايند . براي پياده سازي يك رابط ، جمله implements را در تعريف
كلاس بگنجانيد و سپس روشهاي تعريف شده توسط رابط را ايجاد نماييد . شكل عمومي
يك كلاس كه دربرگيرنده جمله implements است ، مشابه مورد زير مي باشد :

access class classname [extends superclass]
[implements interface [/interface...]] {
// class-body
}

در اينجا (access) يا public است يا اصلا" استفاده نمي شود. اگر يك كلاس بيش
از يك رابط را پياده سازي نمايد ، رابطها را با يك علامت كاما از يكديگر جدا
مي كنيم . اگر يك كلاس دو رابط را كه روش يكساني را اعلان مي كنند ، پياده سازي
نمايد، آنگاه آن روش يكسان توسط سرويس گيرندگان هر يك از رابطها استفاده خواهد
شد . روشهايي كه يك رابط را پياده سازي مي كنند بايد بعنوان public اعلان شوند.
همچنين تاييد نوع روش پياده سازي بايد دقيقا" با تاييد نوع مشخص شده در تعريف interface
مطابقت و سازگاري داشته باشد .
در اينجا يك مثال از كلاس ساده اي مشاهده مي كنيد كه رابط callback را
پياده سازي مي نمايد :

+ class Client implements Callback {
+ // Implement Callback's interface
+ public void callback(int p ){
+ System.out.println("callback called with " + p);
+ }
+ }

دقت داشته باشيد كه ()callback بااستفاده از مشخصگر دسترسي public اعلان شده
است .
يادآوري : وقتي كه يك روش رابط را پياده سازي مي كنيد ، بعنوان public اعلان
خواهد شد .
براي كلاسهايي كه رابطها را پياده سازي مي كنند ، هم مجاز و هم رايج است كه
اعضائ اضافي براي خودشان تعريف نمايند . بعنوان مثال ، روايت بعدي از client
پياده سازي callback را انجام داده و روش ()nonIfaceMeth را اضافه مي نمايد :

+ class Client implements Callback {
+ // Implement Callback's interface
+ public void callback(int p ){
+ System.out.println("callback called with " + p);
+ }
+
+ void nonIfaceMeth )({
+ System.out.println("Classes that implement interfaces " +
+ "may also define other members/ too.");
+ }
+ }

دسترسي به پياده سازيها از طريق ارجاعات رابط
مي توانيد متغيرهايي را بعنوان ارجاعات شي ئ اعلان كنيد كه بجاي يك نوع كلاس
از يك رابط استفاده نمايند. هر نمونه اي از كلاسي كه رابط اعلان شده را پياده سازي
مي كند را مي توان در چنان متغيري ذخيره نمود . وقتي يك روش را از طريق يكي از
اين ارجاعات فراخواني مي كنيد ، روايت صحيح براساس نمونه واقعي رابطي كه به آن
ارجاع شده ، فراخواني خواهد شد . اين يكي از جنبه هاي كليدي رابطهاست . روشي كه
بايد اجرا شود در حين اجرا بصورت پويا مورد جستجو قرار مي گيرد و به كلاسها
اجازه مي دهد تا ديرتر از كدي كه روشها را روي آن فراخواني ميكند، ايجاد شوند.
كد فراخواننده مي تواند از طريق يك رابط بدون اينكه نيازي به دانستن درباره "callee"
داشته باشد، توزيع نمايد. اين پردازش مشابه استفاده از يك ارجاع كلاس
بالا براي دسترسي به يك شي ئ زير كلاس است .
احتياط : چون جستجوي پويا بدنبال يك روش در حين اجرا، در مقايسه با احضار روش
معمول در جاوا، متحمل بالاسري (over head) بزرگي مي شود ، بايد مراقب
باشيد تا از رابطها بطور اتفاقي در كدهاي performance-critical
استفاده نكنيد .
مثال بعدي روش ()callback را از طريق يك متغير ارجاع رابط، فراخواني ميكند:

+ class TestIface {
+ public static void main(String args[] ){
+ Callback c = new Client)(;
+ c.callback(42);
+ }
+ }

حاصل اين برنامه بقرار زير مي باشد :

callback called with 42

دقت كنيد كه متغير C طوري تعريف شده كه از نوع رابط callback باشد . با اين
وجود يك نمونه از client به آن منتسب شد . اگرچه مي توان از C براي دسترسي به
روش ()callback استفاده نمود ، اما نمي تواند به هيچيك از اعضائ كلاس client
دسترسي داشته باشد . يك متغير ارجاع رابط فقط از روشهاي اعلان شده توسط اعلان interface
خود ، آگاهي دارد . بدين ترتيب ، نمي توان از C براي دسترسي به
()nonIfaceMeth استفاده نمود چون توسط client و نه توسط callback تعريف شده
است .
درحاليكه مثال قبلي نشان ميدهد كه يك متغير ارجاع رابط چگونه ، بطور مكانيكي
مي تواند به يك پياده سازي شي ئ دسترسي داشته باشد ، اما قدرت چند شكلي يك چنين
ارجاعي را نمايش نمي دهد . براي مشاهده اين كاربرد ، ابتدا دومين پياده سازي Callback
را بصورت زير ، ايجاد نماييد :

+ // Another implementation of Callback.
+ class AnotherClient implements Callback {
+ // Implement Callback's interface
+ public void callback(int p ){
+ System.out.println("Another version of callback");
+ System.out.println("p squared is " +( p*p));
+ }
+ }

اكنون كلاس بعدي را امتحان كنيد :

+ class TestIface2 {
+ public static void main(String args[] ){
+ Callback c = new Client)(;
+ AnotherClient ob = new AnotherClient)(;
+
+ c.callback(42);
+
+ c = ob; // c now refers to AnotherClient object
+ c.callback(42);
+ }
+ }

حاصل اين برنامه بقرار زير مي باشد :

callback called with 42
Another version of callback
p squared is 1764

همانطوريكه مي بينيد ، روايتي از ()callback كه فراخواني شده توسط نوع شيئي
كه C به آن در حين اجرا ارجاع مي كند ، تعيين مي شود . اگرچه اين مثال بسيار
ساده است ، يك برنامه عملي تر و كوتاهتر را مشاهده خواهيد نمود .

پياده سازي نسبي (partial)
اگر يك كلاس دربرگيرنده يك رابط باشد ، اما روش تعريف شده توسط آن رابط را
كاملا" پياده سازي نكند ، آنگاه آن كلاس بايد بعنوان abstract اعلان شود . بعنوان
مثال :

+ abstract class Incomplete implements Callback {
+ int a/ b;
+ void show )({
+ System.out.println(a + " " + b);
+ }
+ //...
+ }

در اينجا كلاس Incomplete روش ()callback را پياده سازي نميكند و بايد بعنوان abstract
اعلان شود. هر كلاسي كه ازIncomplete ارث ميبرد بايد يا روش ()callback
را پياده سازي نمايد و يا خودش بعنوان abstract اعلان شود .

بكار بردن رابطها
براي درك قدرت رابطها ، اجازه دهيد تا به يك مثال عملي تر بپردازيم . قبلا"
يك كلاس موسوم به stack را توسعه داديم كه يك پشته ساده و با اندازه ثابت را
پياده سازي مي كرد . اما ، راههاي متعددي براي پياده سازي يك پشته وجود دارد .
بعنوان مثال ، يك پشته ممكن است داراي اندازه ثابت و يا قابل گسترش باشد .
همچنين مي توان پشته را در يك آرايه ، يك فهرست پيوندي (kinded list)، يك درخت
دودوئي و امثالهم نگهداري نمود . مهم نيست كه پشته چگونه پياده سازي مي شود
رابط به پشته يكسان مي ماند . يعني روشهاي ()push و ()pop معرف رابط به پشته
هستند و اين رابطها مستقل از جزئيات پياده سازي مي باشند. چون رابط به يك پشته
از پياده سازي آن جدا مي باشد ، تعريف رابط يك پشته خيلي ساده است ، و هر
پياده سازي مشخصات خاص خود را تعريف خواهد كرد . به دو مثال نگاه كنيد .
اول اينكه در اينجا رابطي وجود دارد كه يك پشته عدد صحيح را تعريف مي كند .
آن را در يك فايل تحت نام IntStack.java قرار دهيد . اين رابط توسط هر دو نوع
پياده سازي پشته استفاده خواهد شد .

+ // Define an integer stack interface.
+ interface IntStack {
+ void push(int item); // store an item
+ int pop)(; // retrieve an item

برنامه بعدي يك كلاس تحت نام FixedStack ايجاد مي

+ // An implementation of IntStack that uses fixed storage.
+ class FixedStack implements IntStack {
+ private int stck[];
+ private int tos;
+
+ // allocate and initialize stack
+ FixedStack(int size ){
+ stck = new int[size];
+ tos =- 1;
+ }
+
+ // Push an item onto the stack
+ public void push(int item ){
+ if(tos==stck.length-1 )// use lenggth member
+ System.out.println("Stack is full.");
+ else
+ stck[++tos] = item;
+ }
+
+ // Pop an item from the stack
+ public int pop )({
+ if(tos < 0 ){
+ System.out.println("Stack underflow.");
+ return 0;
+ }
+ else
+ return stck[tos--];
+ }
+ }
+
+ class IFTest {
+ public static void main(String args[] ){
+ FixedStack mystack1 = new FixedStack(5);
+ FixedStack mystack2 = new FixedStack(8);
+
+ // push some numbers onto the stack
+ for(int i=0; i<5; i++ )mystack1.push(i);
+ for(int i=0; i<8; i++ )mystack2.push(i);
+
+ // pop those numbers off the stack
+ System.out.println("Stack in mystack1:");
+ for(int i=0; i<5; i++)
+ System.out.println(mystack1.pop))(;
+
+ System.out.println("Stack in mystack2:");
+ for(int i=0; i<8; i++)
+ System.out.println(mystack2.pop))(;
+ }
+ }

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

  + // Implement a "growable" stack.
+ class DynStack implements IntStack {
+   private int stck[];
+   private int tos;
+
+   // allocate and initialize stack
+   DynStack(int size ){
+     stck = new int[size];
+     tos =- 1;
+   }
+
+   // Push an item onto the stack
+   public void push(int item ){
+     // if stack is full/ allocate a larger stack
+     if(tos==stck.length-1 ){
+       int temp[] = new int(stck.length * 2]; // duble size
+       for(int i=0; i
  +       stck = temp;
+       stck[++tos] = item;
+     }
+     else
+       stck[++tos] = item;
+   }
+
+   // Pop an item from the stack
+   public int pop )({
+     if(tos < 0 ){
+       System.out.println("Stack underflow.");
+       return 0;
+     }
+     else
+       return stck[tos--];
+   }
+ }
+
+ class IFTest2 {
+   public static void main(String args[] ){
+     DynStack mystack1 = new FixedStack(5);
+     DynStack mystack2 = new FixedStack(8);
+
+     // these loops cause each stack to grow
+     for(int i=0; i<12; i++ )mystack1.push(i);
+     for(int i=0; i<20; i++ )mystack2.push(i);
+
+     System.out.println("Stack in mystack1:");
+     for(int i=0; i<12; i++)
+       System.out.println(mystack1.pop))(;
+
+     System.out.println("Stack in mystack2:");
+     for(int i=0; i<20; i++)
+       System.out.println(mystack2.pop))(;
+   }
+ }

كلاس بعدي هم از پياده سازي FixedStack و هم از DynStack استفاده مي كند .
اين كلاس اينكار را طريق تعريف يك ارجاع رابط انجام مي دهد. اين بدان معني است
كه فراخواني هاي ()push و ()pop در حين اجرا ( بجاي زمان كامپايل ) از سرگرفته
خواهد شد .

+ /* Create an interface variable and
+ access stacks through it.
+ */
+ class IFTest3 {
+ public static void main(String args[] ){
+ IntStack mystack; // create an interface reference variable
+
+ DynStack ds = new DynStack(5);
+ FixedStack fs = new FixedStack(8);
+
+ mystack = ds; // load dynamic stack
+ // push some numbers onto the stack
+ for(int i=0; i<12; i++ )mystack.push(i);
+
+ mystack = fs; // load fixed stack
+ for(int i=0; i<8; i++ )mystack.push(i);
+
+ mystak = ds;
+ System.out.println("Values in dynamic stack:");
+ for(int i=0; i<12; i++)
+ System.out.println(mystack.pop))(;
+
+ mystak = fs;
+ System.out.println("Values in fixed stack:");
+ for(int i=0; i<8; i++)
+ System.out.println(mystack.pop))(;
+ }
+ }

در اين برنامه ، mystack يك ارجاع است به رابط IntStack. بدين ترتيب ، هرگاه
آن به ds ارجاع ميكند، از روايتهاي ()push و ()pop تعريف شده بوسيله پياده سازي DynStack
استفاده مي كند . وقتي كه به fs ارجاع مي كند ، از روايتهاي ()push و
()pop كه بوسيله FixedStack تعريف شده ، استفاده مي كند . همانطوريكه توضيح
داديم ، تمام اسن تعيين كنندگيها در حين اجرا انجام مي گيرند . دسترسي به
پياده سازيهاي چندگانه از يك رابط از طريق يك متغير ارجاع رابط يكي از شيوه هاي
كاملا" قدرتمند جاوا براي رسيدن به چند شكلي در حين اجرا مي باشد .

متغيرها در رابطها
مي توانيد از رابطها براي وارد كردن ثابتهاي باشتراك گذاشته شده به كلاسهاي
چند گانه بسادگي از اعلان يك رابط كه دربرگيرنده متغيرهايي باشد كه با مقادير
دلخواه مقداردهي اوليه شده باشند، استفاده نماييد . وقتي كه آن رابط را در يك
كلاس مي گنجانيد ( يعني وقتي كه رابط را پياده سازي مي كنيد ) كليه اسامي آن
متغيرها بعنوان ثابت ها در قلمرو خواهند بود . اين كار مشابه استفاده از فايل feader
درC++/Cر براي ايجاد يك رقم بزرگ از ثابتهاي #defined و با اعلانات const
مي باشد. اگر يك رابط دربرگيرنده هيچ روشي نباشد، آنگاه هر كلاسي كه دربرگيرنده
آن رابط باشد در واقع چيزي را پياده سازي نمي كند . مثل اين است كه آن كلاس
متغيرهاي ثابت را به فضاي اسم كلاس بعنوان متغيرهاي final وارد مي كرده است .
مثال بعدي از اين تكنيك براي پياده سازي يك تصميم گيرنده خودكار automated)
(decision maker استفاده نموده است .

+ import java.Random;
+
+ interface SharedConstants {
+ int NO = 0;
+ int YES = 1;
+ int MAYBE = 2;
+ int LATER = 3;
+ int SOON = 4;
+ int NEVER = 5;
+ }
+
+ class Questionimplements SharedConstants {
+ Random rand = new Random)(;
+ int ask )({
+ int prob =( int( )100 * rand.nextDouble))(;
+ if( prob < 30)
+ return NO; // 30%
+ else if( prob < 60)
+ return YES; // 30%
+ else if( prob < 75)
+ return LATER; // 15%
+ else if( prob < 98)
+ return SOON; // 13%
+ else
+ return NEVER; // 2%
+ }
+ }
+
+ class AskMe implements SharedConstante {
+ static void answer(int result ){
+ switch(result ){
+ case NO:
+ System.out.println("No");
+ break;
+
+ case YES;
+ System.out.println("Yes");
+ break;
+ case MAYBE:
+ System.out.println("Maybe");
+ break;
+ case LATER:
+ System.out.println("Later");
+ break;
+ case SOON:
+ System.out.println("Soon");
+ break;
+ case NEVER:
+ System.out.println("Never");
+ break;
+ }
+ }
+
+ public static void main(String args[] ){
+ Question q = new Question)(;
+ answer(q.ask))(;
+ answer(q.ask))(;
+ answer(q.ask))(;
+ answer(q.ask))(;
+ }
+ }

دقت داشته باشيد كه اين برنامه از يكي ازكلاسهاي استاندارد جاوا يعني Random
استفاده ميكند. اين كلاس فراهم كننده اعداد شبه تصادفي است . اين كلاس دربرگيرنده
چندين روش است كه به شما امكان نگهداري ارقام تصادفي در شكل مورد نياز برنامه
آن را مي دهد . در اين مثال ، از روش ()nextDouble استفاده شده است . اين روش
اعداد تصادفي در محدوده 0.0تا 1.0ا را برمي گرداند .
در اين برنامه نمونه دو كلاس Questionو AskMeو هر دو رابط SharedConstants
را پياده سازي مي كنند ، جايي كه No، Yes، MAYBE، SOON، LATERو NEVERو تعريف
شده اند . داخل هر يك كلاس ، كد به اين ثابت ها مراجعه مي كند بطوريكه گويا هر
كلاس آنها را بطور مستقيم تعريف نموده يا مستقيما" از آنها ارث برده است . در
اينجا حاصل يك اجراي نمونه از اين برنامه را مشاهده مي كنيد . دقت كنيد كه
نتايج در هر بار اجرا متفاوت خواهد بود .

Later
Soon
No
Yes

رابطها را مي توان گسترش داد
يك رابط با استفاده از واژه كليدي extends مي تواند از يك رابط ديگر ارث
ببرد. دستور زبان مشابه كلاسهاي ارث برنده است . وقتي يك كلاس رابطي را پياده سازي
مي كند كه از رابط ديگري ارث برده است ، بايد پياده سازيهاي كليه روشهاي تعريف
شده داخل زنجيره وراثت را فراهم نمايد . مثالي را مشاهده مي كنيد :

+ // One interface can extend another.
+ interface A {
+ void meth1)(;
+ void meth2)(;
+ }
+
+ // B now includes meth1 )(and meth2 -- )(it adds meth3.)(
+ interface B extends A {
+ void meth3)(;
+ }
+
+ // This class must implement all of A and B
+ class MyClass implements B {
+ public void meth1 )({
+ System.out.println("Implement meth1.)(");
+ }
+
+ public void meth2 )({
+ System.out.println("Implement meth2.)(");
+ }
+
+ public void meth3 )({
+ System.out.println("Implement meth3.)(");
+ }
+ }
+
+ class IFExtend {
+ public static void main(String args[] ){
+ MyClass ob = new MyClass)(;
+
+ ob.meth1)(;
+ ob.meth2)(;
+ ob.meth3)(;
+ }
+ }

بعنوان يك تجربه ممكن است بخواهيد سعي كنيد تا پياده سازي ()meth1 را در
كلاس Myclass جابجا نماييد . اين عمل سبب بروز خطاي comile-time خواهد شد .
همانطوريكه قبلا" گفتيم ، هر كلاسي كه يك رابط را پياده سازي مي كند بايد كليه
روشهاي تعريف شده توسط آن رابط شامل هر كدام كه از ساير رابطها ارث برده اند را
پياده سازي نمايد .
بسته ها و رابطها هر دو بخش مهمي از محيط برنامه نويسي جاوا هستند . بطور واقعي نوشته شده با جاوا در داخل بسته ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


اداره استثنائات ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۸۵ مراجعه امروز
۴۴۰۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اداره استثنائات
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۷۶۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

اداره استثنائات

استثنائ (exception) يك شرايط غير طبيعي است كه در زمان اجرا در بين مراحل
مختلف يك كد حادث مي شود . بعبارت ديگر استثنائ يك خطاي حين اجرا است . در
زبانهاي كامپيوتري كه اداره استثنائ را پشتيباني نمي كنند ، خطاها بايد بصورت
دستي كنترل و اداره شوند معمولا" از طريق كدهاي خطا (error codes) و غيره .
اين شيوه بسيار طاقت فرسا و مشكل آفرين است . اداره استثنائ در جاوا از بروز
اين مشكلات درپردازش جلوگيري كرده و مديريت خطاي حين اجرا را در دنياي شي ئگرايي ي نمايد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


كتابخانه هاي كلاس جاوا The Java class libraries ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۸۸ مراجعه امروز
۴۴۰۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كتابخانه هاي كلاس جاوا The Java class libraries
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۱۱ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

كتابخانه هاي كلاس جاوا The Java class libraries

برنامه هاي نمونه ارائه شده در اين فصل از دو روش توكار موجود در جاوا يعني
()println و ()print استفاده نموده اند . همانطوريكه قبلا" عنوان شد اين دو روش
اعضائ كلاس system هستند كه بعنوان يك كلاس پيش تعريف شده در جاوا بطور خودكار
در برنامه هاي شما داخل خواهند شد . از نقطه نظر وسيعتر ، محيط جاوا متكي بر
چندين كتابخانه كلاس توكار است كه دربر گيرنده روشهاي متعدد توكاري هستند كه از
مواردي نظير l/o ، مديريت رشته ها ، شبكه بندي و گرافيك پشتيباني مي كنند .
كلاسهاي استاندارد همچنين از خروجي هاي پنجره اي نيز پشتيباني مي كنند . بدين
ترتيب جاوا در كل تركيبي است از خود زبان جاوا بعلاوه كلاسهاي استاندارد جاوا .
بعدا" خواهيد ديد كه كتابخانه هاي كلاس تامين كننده اكثر وظايفي هستند كه جاوا
بعهده گرفته است . در حقيقت ، بخشي از برنامه نويس جاوا شدن ، شامل آموزش ي استاندارد جاوا مي باشد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اصول اداره استثنائ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۹۱ مراجعه امروز
۴۴۰۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اصول اداره استثنائ
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۷۹۶ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

اصول اداره استثنائ

يك استثنائ در جاوا، شيئي است كه يك شرط استثنايي ( يعني يك خطا ) را كه در
قطعه اي از كد حادث شده ، توصيف مي كند . وقتي يك شرط استثنائ ايجاد مي شود
يك شي ئ كه آن استثنائ را معرفي مي كند ايجاد شده و در روشي كه آن خطا را ايجاد
نموده ، پرتاب مي شود (Thrown) . آن روش ممكن است استثنائ را خودش اداره نمايد
و يا از آن گذر كند . در هر صورت ، در نقطه اي استثنائ گرفته شده (caught) و
پردازش مي شود . استثنائات ممكن است توسط سيستم حين اجراي جاوا توليد شوند ، و
يا امكان دارد بصورت دستي توسط كدهاي شما بوجود آيند . استثنائات پرتاب شده
توسط جاوا با خطاهاي اصلي كه از قوانين زبان جاوا تخطي ميكنند و يا محدوديتهاي
محيط اجرايي جاوا را زير پا مي گذارند ، مرتبط هستند . استثنائات توليد شده
دستي نوعا" براي گزارش نمودن برخي شرايط خطا به فراخواننده يك روش استفاده
مي شوند .
اداره استثنائ در جاوا توسط پنج واژه كليدي اعمال مي شود : try، catch، throw
، throws،و finallyو . بطور خلاصه عملكرد آنها را توضيح مي دهيم . دستورات
برنامه اي كه مايليد براي استثنائات نشان دهيد داخل يك بلوك try گنجانده ميشوند.
اگر داخل اين بلوك يك استثنائ حادث شود ، پرتاب خواهد شد . كد شما مي تواند
اين استثنائ را توسط catch گرفته و آن را بروشي منطقي اداره نمايد. استثنائات
توليد شده توسط سيستم بطور خودكار توسط سيستم حين اجراي جاوا پرتاب مي شوند .
براي اينكه يك استثنائ را بصورت دستي پرتاب كنيم ، از واژه كليدي throw استفاده
مي كنيم . هر استثنايي كه بيرون از يك روش پرتاب مي شود بايد توسط يك جمله throws
مشخص شود . هر كدي كه بايد كاملا" قبل از برگردانهاي يك روش اجرا شود
در يك بلوك finally قرار داده مي شود .
شكل عمومي يك بلوك اداره استثنائ بصورت زير مي باشد :

try {
// block of code to monitor for errors
}

catch( Exception Type1 exOb ){
// exception handler for Exception Type1
}

catch( Exception Type2 exOb ){
// exception handler for Exception Type2
}
//...
finally {
// block of code to be executed before try block ends
}

استثنايي است كه حادث شده است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


انواع استثنائ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۹۴ مراجعه امروز
۴۴۱۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انواع استثنائ
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۶۷ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

انواع استثنائ

كليه انواع استثنائ زير كلاسهايي از كلاس توكار throwable مي باشند. بنابراين throwable
در بالاي سلسله مراتب كلاس استثنائ (exception) قرار دارد . بلافاصله
پس از throwable دو زير كلاس وجود دارند كه استثنائات را به دو شاخه مجزا تقسيم
مي كنند ، سر عنوان يك شاخه Exception است . اين كلاس براي شرايط استثنايي كه
برنامه هاي كاربر بايد بگيرد ، استفاده مي شود . همچنين از اين كلاس ، زير كلاسي
مي سازيد تا انواع استثنائ سفارشي خودتان را ايجاد نماييد . يك زير كلاس با
اهميت از Exception تحت عنوان RuntimeException وجود دارد . استثنائات اين نوع
براي برنامه هايي كه شما مي نويسيد و مواردي نظير " تقسيم بر صفر "و "و نمايه
سازي غير معتبر آرايه " را در آن مي گنجانيد ، بطور خودكار تعريف مي شود .
شاخه ديگر تحت عنوان Error است كه استثنائاتي را تعريف مي كند كه انتظار
نداريم . تحت شرايط عادي توسط برنامه شما گرفته شوند . استثنائات از نوع Error
توسط سيستم حين اجراي جاوا براي نشان دادن خطاهايي كه با خود محيط حين اجراي
جاوا سر و كار دارند ، استفاده مي شود . سرريزي پشته نمونه اي از اين خطاهاست .
استثنائات نوع Error نوعا"در پاسخ به شكستهاي مصيبت باري كه معمولا"توسط برنامه اره آنها نيست ، بوجود مي آيند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


استثنائات گرفته نشده Uncaught Exceptions ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۵۹۷ مراجعه امروز
۴۴۱۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استثنائات گرفته نشده Uncaught Exceptions
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۰۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استثنائات گرفته نشده Uncaught Exceptions

قبل از اينكه بياموزيد كه چگونه استثنائات را در برنامه اتان اداره نماييد
بهتر است كه بفهميد در صورت عدم اداره استثنائات چه اتفاقي مي افتد . برنامه
ساده بعدي دربرگيرنده يك عبارت است كه بعمد باعث يك خطاي تقسيم بر صفر مي شود.

+ class Exc0 {
+ public static void main(String args[] ){
+ int d = 0;
+ int a = 42 / d;
+ }
+ }

وقتي سيستم حين اجراي جاوا تلاش خود براي انجام تقسيم برصفر را آشكار ميسازد
يك شي ئ ، استثنائ جديدي ساخته و سپس آن را پرتاب مي كند (throws) . اين كار
باعث توقف اجراي EXC0 مي گردد ، زيرا يكبار كه يك استثنائ پرتاب شود ، بايد
توسط يك اداره كننده استثنائ گرفته شده (caught by an exception handler) و
بلافاصله براي آن كاري انجام گيرد. دراين مثال ، ما اداره كننده استثنائ خودمان
را عرضه نكرده ايم ، بنابراين استثنائ توسط اداره كننده پيش فرض ( فراهم آمده
بوسيله سيستم حين اجراي جاوا ) گرفته شده است . هر استثنائي كه توسط برنامه
شما گرفته نشود ، در نهايت توسط اداره كننده پيش فرض پردازش خواهد شد . اداره
كننده پيش فرض ، يك رشته كه استثنائ را توصيف نموده نمايش مي دهد ، يك ردياب
پشته (stack tracer) از نقطه اي كه در آن استثنائ اتفاق افتاده چاپ مي نمايد و
برنامه را ختم مي كند .
اين برنامه هنگاميكه مثال فوق توسط مفسر حين اجراي جاوا JDK اجرا مي شود
حاصل زير را توليد مي كند :

java.lang.ArithmeticException :/ by zero
at Exc0.main(Exc0.java:4)

توجه فرماييد كه چگونه نام كلاس ، EXC0، نام روش ، main، نام فايل ، EXC0.java
و شماره خط ، 4 ، همگي در رديابي ساده اين پشته گنجانده شده اند . همچنين دقت
نماييد كه نوع استثنائ پرتاب شده يك زير كلاس از Exception تحت عنوان Arithmetic Exception
مي باشد كه خيلي دقيق توضيح مي دهد كه چه نوع خطايي اتفاق افتاده
است . همانطوريكه قبلا" توضيح داديم ، جاوا چندين نوع استثنائ توكار را عرضه
مي كند كه با انواع گوناگون خطاهاي حين اجرا كه احتمالا" توليد ميشوند، مطابقت
مي يابند .
ردياب پشته هميشه سلسله فراخوانيهاي روش كه منجر به بروز خطا شده اند را
نمايش مي دهد . بعنوان مثال ، يك روايت ديگر از مثال قبلي را مشاهده مي كنيد
كه همان خطا را معرفي مي كند اما در روشي جدا از ()main :

+ class Exc1 {
+ static void subroutine )({
+ int d = 0;
+ int a = 10 / d;
+ public static void main(String args[] ){
+ Exc1.subroutine)(;
+ }
+ }

ردياب رشته بدست آمده از اداره كننده پيش فرض استثنائ نشان مي دهد كه چگونه
پشته فراخواني كل بنمايش درآمده است :

java.lang.ArithmeticException :/ by zero
at Exc1.subroutine(Exc1.java:4)
at Exc1.main(Exc1.java:7)

همانطوريكه مي بينيد ، پايين پشته خط 7 روش main وجود دارد كه تحت عنوان Subroutine
است و سبب بروز خطا در خط 4 شده است . پشته فراخوان براي اشكال زدايي
(debugging) كاملا" مفيد است ، زيرا سلسله دقيق مراحلي را كه منجربه خطا شده اند

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از tryو catchو ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۰۰ مراجعه امروز
۴۴۱۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از tryو catchو
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۶۰ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

استفاده از tryو catchو

اگرچه اداره كننده پيش فرض استثنائ فراهم شده توسط سيستم حين اجراي جاوا
براي اشكال زدايي مفيد است ، اما معمولا" بدنبال آن هستيد تا يك استثنائ خودتان
اداره نماييد . انجام اين كار دو مزيت دارد . اول اينكه امكان تثبيت خطا را
داريد . دوم اينكه ، اينكار مانع ختم خودكار برنامه خواهد شد . اگر هر بار كه
در برنامه شما خطايي بروز مي كند ، برنامه اتان متوقف شده و يك ردياب پشته چاپ
نمايد، آنگاه اكثر كاربران برنامه اتان گيج و سردرگم ميشوند. خوشبختانه جلوگيري
از چنين حالتي بسيار ساده است .
براي جلوگيري از اين وضعيت و اداره يك خطاي حين اجرا ، خيلي ساده كدي را كه
مي خواهيد نمايش دهيد (monitor) داخل يك بلوك try قرار دهيد . بلافاصله بعد از
اين بلوك ، يك جمله catch قرار دهيد كه نوع استثنائي را كه مايليد بگيرد
مشخص مي كند . براي اينكه سهولت اينكار را نشان دهيم ، برنامه بعدي را نگاه
كنيد كه دربرگيرنده يك بلوك try و يك جمله catch ميباشد كه ArithmeticException
توليد شده توسط خطاي تقسيم بر صفر را پردازش مي كند .

+ class Exc2 {
+ public static void main(String args[] ){
+ int d/ a;
+ try { // monitor a block of code.
+ d = 0;
+ a = 42 / d;
+ System.out.println("This will not be printed.");
+ } catch( ArithmeticException e ){ // catch divide-by-zero error
+ System.out.println("Division by zero.");
+ }
+ System.out.println("After catch statement.");
+ }
+ }

خروجي اين برنامه بقرار زير مي باشد :

Division by zero.
After catch statement.

دقت نماييد كه فراخواني ()println داخل بلوك try هرگز اجرا نمي شود. هر بار
كه يك استثنائ پرتاب مي شود، برنامه ، انتقالات خارج از بلوك try به بلوك catch
را كنترل مي كند . بعبارت بهتر، catch فراخواني نمي شود بنابراين اجرا هرگز از
يك catch به بلوك try برنمي گردد . بنابراين ، خط "This will not be printed"
بنمايش در نمي آيد . هر بار كه دستور catch اجرا شود ، كنترل برنامه با خط
بعدي برنامه تعقيب كننده مكانيسم كل try/catch ادامه خواهد يافت .
يك دستور tryو catchو يك واحد (unit) تشكيل مي دهند . قلمرو جمله catch
محدود شده به آن دستوراتي است كه بلافاصله قبل از دستور try مشخص شده اند . يك
دستور catch نمي تواند استثنائ پرتاب شده توسط يك دستور ديگر try را بگيرد
( مگر در حالت دستورات تودرتو شده try كه باختصار توضيح داده ايم ) . دستوراتي
كه بوسيله try محافظت مي شوند . بايد توسط ابروها احاطه شوند . ( يعني آنها
بايد داخل يك بلوك قرار گيرند. ) نمي توانيد ازtry روي يك دستور منفرد استفاده
نماييد . اين تغيير در روايت 1.0.2از JDKز معرفي شده است .
هدف اكثر جملات خوش ساخت catch بايد اين باشد كه شرط استثنايي رااز سر گرفته
و سپس طوري برنامه را ادامه دهد كه گويا خطا هرگز اتفاق نيفتاده است . بعنوان
مثال ، در برنامه بعدي هر تكرار حلقه for دو عدد صحيح تصادفي را كسب مي كند .
آن دو عدد صحيح بر يكديگر تقسيم شده و جواب آن براي تقسيم عدد 12345 استفاده
مي شود . جواب نهايي در a قرار مي گيرد . اگر هر يك از عمليات تقسيم منجر به
خطاي " تقسيم بر صفر " شود ، آن خطا گرفته شده و مقدار a برابر صفر قرار گرفته
و برنامه ادامه مي يابد .

+ // Handle an exception and move on.
+ import java.util.Random;
+
+ class HandleError {
+ public static void main(String args[] ){
+ int a=0/ b=0/ c=0;
+ Random r = new Random)(;
+
+ for(int i=0; i<23000; i++ ){
+ try {
+ b = r.nextInt)(;
+ c = r.nextInt)(;
+ a = 12345 /( b/c);
+ } catch( ArithneticException e ){
+ System.out.println("Division by zero.");
+ a = 0; // set a to zero and continue
+ }
+ System.out.println("a :" + a);
+ }
+ }
+ }

نمايش توصيفي از يك استثنائ Throwable
روش ()toString ( تعريف شده بوسيله object ) را لغو ميكند بطوريكه
يك رشته دربرگيرنده توصيفي از استثنائ را برمي گرداند. مي توانيد خيلي ساده با
گذر دادن استثنائ بعنوان يك آرگومان ، اين توصيف را در يك دستور ()println به
نمايش بگذاريد. بعنوان مثال ، بلوك catch در برنامه قبلي را مي توان بصورت زير
دوباره نويسي نمود .

+ catch( ArithmeticException e ){
+ System.out.println("Exception :" + e);
+ a = 0; / set a to zero and continue
+ }

وقتي اين روايت را در برنامه جايگزين نماييد ، و برنامه تحت مفسر JDK جاوا
اجرا شود ، هر خطاي تقسيم بر صفر ، پيام بعدي را نمايش خواهد داد :

Exception :java.lang.ArethmeticException :/ by zero

توانايي نمايش توصيفي از يك استثنائ اگرچه در اين متن ارزش خاصي ندارد، اما
در ساير شرايط بسيار ارزشمند است بخصوص هنگام كار با استثنائات يا هنگام
اشكال زدايي .

جملات catch چند گانه
در بعضي مواقع از يك قطعه كوچك كد بيش از يك استثنائ بوجود مي آيد . براي
اداره چنين شرايطي ، مي توانيد دو يا چند جمله catch مشخص نماييد كه هر كدام
يك نوع متفاوت از استثنائ بگيرند . وقتي يك استثنائ پرتاب مي شود ، هر دستور catch
بترتيب امتحان مي شود، و اولين دستوري كه نوع آن با نوع استثنائ مطابقت
داشته باشد ، اجرا خواهد شد . بعد از اجراي يك دستور catch، ساير دستورات پشت
سر گذاشته مي شوند و اجراي بعد از بلوك try/catch ادامه خواهد يافت . برنامه
بعدي دو نوع استثنائ مختلف را بدام مي اندازد :

+ // Demonstrate multiple catch statements.
+ class MultiCatch {
+ public static void main(String args[] ){
+ try {
+ int a = args.length;
+ System.out.println("a = " + a);
+ int b = 42 / a;
+ int c[] = { 1 };
+ c[42] = 99;
+ } catch(ArithmeticException e ){
+ System.out.println("Divide by 0 :" + e);
+ } catch(ArrayIndexOutOfBoundsException e ){
+ System.out.println("Array index oob :" + e);
+ }
+
+ System.out.println("After try/catch block.");
+ }
+ }

چون a مساوي صفر مي شود، اين برنامه اگر بدون پارامترهاي خط فرمان آغاز شود
منجر به يك استثنائ " تقسيم بر صفر " خواهد شد. اگر يك آرگومان خط فرمان بوجود
آوريد وa را معادل مقداري بزرگتر از صفر قرار دهيد، برنامه شما تقسيم را نجات
مي دهد . اما اين برنامه سبب ArrayIndexOutOfBoundsException مي گردد ، چون
آرايه C از نوع int داراي طول 1 است ، همچنان برنامه تلاش مي كند تا مقداري را
به C[42] منسوب نمايد .
در اينجا خروجي توليد شده بوسيله اجراي هر دو راه را مشاهده مي كنيد :

C:\>java MultiCatch
a = 0
Divide by 0 :java.lang.ArithmeticException :/ by zero
After try/catch blocks.

C:\>java MultiCatch TestArg
a = 1
Array index oob java.lang.ArrayIndexOutOfBoundsException :42
After try/catch blocks.

وقتي از دستورات catch چند گانه استفاده مي كنيد ، مهم است بدانيد كه
زير كلاسهاي استثنائ بايد قبل از هر يك از كلاس بالاهاي مربوطه قرار گيرند . اين
بدان دليل است كه يك دستور catch كه از يك كلاس بالا استفاده مي كند، استثنائات
آن نوع و زير كلاسهاي آن نوع را خواهد گرفت . بنابراين ، اگر يك زير كلاس بعد از
كلاس بالايش بيايد ، هرگز به آن زير كلاس نمي رسد. بعلاوه ، در جاوا ، كد غير قابل
دسترس نوعي خطا است . بعنوان مثال ، برنامه بعدي را در نظر بگيريد :

+ /* This program contains an error.
+
+ A subclass must come befor its superclass in
+ a series of catch statements .If not/
+ unreachable code will be created and a
+ comple-time error will result.
+ */
+ class SuperSubCatch {
+ public static void main(String args[] ){
+ try {
+ int a = 0;
+ int b = 42 / a;
+
+ } catch(Eeception e ){
+ System.out.println("Generic Exception catch.");
+ }
+ /* This catch is never reached because
+ ArithmeticException is a subclass of Exception .*/
+ catch(ArithmeticException e ){ // ERROR - unreachable
+ System.out.println("This is never reached.");
+ }
+ }
+ }

اگر بخواهيد اين برنامه را كامپايل كنيد ، يك پيغام خطا دريافت مي كنيد كه
ميگويد دومين دستورcatch غيرقابل رسيدن است . از آنجاييكه ArithneticException
يك زيركلاس از Exception است ،اولين دستور catch كليه خطاهاي برمبناي Exception
از جمله ArithneticException را اداره ميكند. بدين ترتيب دومين دستورcatch كوس كنيد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستورات تودرتو شده try ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۰۳ مراجعه امروز
۴۴۱۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستورات تودرتو شده try
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۷۶۷ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

دستورات تودرتو شده try

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

+ // An example of nested try statements.
+ class NestTry {
+ public static void main(String args[] ){
+ try {
+ int a = args.length;
+
+ /* If no command-line args are present/
+ the following statement will generate
+ a divide-by-zero exception .*/
+ int b = 42 / a;
+
+ System.out.println("a = " + a);
+
+ try { // nested try block
+ /* If one command-line arg is used/
+ then a divide-by-zero exception
+ will be generated by the following code .*/
+ if(a==1 )a = a/(a-a); // division by zero
+
+ /* If two command-line args are used/
+ then generate an out-of-bounds exception .*/
+ if(a==2 ){
+ int c[] = { 1 };
+ c[42] = 99; // generate an out-of-bounds exception
+ }
+ } catch(ArrayIndexOutOfBoundsException e ){
+ System.out.println("Array index out-of-bounds :" + e)
+ }
+
+ } catch(ArithmeticException e ){
+ System.out.println("Divide by 0 :" + e);
+ }
+ }
+ }

همانطوريكه مشاهده مي كنيد، يك بلوك try را داخل ديگري جاي مي دهد . برنامه
بصورت زير كار مي كند . وقتي برنامه را بدون آرگومانهاي خط فرمان اجرا مي كنيد
يك استثنائ " تقسيم بر صفر " توسط بلوك خارجي تر try ايجاد مي شود . اجراي
برنامه توسط يك آرگومان خط فرمان يك استثنائ " تقسيم بر صفر " را از داخل
بلوك تودرتو شده try توليد مي كند. چون بلوك داخلي تر اين استثنائ را نمي گيرد
استثنائ به بلوك خارجي تر try گذر داده مي شود و در آنجا اداره خواهد شد . اگر
برنامه را بدون آرگومانهاي خط فرمان اجرا نماييد، يك استثنائ " محدوده آرايه "
از داخل بلوك داخلي تر try توليد خواهد شد. در زير اجراهاي نمونه اي وجود دارند
كه هر يك از حالات فوق را نشان مي دهند :

C:\>java NestTry
Divide by 0 :java.lang.ArihmeticException :/ by zero

C:\>java NestTry One
a = 1
Divide by 0 :java.lang.ArihmeticException :/ by zero

C:\>java NestTry One Two
a = 2
Array index out-of-bounds:
java.lang.ArrayIndexOutOfBoundsException :42

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

+ /* Tyr statements can be implicitly nested via
+ calls to methods .*/
+ class MethNestTry {
+ static void nesttry(int a ){
+ try { // mested try block
+ /* If one command-line arg is used/
+ then a divide-by-zero exception
+ will be generated by the following code .*/
+ if(a==1 )a = a/(a-a); // division by zero
+
+ /* If two command-line args are used/
+ then generate an out-of-bounds exception .*/
+ if(a==2 ){
+ int c[] = { 1 };
+ c[42] = 99; // generate an out-of-bounds exception
+ }
+ } catch(ArrayIndexOutOfBoundsException e ){
+ System.out.println("Array index out-of-bounds :" + e)
+ }
+ }
+
+ public static void main(String args[] ){
+ try {
+ int a = args.length;
+
+ /* If no command-line args are present/
+ the following statement will generate
+ a divide-by-zero exception .*/
+ int b = 42 / a;
+
+ System.out.println("a = " + a);
+
+ nesttry(a);
+ } catch(ArithmeticException e ){
+ System.out.println("Divide by 0 :" + e);
+ }
+ }
+ }

ه همان مثال قبلي است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


Throw ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۰۶ مراجعه امروز
۴۴۲۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Throw
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۲۳ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

Throw

تا بحال شما فقط گرفتن استثنائاتي كه توسط سيستم حين اجراي جاوا پرتاب شده
را ديده ايد . اما برنامه شما مي تواند يك استثنائ را بطور صريح با استفاده از
دستور throw پرتاب نمايد . شكل عمومي throw بقرار زير مي باشد :

ThrowThrowableInStance;

در اينجا Throwable Instance بايد يك شي ئ از نوع throwable يا يك زير كلاس
از throwable باشد . انواع ساده ، نظير intيا charا ، همچون كلاسهاي غير از throwable
نظير stringو objectو نميتوانند بعنوان استثنائات استفاده شوند.
دو شيوه براي بدست آوردن يك شي ئ throwable وجود دارد : استفاده از يك پارامتر
داخل جمله catch و يا ايجاد يك شي ئ جديد با عملگر new .
جريان اجرا بلافاصله بعد از دستور throw متوقف مي شود . دستورات بعدي اجرا
نخواهند شد. نزديكترين بلوك بسته شده try مورد جستجو قرار مي گيرد تا يك دستور catch
پيدا شود كه با نوع استثنائ مطابقت داشته باشد . اگر مطابقت حاصل شود
كنترل به آن دستور منتقل مي شود . اگر مطابقت پيدا نشود ، آنگاه دستور بعدي
بسته شده try مورد جستجو قرار مي گيرد ، و همينطور الي آخر . اگر هيچ catch
مطابقت كننده اي پيدا نشود ، آنگاه اداره كننده پيش فرض استثنائ مكثي به برنامه
داده و ردياب پشته را چاپ مي كند .
در اينجا يك برنامه نمونه مشاهده مي كنيد كه يك استثنائ را ايجاد و پرتاب
مي نمايد . اداره كننده اي كه اين استثنائ را مي گيرد ، مجددا" آن را به اداره
كننده بيروني پرتاب خواهد نمود .

+ // Demonstrate throw.
+ class ThrowDemo {
+ static void demoproc )({
+ try {
+ throw new NullPointerException("demo");
+ } catch(NullPointerException e ){
+
+ system.out.println("Caught inside demoproc.");
+ throw e; // rethrow the exception
+ }
+ }
+
+ public static void main(String args[] ){
+ try {
+ demoproc)(;
+ } catch(NullPointerException e ){
+ System.out.println("Recaught :" + e);
+ }
+ }
+ }

اين برنامه دو شانس براي كار با يك خطاي مشترك دارد . اول ، ()main يك متن
استثنائ تنظيم مي كند و سپس ()demoproc را فراخواني مي كند . روش ()demoproc
آنگاه يك متن ديگر اداره كننده استثنائ را تنظيم نموده و بلافاصله يك نمونه جديد
از NullpointerException را پرتاب مي كند كه روي خط بعدي گرفته خواهد شد .
مجددا" استثنائ پرتاب خواهد شد . حاصل بقرار زير خواهد شد .

Caught inside demoproc
Recaught :java.lang.NullPointerException :demo

برنامه همچنين نشان مي دهد چگونه يكي از اشيائ استنائ استاندارد جاوا ايجاد
مي شود توجه بيشتري به اين خط داشته باشيد :

+ throw new NullPointerException("demo");

در اينجا، new استفاده شده تا يك نمونه از NullpointerException ساخته شود.
كليه استثنائات حين اجراي توكار جاوا دو سازنده دارند: يكي بدون پارامتر و يكي
با يك پارامتر رشته اي . وقتي از شكل دوم استفاده مي شود ، آرگومان يك رشته را
مشخص مي كند كه استثنا. را توصيف مي نمايد . وقتي كه شي ئ بعنوان يك آرگومان به
()print يا ()println استفاده مي شود ، اين رشته بنمايش درمي آيد. اين رشته را
همچنين مي توان بوسيله يك فراخواني ()getMessage كه توسط Throwable توصيف شده
بدست آورد .

Throws

اگر يك روش ظرفيت ايجاد يك استثنائ را دارد و آن را اداره نمي كند، آن روش
بايد اين رفتار خود را مشخص نمايد بگونه اي كه فراخوانان آن روش خودشان را در
مقابل استثنائات محافظت نمايند . اينكار با گنجاندن يك جمله Throws در اعلان
روش انجام ميگيرد. يك جمله throws انواع استثنائاتي كه يك روش ممكن است پرتاب
نمايد و فهرست بندي مي كند . اينكار براي كليه استثنائات شروري است ، بغير از
انواع Errorيا RuntimeExceptionا ، يا استثنائات مربوط به زير كلاسهاي آنها .
كليه ساير استثنائاتي كه يك روش مي تواند پرتاب نمايد ، بايد در جمله throws
اعلان شوند . اگر اينكار انجام نشود ، يك خطاي (compile-time) حاصل خواهد شد .
شكل عمومي يك اعلان روش كه دربرگيرنده جمله throws باشد ، بصورت زير است :

type method-name(parameter-list )throws exception-list
{
// body of method
}

در اينجاexception-list يك فهرست جدا شده با كاما از استثنائاتي است كه يك
روش مي تواند پرتاب نمايد .
مثال بعدي يك برنامه ناصحيح است كه تلاش مي كند يك استثنائ را كه نمي تواند
بگيرد، پرتاب نمايد. چون برنامه يك جمله throws را مشخص نمي كند تا اين حقيقت
را اعلان نمايد ، برنامه كامپايل نخواهد شد :

+ // This program contains an error and will not compile.
+ class ThrowsDemo {
+ static void throwOne )({
+ System.out.println("Inside throwOne.");
+ throw new IllegalAccessException("demo");
+ }
+ public static void main(String args[] ){
+ throwOne)(;
+ }
+ }

براي كامپايل نمودن اين مثال ، بايد دو متغير بوجود آوريد . ابتدا ، لازم
است اعلان كنيد ()throwOne روشي است كه IllegalAccessException را پرتاب
مي نمايد . دوم ، روش ()main بايد يك دستور try/catch تعريف نمايد كه اين
استثنائ را بگيرد .

+ // This is now correct.
+ class ThrowsDemo {
+ static void throwOne )(throws IllegalAccessException {
+ System.out.println("Inside throwOne.");
+ throw new IllegalAccessException("demo");
+ }
+ public static void main(String args[] ){
+ try {
+ throwOne)(;
+
+ } catch( IllegalAccessException e ){
+ System.out.println("Caught " + e);
+ }
+ }
+ }

اجراي اين برنامه ، خروجي زير را توليد مي كند :

inside throwOne

کيفيت مقاله :
عالی خوب متوسط ضعيف


finally ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۰۹ مراجعه امروز
۴۴۲۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
finally
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۲۷ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

finally

وقتي استثنائات پرتاب مي شوند ، اجرا در روش تا حدي انقصال و قطعي پيدا
مي كند مسير غير خطي كه جريان طبيعي روش را تغيير مي دهد . بسته به اينكه
روش چگونه كد بندي شده باشد ، حتي امكان دارد كه يك استثنائ باعث شود تا روش
نابهنگام برگردد . در برخي روشها چنين مشكلي ممكن است پيش آيد . بعنوان مثال
اگر يك روش فايلي را هنگام ورود باز نموده و هنگام خروج آن را ببندد ، آنگاه
شما مايل نيستيد كدي كه فايل را مي بندد بوسيله مكانيسم اداره استثنائ پشت سر
گذاشته شود. واژه كليدي finally طراحي شده تا اين احتمال وقوع را شناسايي كند. finally
يك بلوك كد ايجاد مي كند كه بعد از اينكه يك بلوك try/catch تكميل
شده و قبل از كد تعقيب كننده بلوك try/catch اجرا خواهد شد . بلوك finally چه
يك استثنائ پرتاب شود چه نشود ، اجرا خواهد شد . اگر يك استثنائ پرتاب شود
بلوك finally اجرا خواهد شد حتي اگر هيچيك از دستورات catch با استثنائمطابقت
نداشته باشند .
هرگاه يك روش نزديك است كه از داخل يك بلوك try/catch به فراخواننده برگردد
توسط يك استثنائ گرفته نشده يا كي دستور برگشت صريح ، جمله finally همچنين قبل
از برگشتهاي روش اجرا خواهد شد . اينكار ممكن است براي بستن دستگيره هاي فايل و
آزاد كردن ساير منابعي كه ممكن است درابتداي يك روش با هدف معين كردن آنها قبل
از برگشت دادن بسيار مفيد باشد . جمله finally اختياري است . اما هر دستور try
مستلزم حداقل يك جمله catch يا يك جمله finally مي باشد .
در اينجا برنامه اي وجود دارد كه سه روش موجود در سه راه را نشان مي دهد كه
هيچيك از آنها بدون اجراي جملات finally خود هستند .

+ // Demonstrate finally.
+ class FinallyDemo {
+ // Through an exception out of the method.
+ static void procA )({
+ try {
+ System.out.println("inside procA");
+
+ throw new RuntimeException("demo");
+ } finally {
+ System.out.println("procA's finally");
+ }
+ }
+
+ // Return from within a try block.
+ static void procB )({
+ try {
+ System.out.println("inside procB");
+ return;
+ } finally {
+ System.out.println("procB's finally");
+ }
+ }
+
+ // Execute a try block normally.
+ static void procC )({
+ try {
+ System.out.println("inside procC");
+ } finally {
+ System.out.println("procC's finally");
+ }
+ }
+
+ public static void main(String args[] ){
+ try {
+ procA)(;
+ } catch( Eeception e ){
+ System.out.println("Exception caught");
+ }
+ procB)(;
+ procC)(;
+ }
+ }

در اين مثال ، ()procA با پرتاب يك استثنائ، بطور نابهنگام try را مي شكند.
جمله finally روي خارج راه اجرا مي شود . دستور try مربوط به ()procB توسط يك
دستور return اجرا مي شود . جمله finally قبل از اينكه ()procB برگشت نمايد
اجرا مي شود . در ()procC دستور try بطور طبيعي و بدون خطا اجرا مي شود . اما
بلوك finally همچنان اجرا شده است .
يادآوري : اگر يك بلوك finally با يك try همراه باشد ، بلوك finally براساس
نتيجه try اجرا خواهد شد .
در زير خروجي حاصل از برنامه قبلي را مشاهده مي كنيد :

inside procA
procA's finally
Exception caught
inside procB
procB's finally
inside procC

کيفيت مقاله :
عالی خوب متوسط ضعيف


استثنائات توكار جاوا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۱۲ مراجعه امروز
۴۴۲۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استثنائات توكار جاوا
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۱۶ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استثنائات توكار جاوا

داخل بسته نرم افزاري استاندارد java.lang ، جاوا چندين كلاس استثنائ را
تعريف مي كند . چند تا از اين كلاسها در مثالهاي قبلي استفاده شدند. عمومي ترين
اين استثنائات زير كلاسهاي نوع استاندارد RuntimeException مي باشند . بعلاوه
لزومي ندارد آنها در هر فهرست throws مربوط به يك روش گنجانده شوند . در زبان
جاوا ، اينها را استثنائات كنترل شده (unchecked exception) مي نامند . زيرا
كامپايلر كنترل نمي كند كه آيا يك روش اين استثنائات را اداره مي كند يا آنها
را پرتاب مي نمايد . آنها را در جدول 1 فهرست نموده ايم . جدول 2 آن استثنائاتي
را فهرست مي كند كه توسط java.lang تعريف شده اند و بايد در يك فهرست throws
مربوط به روش گنجانده شوند ، اگر آن روش بتواند يكي از اين استثنائات را توليد
نموده ، اما خودش آن را اداره نكند . اين استثنائات را استثنائات كنترل شده
(checked exceptions) مي نامند . جاوا چندين نوع ديگر از استثنائات را تعريف
مي كند كه با كتابخانه هاي گوناگون كلاس جاوا مرتبط هستند .

جدول 1 : زير كلاسهاي كنترل نشده RuntimeException در جاوا

مفهوم آن استثنائ
خطاي جبري ، مثل تقسيم بر صفر ArithmeticException
نمايه آرايه خارج از محدوده است ArrayIndexOutOfBoundsException
انتساب به يك عضو آرايه از يك نوع سازگار ArrayStoreException
تبديل cast فير معتبر ClassCastException
آرگومان غير مجاز استفاده شده براي IllegalArgumentException
فراخواني مجدد يك روش
عمليات ناشي غير مجاز ، نظير منتظر ماندن IllegalMonitorStateException
روي يك بند قفل نشده (unlocked thread) .
عمليات درخواست شده ناسازگار با وضعيت IllegalThreadStateException
بند جاري
برخي انواع نمايه خارج از محدوده است . IndexOutOfBoundsException
آرايه ايجاد شده با يك اندازه منفي NegativeArrayException
كاربرد غير معتبر از يك مرجع تهي NullpointerException
تبديل غير معتبر يك رشته به يك فرمت رقمي NumberFormatException
تلاش براي نقض امنيت SecurityException

جدول 2 : استثنائات كنترل شده توكار در جاوا

مفهوم آن استثنائ
كلاس پيدا نشده است . ClassNotFoundException
تلاش براي توليد مثل يك شي ئ كه رابط CloneNotSupportedException cloneable
را پياده سازي نمي كند .
دسترسي به يك كلاس انكار شده است . IllegalAccessException
تلاش براي ايجاد يك شي ئ از يك كلاس يا يك InstantiationException
رابط abstract . ده است . InterruptedException

کيفيت مقاله :
عالی خوب متوسط ضعيف


مروري بر جاوا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۱۵ مراجعه امروز
۴۴۳۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مروري بر جاوا
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۹۷ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

مروري بر جاوا

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


ايجاد نمودن زير كلاسهاي استثنائ مربوط به خودتان ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۱۸ مراجعه امروز
۴۴۳۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ايجاد نمودن زير كلاسهاي استثنائ مربوط به خودتان
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۲۲ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

ايجاد نمودن زير كلاسهاي استثنائ مربوط به خودتان

اگرچه استثنائات توكار جاوا اكثر خطاهاي رايج را اداره مي كنند ، احتمال
دارد بخواهيد انواع استثنائ مربوط به خودتان را ايجاد كنيد تا شرايط مشخص پيش
آمده در برنامه هاي شما را اداره كنند . انجام اينكار بسيار ساده است : فقط يك
زيركلاس ازException تعريف نماييد ( كه البته يك زيركلاس ازThrowable مي باشد ).
زير كلاسهاي شما لزومي ندارند تا واقعا" چيزي را پياده سازي كنند .
كلاس Exception هيچگونه روشي براي خود تعريف نمي كند . البته اين كلاس از
روشهاي فراهم شده توسط Throwable ارث مي برد . بدين ترتيب كليه استثنائات
شامل آنهاييكه شما ايجاد كرده ايد ، داراي روشهايي هستند كه توسط Throwable
تعريف شده و در دسترس آنها مي باشند آنها را در جدول زير نشان داده ايم . همچنين
ممكن است بخواهيد يك يا چند تا از اين روشها را در كلاسهاي استثنايي كه ايجاد
كرده ايد ، لغو نماييد .

جدول : روشهاي تعريف شده توسط Throwable

توصيف روش

يك شي ئ Throwable را كه شامل يك ردياب ()ThrowablefillinStackTrace
تكميل شده پشته است برمي گرداند.
اين شي ئ ممكن است مجددا" پرتاب شود .
توصيفي از استثنائ را برمي گرداند . ()StringgetMessage
ردياب پشته را نمايش مي دهد . ()VoidprintStackTrace
ردياب پشته را به يك جريان (stream) print)VoidprintStackTrace
مشخص ارسال مي كند . (Streamstream
يك شي ئ string شامل توصيفي از استثنائ ()StringtoString
را برمي گرداند. اين روش هرگاه يك شي ئ Throwable
خارج شود توسط ()println
فراخواني مي شود .

مثال بعدي يك زير كلاس جديد از Exception اعلان مي كند و سپس از آن زير كلاس
استفاده مي كند تا علامت يك شرط را به يك روش ارسال نمايد . اين زير كلاس ، روش
()tostring را لغو مي كند ، و با استفاده از ()println اجازه مي دهد تا توصيف
استثنائ بنمايش درآيد .

+ // This program creates a custom exception type.
+ class MyException extends Exception {
+ private int detail;
+
+ MyException(int a ){
+ detail = a;
+ }
+
+ public String toString )({
+ return "MyException[" + detail + "]";
+ }
+ }
+
+ class ExceptionDemo {
+ static void compute(int a )throws MyException {
+ System.out.println("Called compute(" + a + ")");
+ if(a > 10)
+ throw new MyException(a);
+ System.out.println("Normal exit");
+ }
+
+ public static void main(String args[] ){
+ try {
+ compute(1);
+ compute(20);
+ } catch( MyException e ){
+ System.out.println("Caught " + e);
+ }
+ }
+ }

اين مثال يك زير كلاس از Exception تحت عنوان MyException تعريف مي كند. اين
زير كلاس خيلي ساده است : اين زير كلاس فقط يك سازنده بعلاوه يك روش ()tostring
انباشته شده دارد كه مقدار استثنائ را نمايش مي دهد . كلاس ExceptionDemo يك
روش تحت نام ()compute معرفي مي كند كه يك شي ئ MyException را پرتاب مي كند .
وقتي كه پارامتر عدد صحيح مربوط به ()compute بزرگتر از 10 باشد ، استثنائ
پرتاب خواهد شد . روش ()main يك اداره كننده استثنائ براي MyException قرار
مي دهد ، سپس ()compute را با يك مقدار مجاز ( كمتر از 10 ) و نيز يك مقدار
غير مجاز براي نشان دادن دو مسير موجود در كد فراخواني مي كند . حاصل بصورت
زير است :

Called compute(1)
Normal exit
Called Compute(20)

کيفيت مقاله :
عالی خوب متوسط ضعيف


نواع داده ها ، متغيرها و آرايه ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۲۱ مراجعه امروز
۴۴۳۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نواع داده ها ، متغيرها و آرايه ها
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۱۷ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

انواع داده ها ، متغيرها و آرايه ها

از اين قسمت به بعد سه عنصر اساسي جاوا را مورد بررسي قرار خواهيم داد :
انواع داده ها ، متغيرها و آرايه ها. نظير كليه زبانهاي جديد برنامه نويسي ، جاوا
از چندين نوع داده پشتيباني مي كند . با استفاده از انواع داده ، مي توانيد
متغيرها را اعلان نموده و آرايه ها را ايجاد كنيد. خواهيد ديد كه شيوه جاوا براي ين مسئله ، كاملا" روشن ، كارا و منسجم است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از استثنائات ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۲۴ مراجعه امروز
۴۴۴۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از استثنائات
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۷۸۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از استثنائات

اداره كردن استثنائات يك مكانيسم قدرتمند براي كنترل برنامه هاي پيچيده فراهم
آورده كه داراي چندين ويژگي پوياي حين اجرا است . مهم اين است كه try، throw،
و catch را بعنوان شيوه هاي واضح براي اداره خطاها و شرايط محدوده غير طبيعي در
منطق برنامه هايتان در نظر بگيريد .
اگر مثل اكثر برنامه نويسان باشيد، آنگاه وقتي يك روش عقيم مي شود، احتمالا"
سعي مي كنيد تا يك كد خطا را برگردانيد . وقتي در جاوا مشغول برنامه نويسي
هستيد ، بايد اين عادت را كنار بگذاريد. وقتي يك روش مي تواند عقيم باشد، بهتر
است يك استثنائ پرتاب نماييد . اين شيوه بمراتب بهتري براي اداره حالات عقيمي
است .
يك نكته آخر : دستورات اداره كردن استثنائ در جاوا نبايد بعنوان يك مكانيسم
عمومي براي انشعاب سازي غير محلي تلقي شود . اگر اينكار را انجام دهيد ، فقط را مغشوش كرده و نگهداري آنها را مشكل مي سازيد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


برنامه نويسي چند نخ كشي شده Multithreaded programming ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۲۷ مراجعه امروز
۴۴۴۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برنامه نويسي چند نخ كشي شده Multithreaded programming
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۰۰ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

برنامه نويسي چند نخ كشي شده Multithreaded programming

برخلاف ساير زبانهاي كامپيوتري ، جاوا ، پشتيباني توكار از برنامه نويسي چند
نخ كشي شده را فراهم مي كند . يك برنامه چند نخ كشي شده (multithreaded) دربر
گيرنده دو يا چند بخش است كه مي توانند بصورت متقارن و همزمان اجرا شوند . هر
بخش از چنين برنامه اي را يك نخ يا thread مي نامند كه هر نخ مي تواند يك مسير
جداگانه از اجرا تعريف نمايد . بنابراين ، چند نخ كشي شده يك شكل تخصصي تر از
همان چند وظيفه اي (multitasking) است .
بطور حتم با مفهوم چند وظيفه اي آشنا هستيد ، زيرا كليه سيستم هاي عامل مدرن
از اين موضوع پشتيباني مي كنند . دو نوع مجزا از چند وظيفه اي وجود دارد : بر
مبناي پردازش (process-based) و بر مبناي نخ (thread-based) . لازم است كه
تفاوت بين اين دو را درك نماييد . يك پردازش از نظر مفهومي يك برنامه در حال
اجرا است . بدين ترتيب ، چند وظيفه اي بر مبناي پردازش به كامپيوتر شما امكان
مي دهد تا دو يا چند برنامه را بطور متقاون و همزمان اجرا نمايد . بعنوان مثال
چند وظيفه اي بر مبناي پردازش به شما امكان مي دهد تا در حين اجراي كامپايلر
جاوا و در همان زمان بتوانيد از يك ويرايشگر متن نيز استفاده نماييد . در چند
وظيفه اي بر مبناي پردازش ، يك برنامه ، كوچكترين واحد كدي است كه توسط زمانبند
(scheduler) توزيع مي شود (dispatched) .
در يك محيط چند وظيفه اي بر مبناي نخ ، كوچكترين واحد كد قابل توزيع ، همان
نخ است . اين بدان معني است كه يك برنامه منفرد مي تواند دو يا چندين وظيفه را
در آن واحد انجام دهد. بعنوان نمونه ، يك ويرايشگر متن مي تواند در همان زماني
كه مشغول چاپ گرفتن است ، به فرمت كردن يك متن نيز بپردازد ، البته ماداميكه
اين دو عمل توسط دو نخ جداگانه اجرا شوند . بدين ترتيب ، چند وظيفه اي بر مبناي
پردازش با " تصاوير بزرگ " سر و كار دارد در حاليكه چند وظيفه اي بر مبناي نخ
جزئيات كارها را اداره مي كند .
نخ هاي چند وظيفه كننده مستلزم انباشتگي كمتري در مقايسه با پردازشهاي چند
وظيفه كننده هستند . پردازشها در اصل وظايف سنگيني هستند كه نيازمند فضاهاي
آدرس جداگانه خاص خودشان مي باشند. ارتباطات بين پردازشي (Interprocess) اغلب
پر هزينه و محدود است .
چند كارگي و راه گزيني متن (context switching) از يك پردازش به پردازش
ديگر نيز پر هزينه است . در عوض نخ ها سبك هستند . آنها يك فضاي يكسان آدرس را
به اشتراك گذاشته و بصورت مشاركتي همان پردازش با وظيفه سنگين را به اشتراك
مي گذارند . ارتباطات بين نخ ها (Interthread) ارزان است و راه گزيني متن از
يك نخ به نخ ديگر كم هزينه است . اگرچه برنامه هاي جاوا از محيطهاي چند وظيفه اي
بر مبناي پردازش هم استفاده مي كنند ، اما چند وظيفه اي بر مبناي پردازش تحت
كنترل جاوا نيست . اما چند وظيفه اي چند نخ كشي شده تحت كنترل قرار مي گيرد .
چند نخ كشي كردن به شما اجازه مي دهد تا برنامه هايي بسيار موثر و كارا
بنويسيد كه حداكثر استفاده از cpu را داشته باشند ، زيرا آنها زمان خالي idle)
(time را به حداقل ممكن كاهش مي دهند . اين امر بخصوص در محيط فعل و انفعالي و
شبكه اي شده اي كه جاوا در آن كار مي كند حائز اهميت است ، زيرا در اين گونه
محيط ها زمان خالي بسيار زياد است . بعنوان مثال ، نرخ انتقال داده روي يك شبكه
در مقايسه با نرخ پردازش كامپيوتر بسيار كندتر است . حتي منابع فايلهاي سيستم
با سرعت كمتري نسبت به آنچه cpu قادر است پردازش نمايد، خوانده و نوشته ميشوند
و البته ، ورودي كاربر نيز خيلي كندتر انجام خواهد گرفت . در يك محيط سنتي تك
نخي ، برنامه شما قبل از حركت بطرف وظيفه بعدي مجبور است منتظر اتمام اجراي
وظايف قبلي بماند حتي اگر cpu زمان نسبتا" زيادي را بيكار باشد . چند نخ كشي
به شما اجازه ميدهد تا اين زمان بيكاري را تحت كنترل گرفته و ازآن بنحو مطلوبي
استفاده نماييد .
اگر تابحال براي سيستم هاي عاملي نظير windows 95يا windows NTا برنامه نويسي
كرده باشيد ، پس حتما" با برنامه نويسي چند نخ كشي آشنا هستيد . اما بخصوص اين
حقيقت كه جاوا نخ ها را مديريت مي كند، چند نخ كشي كردن را آسان مي سازد، زيرا شوند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مدل نخ در جاوا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۳۰ مراجعه امروز
۴۴۴۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مدل نخ در جاوا
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۲۷ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

مدل نخ در جاوا

سيستم حين اجرا براي بسياري از چيزها وابسته به نخهااست و كليه كتابخانه هاي
كلاس بر اساس مفهوم " چند نخ كشي كردن " طراحي شده اند. در حقيقت ، جاوا از نخها
براي ايجاد غير همزماني (asynchronized) در كل محيط استفاده مي كند. جاوا بدين
وسيله با جلوگيري از اتلاف چرخه هاي cpu سبب كاهش عدم كارآيي مي شود .
ارزش يك محيط چند نخ كشي شده در مقايسه با رقيب آن بسهولت درك مي شود .
سيستم هاي تك نخي از يك شيوه تحت عنوان (even loop with polling) استفاده
مي كنند . در اين مدل ، يك نخ تكي مربوط به كنترل در يك حلقه نامحدود اجرا شده
و يك صف رويداد تكي (single event) را " همه نگري " مي كند (polling) تا تصميم
در مورد كار بعدي را اتخاذ نمايد . وقتي كه مكانيسم همه نگري polling با يك
مثلا" سيگنال مبني بر اينكه يك فايل شبكه اي آماده خواندن است برمي گردد ، آنگاه
حلقه event ، كنترل را به اداره كننده مناسب event توزيع مي كند . تا زمانيكه
اين اداره كننده رويداد (event) برگردد ، هيچ چيز ديگري امكان وقوع در سيستم
ندارد . اين حالت وقت cpu را تلف مي كند . اين وضعيت حتي ممكن است منجر به
اوضاعي شود كه يك بخش خاص از برنامه بر سيستم چيره شده و جلوي پردازش ساير
رويدادها را بگيرد . در كل ، در يك محيط تك نخ كشي شده ، هرگاه كه نخ بدليل
انتظار براي برخي منابع ، متوقف بماند ( يعني اجرا را معلق نمايد )، كل برنامه
اجرا را متوقف مي كند .
مزيت چند نخ كشي كردن جاوا در آن است كه مكانيسم اصلي loop/polling محو
ميشود. مي توانيد يك نخ را بطور موقت متوقف كنيد بدون آنكه ساير بخشهاي برنامه
متوقف شوند. بعنوان مثال ، بدين ترتيب مي توان زمان بيكاري ايجاد شده طي زماني
كه يك نخ ، داده ها را از شبكه مي خواند و يا منتظر ورودي كاربر است را
بهينه سازي نمود . چند نخ كشي كردن به حلقه هاي متحرك (animation) اجازه مي دهد
تا براي يك ثانيه بين هر فريم بخواب بروند ، بدون اينكه كل سيستم را متوقف
نمايند . وقتي كه در يك برنامه جاوا ، يك نخ بلوكه مي شود ، فقط همان نخ تكي
كه بلوكه شده ، متوقف خواهد شد . نخ هاي ديگر بكارشان ادامه مي دهند .
نخ ها در شرايط گوناگوني قرار مي گيرند . يك نخ ممكن است در حال اجرا باشد.
اين نخ بمحض اينكه زماني از cpu دريافت نمايد ، آماده اجرا خواهد شد . يك نخ
در حال اجرا ممكن است بحالت تعليق درآيد (suspended) يعني كه بصورت موقتي
فعاليت خود را متوقف مي كند . يك نخ معلق شده ممكن است بعدا" دوباره از سر
گرفته شود (resumed) و اجازه بيابد تا به همان جايي كه قبلا"ترك كرده بود، پرش
نمايد . يك نخ ممكن است طي زمان انتظار براي يك منبع ، بلوكه شود (blocked) .
در هر زماني مي توان يك نخ را پايان داد و بلافاصله اجراي آن را متوقف نمود .
اگر يك نخ پايان يابد ، ديگر نمي توان آن را از سر گرفت .

تقدمهاي مربوط به نخ ها
جاوا به هر يك حق تقدم اختصاص مي دهد كه نشان مي دهد با آن نخ دو مقايسه با
سايرين ، چگونه بايد رفتار شود .
حق تقدم نخ ها اعداد صحيحي هستند كه تقدم نسبي يك نخ در مقايسه با نخهاي
ديگر را مشخص مي كنند. همچون يك مقدار مطلق ، تقدم نيز رقمي بي معني است . يك
نخ با تقدم بيشتر اگر يگانه نخ در حال اجرا باشد، سريعتر از يك نخ در حال اجرا
نخواهد شد . در عوض از تقدم يك نخ براي تصميم گيري در مورد انتقال از يك نخ در
حال اجرا به نخ بعدي استفاده مي شود . اين عمل را context witch مي نامند .
قوانيني كه زمان وقوع context switch را تعيين مي كنند ، بسيار ساده هستند :
يك نخ مي تواند بطور اختياري كنترل را ترك ( رها ) نمايد . اينكار بطور
صريح با واگذار كردن (yielding) ، معوق كردن يا خوابيدن (sleeping) يا بلوكه
كردن (blocking) روي l/o وابسته انجام مي گيرد . در اين سناريو ، تمام نخ ها
بررسي مي شوند و آنگاه نخ داراي بيشترين تقدم كه آماده اجرا نيز باشد به cpu
فرستاده مي شود .
ممكن است نوبت يك نخ توسط نخي با تقدم بيشتر گرفته شود . در اين حالت
يك نخ با تقدم پايين كه پردازنده را واگذار نمي كند ( رها نمي كند ) ، بسادگي
نوبتش را به نخي با تقدم بالاتر مي دهد ، صرفنظر از اينكه نخ اول در حال انجام
چكاري بوده است . اساسا" تا زماني كه يك نخ با تقدم بالاتر بخواهد اجرا شود
اجرا خواهد شد . اين حالت را چند وظيفه اي نوبه اي يا preemptive multitasking
مي نامند .
در صورتيكه دو نخ با تقدم يكسان در حال رقابت براي گرفتن چرخه هاي cpu باشند
شرايط كمي پيچيده تر مي شود . براي سيستم هاي عاملي همچون ويندوز 95 ، نخ هاي
داراي تقدم يكسان بطور خودكار برش زماني خود (time-sllice) را براساس رفتار
نوبت گردشي (round-robin) دريافت مي كنند. براي ساير انواع سيستم هاي عامل نظير x
.َSolaries 2 ، نخ هاي داراي تقدم يكسان بايد بطور اختياري كنترل را به نظاير
خود واگذار نمايند . اگر آنها اينكار را انجام ندهند، ساير نخ ها اجرا نخواهند
شد .
احتياط : ممكن است بلحاظ تفاوت در شيوه هايي كه سيستم هاي عامل گوناگون ، نخ هاي
با تقدم يكسان را اداره مي كنند ، مشكلاتي بروز نمايد .

همزمان سازي Synchronization
چون چند نخ كشي كردن معرف يك رفتار غير همزمان براي برنامه هاي شما مي باشد
لذا بايد راهي وجود داشته باشد تا بتوانيد درصورت نياز همزماني را دربرنامه اتان
اعمال نماييد. بعنوان مثال ، اگر بخواهيد دو نخ را با يك ساختار پيچيده نظير
ليست پيوندي مرتبط نماييد تا باشتراك استفاده نمايند ، بايد راهي پيدا كنيد
تا مطمئن شويد كه آنها با يكديگر مخلوط نخواهند شد . يعني شما بايد جلوي نوشتن
داده توسط يك نخ را هنگاميكه نخ ديگر در حال خواندن همان داده است ، بگيريد .
براي اين منظور ، جاوا يك بهم تابيدگي (twist) مناسب را روي يك مدل قديمي براي
همزماني بين پردازش ها پياده سازي مي كند : ماسوره The monitor . ماسوره ، يك
مكانيسم كنترل است كه اول بار توسط C A R HHoare تعريف شد. مي توانيد ماسوره
را يك جعبه كوچك فرض كنيد كه فقط يك نخ را در خود جاي مي دهد . وقتي كه يك نخ
وارد ماسوره مي شود ، تا زمانيكه اين نخ وجود داشته باشد ، ساير نخ ها بايد در
انتظار بمانند. بدين روش ، مي توان از ماسوره استفاده نمود و مراقب بود تا يك
خاصيت باشتراك گذاشته شده در آن واحد توسط بيش از يك نخ مورد دستكاري قرار
نگيرد .
اكثر سيستم هاي چند نخ كشي شده ، ماسوره monitor را بعنوان اشيايي كه برنامه
شما بايد بطور صريح بدست آورده و دستكاري نمايد ، در معرض نمايش قرار مي دهند.
جاوا راه حل بهتري ارائه مي دهد. هيچ كلاسي تحت عنوان "monitor" وجود ندارد، در
عوض هر شيئي ، ماسوره monitor ضمني و خاص خودش را دارد كه هرگاه يكي از روشهاي
همزمان شده مربوط به شيئي فراخواني شود، بطور خودكار وارد خواهد شد . هربار كه
يك نخ درون يك روش همزمان شده باشد، هيچ نخ ديگري نمي تواند ساير نخهاي همزمان
شده روي همان شيئي را فراخواني نمايد. اين حقيقت به شما امكان مي دهد تا كدهاي
چند نخ كشي شده دقيق و تميزي بنويسيد ، زيرا پشتيباني از همزماني بصورت توكار
در خود زبان برنامه نويسي تعبيه شده است .

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

كلاس Thread و رابط Runnable
سيستم چند نخ كشي كردن جاوا برمبناي كلاس Thread ، و روشهاي مربوط به آن و
رابط همراه با آن يعني Runnable شكل گرفته است . Thread يك رشته از اجرا را
كپسول سازي مي كند . چون نمي توانيد مستقيما" به حالت ظريف يك نخ در حال اجرا
ارجاع نماييد ، بايد از طريق وكيلش با آن سر و كار داشته باشيد ، يعني از طريق
نمونه Thread كه آن را تكثير كرده است . براي ايجاد يك نخ جديد، برنامه شما يا
بايد Thread را توسعه دهد يا اينكه رابط Runnable را پياده سازي نمايد .
كلاس Threads چندين روش را تعريف مي كند كه در مديريت نخ ها سودمند هستند .
چند مورد آن بشرح زير مي باشند :
مفهوم آن روش

بدست آوردن نام يك نخ . getName
بدست آوردن تقدم يك نخ . getproiority
تعيين مي كند كه آيا يك نخ همچنان در isAlive
حال اجرا است .
منتظر يك نخ مي ماند تا پايان يابد . join
اجراي يك نخ معلق شده را از سر resume
مي گيرد .
نقطه ورودي يك نخ . run
يك نخ را براي مدت زمان خاصي معوق sleep
مي كند .
با فراخواني روش اجرايي يك نخ آن را start

کيفيت مقاله :
عالی خوب متوسط ضعيف


نخ اصلي The Main Thread ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۳۳ مراجعه امروز
۴۴۴۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نخ اصلي The Main Thread
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۳۴ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

نخ اصلي The Main Thread

وقتي يك برنامهم جاوا شروع مي شود ، حتما" قبل از آن ، يك نخ در حال اجرا
وجود دارد . اين نخ را معمولا" نخ اصلي يا main thread برنامه شما مي نامند
زير وقتي برنامه شما مي خواهد شروع شود ، اين نخ اجرا شده است . نخ اصلي بدو
دليل بسيار مهم است .
ؤ اين همان نخي است كه ساير نخ هاي فرزند (child) از آن تكثير مي شوند .
ؤ اين نخ بايد آخرين نخي باشد كه اجرا را تمام مي كند . وقتي كه نخ اصلي
متوقف مي شود ، برنامه شما نيز خاتمه خواهد يافت .
اگرچه هنگاميكه برنامه اتان را آغاز مي كنيد ، نخ اصلي بطور خودكار ايجاد
مي شود ، اما مي توان آن را از طريق يك شي ئ Thread كنترل نمود . براي انجام
اينكار ، بايد با فراخواني روش ()currentthread كه يك عضو public static از thread
است ، يك ارجاع به آن بدست آوريد . شكل عمومي آن بصورت زير مي باشد :

staticThreadcurrentThread)(

اين روش يك ارجاع به نخي كه در آن فراخواني شده است را بر مي گرداند. هربار
كه ارجاعي به نخ اصلي ايجاد كنيد ، مي توانيد آن را مثل هر نخ ديگري تحت كنترل
درآوريد .
اجازه دهيد با يك مثال شروع كنيم :

+ // Controlling the main Thread.
+ class CurrentThreadDemo {
+ public static void main(String args[] ){
+ Thread t = Thread.CurrentThread)(;
+
+ System.out.println("Current thread :" + t);
+
+ // change the name of the thread
+ t.setName("My Thread");
+ System.out.println("After name change :" + t);
+
+ try {
+ for(int n = 5; n > 0; n )--{
+ System.out.println(n);
+ Thread.sleep(1000);
+ }
+ } catch( InterruptedException e ){
+ System.out.println("Main thread interrupted");
+ }
+ }
+ }

در اين برنامه ، يك ارجاع به نخ جاري ( در اين حالت ، همان نخ اصلي ) بوسيله
فراخواني ()currentThread بدست آمده و در متغير محلي t ذخيره مي شود سپس
برنامه اطلاعات درباره نخ را نمايش مي دهد. برنامه آنگاه ()setName را فراخواني
مي كند تا نام داخلي نخ را تعويض نمايد . اطلاعات درباره نخ مجددا" بنمايش در
مي آيند . سپس ، يك حلقه از عدد 5 شمارش معكوس مي كند و بين هر دو خط يك ثانيه
مكث مي كند. مكث فوق توسط روش ()sleep انجام مي شود . آرگومان به ()sleep
مشخص كننده دوره تاخير برحسب ميلي ثانيه است . دقت كنيد كه بلوك try/catch اين
حلقه را احاطه كرده است .
روش ()sleepدر Threadر ممكن است يك InterruptedException را پرتاب نمايد .
اگر برخي از نخ هاي ديگر بخواهند در اين نخ معوق شده اختلال نمايند، چنين حالتي
اتفاق مي افتد . اين مثال اگر دچار وقفه شود ، يك پيام را چاپ مي كند . در يك
برنامه واقعي ، بايد اين حالت را طور ديگري اداره نماييد . خروجي توليد شده
توسط اين برنامه بقرار زير مي باشد :

Current thread :Thread[main/5/main]
After name change :Thread[My Thread/5/main]
5
4
3
2
1

دقت كنيد كه وقتي t بعنوان يك آرگومان به ()println استفاده مي شود ، خروجي
توليد مي شود . اين خروجي بترتيب موارد بعدي را نمايش مي دهد : نام نخ ، حق
تقدم آن ، و نام گروه مربوطه آن . بطور پيش فرض ، نام نخ اصلي main است . تقدم
آن 5 است كه مقداري پيش فرض مي باشد ، همچنين نام گروهي از نخ ها كه اين نخ
بدان متعلق است ، همان main مي باشد . يك گروه نخ Threadgroup يك نوع ساختار
داده است كه حالت يك مجموعه از نخ ها را بطور كلي كنترل مي كند . اين پردازش
محيط حين اجراي خاصي مديريت شده و در اينجا مورد بررسي قرار نمي گيرد . بعد از
اينكه نام نخ تغيير مي يابد ، t مجددا" حاصل مي شود . در اين زمان ، نام جديد
نخ بنمايش درمي آيد .
اجازه دهيد نگاهي دقيق تر به روشهاي تعريف شده توسط Thread كه در برنامه
استفاده شده اند، داشته باشيم . روش ()sleep سبب ميشود تا نخي كه از آن فراخواني
شده ، اجرا را براي مدت مشخصي از ميلي ثانيه بطور موقت متوقف نمايد. شكل عمومي
آن بصورت زير است :

static void sleep( long miliseconds )Throws InterruptedException

تعداد ميلي ثانيه هايي كه بايد تعليق انجام گيرد بر حسب ميلي ثانيه مشخص
مي شود . اين روش ممكن است يك InterruptedException را پرتاب نمايد .
روش ()sleep يك شكل دوم هم دارد كه بعدا" نشان ميدهيم و به شما اجازه ميدهد
تا مدت زمان را بر حسب ميلي ثانيه و nanoseconds مشخص نمايد .

static void sleep( long miliseconds/ int nanoseconds )Throws Interupted
Exception

اين شكل دوم فقط براي محيطهايي مناسب است كه امكان زمانبندي دوره هاي زماني
را بر حسب nanoseconds دارند .
همانطوريكه برنامه قبلي نشان مي دهد ، مي توانيد با استفاده از ()setName
نام يك نخ را تعيين كنيد. با فراخواني ()getName مي توانيد نام يك نخ را بدست
آوريد ( اما توجه كنيد كه اين رويه در برنامه نشان داده نشده است ). اين روشها
اعضائ كلاس Thread هستند و بصورت زير اعلان مي شوند :

final void setName( string ThreadName)
final string getName

کيفيت مقاله :
عالی خوب متوسط ضعيف


ايجاد يك نخ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۳۶ مراجعه امروز
۴۴۵۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ايجاد يك نخ
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۷۰ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

ايجاد يك نخ

به زبان خيلي ساده ، شما با نمونه سازي يك شي ئ از نوع Thread مي توانيد
يك نخ را بوجود آوريد . جاوا دو شيوه براي انجام اينكار تعريف مي نمايد :
ؤ مي توانيد رابط Runnable را پياده سازي نماييد .
ؤ مي توانيد خود كلاس Thread را بسط دهيد .
هر كدام از شيوه هاي فوق را بررسي مي كنيم .

پياده سازي Runnable
آسانترين شيوه ايجاد يك نخ ايجاد يك كلاس است كه رابط Runnable را پياده سازي
نمايد . Runnable يك واجد از كد اجرايي را مجرد مي كند. مي توانيد روي هر شيئي
كه Runnable را پياده سازي مي نمايد ، يك نخ بسازيد. براي پياده سازي Runnable
يك كلاس فقط لازم است يك روش تكي موسوم به ()run را كه بصورت زير اعلان شده
پياده سازي نمايد :

public abstract void run)(

كدي كه نخ جديد را مي سازيد را داخل ()run تعريف نماييد. مهم است بدانيد كه
()run مي تواند ساير روشها را فراخواني كند ، همچنين از ساير كلاسها استفاده
نمايد و متغيرهايي درست مثل نخ اصلي را اعلان نمايد . تنها تفاوت در اين است كه
()run نقطه ورودي براي نخ ديگر همزمان اجرا داخل برنامه شما را تثبيت مي كند .
اين نخ وقتي ()run برمي گردد ، پايان مي گيرد .
بعد از اينكه يك كلاس كه Runnable را پياده سازي مي كند، ايجاد نموديد، بايد
يك شي ئ از نوع Thread از داخل همان كلاس نمونه سازي كنيد . Thread چندين سازنده
را تعريف مي كند . يكي از آنها كه مورد استفاده ما قرار گرفته بصورت زير است :

Thread( Runnable threadOb/ string threadName)

دراين سازنده ، threadOb يك نمونه از كلاس است كه رابط Runnable را پياده سازي
مي كند . اين سازنده ، جايي را كه نخ شروع خواهد شد ، تعريف مي كند . نام نخ
جديد بوسيله ThreadName مشخص مي شود .
نخ جديد پس از ايجاد شدن تا زمانيكه روش ()start آن را كه داخل Thread اعلان
شده ، فراخواني نكنيد ، شروع باجرا نمي كند. از نظر ذاتي ،()start يك فراخواني
به ()run را اجرا مي كند . روش ()start را در زير نشان داده ايم :

synchronized void start)(

در اينجا مثالي وجود دارد كه يك نخ جديد ايجاد نموده و اجراي آن را شروع
مي كند :

+ // Create a second thread.
+ class NewThread implements Runnable {
+ Thread t;
+ NewThread )({
+ // Create a new/ second thread
+ t = new Thread(this/ "Demo Thread");
+ System.out.println("Child thread :" + t);
+ t.start)(; // Start the thread
+ }
+
+ // This is the entry point for the second thread.
+ public void run )({
+ try {
+ for(int i = 5; i > 0; i )--{
+ System.out.println("Child Thread :" + i);
+ Thread.sleep(500);
+ }
+ } catch( InterruptedException e ){
+ System.out.println("Child interrupted.");
+ }
+ System.out.println("Exiting child thread.");
+ }
+ }
+
+ class ThreadDemo {
+ public static void main(String args[] ){
+ new NewThread)(; // create a new thread
+
+ try {
+ for(int i = 5; i > 0; i )--{
+ System.out.println("Main Thread :" + i);
+ Thread.sleep(1000);
+ }
+ } catch( InterruptedException e ){
+ System.out.println("Main thread interrupted.");
+ }
+ System.out.println("Main thread exiting.");
+ }
+ }

درون سازنده New Thread يك شي ئ Thread جديد با استفاده از دستور بعدي ايجاد
شده است :

+ t = new Thread(this/ "Demo Thread");

گذر دادن this بعنوان اولين آرگومان نشان مي دهد كه شما مي خواهيد نخ جديد
روش ()run را روي شيئي this فراخواني نمايد . سپس ()start فراخواني مي شود، كه
نخ اجراي شروع كار را در روش ()run آغاز مي كند . اين باعث مي شود كه حلقه for
نخ فرزند آغاز شود . بعد از فراخواني ()start ، سازنده مربوط به New Thread به
()main برمي گردد. وقتي كه نخ اصلي از سر گرفته مي شود ، حلقه for خود را وارد
مي كند . هر دو نخ اجرا را ادامه مي دهند ، cpu را باشتراك گذاشته تا اينكه
حلقه هايشان پايان گيرند . خروجي توليد شده توسط اين برنامه بقرار زير است :

Child thread :Thread[Demo Thread/5/main]
Main Thread :5
Child Thread :5
Child Thread :4
Main Thread :4
Child Thread :3
Child Thread :2
Main Thread :3
Child Thread :1
Exiting child thread.
Main Thread :2
Main Thread :1
Main thread exiting.

همانطوريكه قبلا" گفتيم ، در يك برنامه چند نخ كشي شده ، نخ اصلي بايد آخرين
نخي باشد كه اجرا را پايان مي دهد . اگر نخ اصلي قبل از اينكه يك نخ فرزند
كامل شود ، پايان گيرد ، آنگاه ممكن است سيستم حين اجراي جاوا بحالت "hang"
درآيد. برنامه قبلي اطمينان مي دهد كه نخ اصلي آخرين نخي است كه پايان مي گيرد
زيرا نخ اصلي براي 1000 ميلي ثانيه بين تكرارها معوق مي ماند در حاليكه نخ
فرزند فقط 500 ميلي ثانيه معوق مي ماند. اين باعث مي شود كه نخ فرزند زودتر از
نخ اصلي پايان گيرد .
بطور خلاصه ، راه بهتري براي اطمينان از اينكه نخ اصلي آخر از همه پايان گيرد
خواهيد يافت .

بسط نخ
دومين شيوه ايجاد يك نخ ، ايجاد يك كلاس جديد است كه Thread را بسط داده و
سپس يك نمونه از همان كلاس ايجاد مي كند . كلاس بسط دهنده بايد روش ()run را لغو
نمايد ، كه نقطه مدخل (entry) براي نخ جديد است . اين كلاس همچنين بايد ()start
را فراخواني كند تا اجراي نخ جديد را آغاز نمايد . در اينجا برنامه قبلي را
دوباره برنامه نويسي نموده ايم تا Thread را بسط دهد .

+ // Create a second thread by extending Thread.
+ class NewThread extends Thread {
+
+ NewThread )({
+ // Create a new/ second thread
+ super("Demo Thread");
+ System.out.println("Child thread :" + this);
+ start)(; // Start the thread
+ }
+
+ // This is the entry point for the second thread.
+ public void run )({
+ try {
+ for(int i = 5; i > 0; i )--{
+ System.out.println("Child Thread :" + i);
+ Thread.sleep(500);
+ }
+ } catch( InterruptedException e ){
+ System.out.println("Child interrupted.");
+ }
+ System.out.println("Exiting child thread.");
+ }
+ }
+
+ class ExtendThread {
+ public static void main(String args[] ){
+ new NewThread)(; // create a new thread
+
+ try {
+ for(int i = 5; i > 0; i )--{
+ System.out.println("Main Thread :" + i);
+ Thread.sleep(1000);
+ }
+ } catch( InterruptedException e ){
+ System.out.println("Main thread interrupted.");
+ }
+ System.out.println("Main thread exiting.");
+ }
+ }

اين برنامه همان خروجي برنامه قبلي را توليد مي كند . همانطوريكه مي بينيد
نخ فرزند بوسيله نمونه سازي يك شي ئ NewThread كه از Thread مشتق شده ، ايجاد
مي شود .
به فراخواني ()super داخل NewThread دقت نماييد . اين امر شكل بعدي سازنده Trhead
را فعال مي كند .

public thread( string threadName)

در اينجا Thread Name ، نام نخ را مشخص مي كند .

انتخاب يك شيوه
ممكن است تعجب كنيد كه چرا جاوا دو شيوه براي ايجاد نخ فرزند دارد و اينكه
كدام شيوه بهتر است . كلاس Thread چندين روش را تعريف مي كند كه بوسيله يك كلاس
مشتق شده مي توانند لغو شوند . از اين روشها ، آنكه بايد لغو شود فقط ()run
است . اين روش البته همان روشي است كه وقتي شما Runnable را پياده سازي ميكنيد
لازم است . بسياري از برنامه نويسان جاوا احساس مي كنند كه آن كلاسها فقط وقتي
در حال افزايش يا اصلاح شدن هستند ، بايد بسط يابند . بنابراين اگر نمي خواهيد
هيچيك از ساير روشهاي thread را لغو نماييد ، احتمالا" بهتر است خيلي ساده بستگي دارد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ايجاد نخ هاي چندگانه ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۳۹ مراجعه امروز
۴۴۵۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ايجاد نخ هاي چندگانه
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۷۲ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

ايجاد نخ هاي چندگانه

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

+ // Create multiple threads.
+ class NewThread implements Runnable {
+ String name; // name of thread
+ Thread t;
+
+ NewThread(String threadname ){
+ name = threadname;
+ t = new Thread(this/ name);
+ System.out.println("New thread :" + t);
+ t.start)(; // Start the thread
+ }
+
+ // This is the entry point for thread.
+ public void run )({
+ try {
+ for(int i = 5; i > 0; i )--{
+ System.out.println(name + " :" + i);
+ Thread.sleep(1000);
+ }
+ } catch( InterruptdException e ){
+ System.out.println(name + " Interrupted.");
+ }
+ System.out.println(name + " exiting.");
+ }
+ }
+
+ class MultiThreadDemo {
+ public static void main(String args[] ){
+ new NewThread("One"); // start threads
+ new NewThread("Two");
+ new NewThread("Three");
+
+ try {
+ // wait for other threads to end
+ Thread.sleep(10000);
+ } catch( InterruptedException e ){
+ System.out.println("Main thread Interrupted");
+ }
+
+ System.out.println("Main thread exiting.");
+ }
+ }

خروجي حاصل از اين برنامه بقرار زير مي باشد :

New thread :Thread[One/5/main]
New thread :Thread[Two/5/main]
New thread :Thread[Three/5/main]
One :5
Two :5
Three :5
One :4
Two :4
Three :4
One :3
Three :3
Two :3
One :2
Three :2
Two :2
One :1
Three :1
Two :1
One exiting.
Two exiting.
Three exiting.
Main thread exiting.

همانطوريكه مي بينيد ، هر بار كه آغاز شوند ، هر سه نخ فرزند ، cpu را به
اشتراك مي گذارند به فراخواني (10000)sleepدر mainر دقت نماييد . اين باعث
مي شود كه نخ اصلي براي 10 ثانيه معوق مانده و اطمينان مي دهد كه آخر از همه يان مي يابد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از ()isAlive و ()join ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۴۲ مراجعه امروز
۴۴۵۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از ()isAlive و ()join
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۷۸۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از ()isAlive و ()join

همانطوريكه ذكر شد ، نخ اصلي بايد آخرين نخي باشد كه پايان مي گيرد . در
مثالهاي قبلي ، اينكار را با فراخواني ()sleep داخل ()main با يك تاخير بحد
كافي طولاني براي اطمينان از اينكه كليه نخ هاي فرزند قبل از نخ اصلي پايان
مي گيرند ، انجام داديم . البته اين بك راه حل بسختي قانع كننده است . اين راه
حل در ضمن يك سوال را برمي انگيزد : چگونه يك نخ مي تواند از پايان گرفتن نخ
ديگر آگاهي يابد ? خوشبختانه Thread وسيله اي فراهم نموده كه توسط آن مي توانيد
پاسخ اين پرسش را بدهيد .
دو شيوه وجود دارد تا تعيين كنيم كه آيا يك نخ پايان گرفته است يا نه . اول
مي توانيد ()isAlive را روي نخ فراخواني كنيد . اين روش توسط Thread تعريف شده
و شكل كلي آن بصورت زير مي باشد :

final boolean isAlive )(Throws InterruptedException

اگر نخ بالايي آنكه فراخواني شده همچنان در حال اجرا باشد ، روش ()isAlive
مقدار true را برمي گرداند . در غير اينصورت false را برمي گرداند .
در حاليكه ()isAlive گهگاه سودمند است ، روشي كه بطور رايج مورد استفاده
قرار مي گيرد تا براي پايان يافتن يك نخ منتظر بمانيد ، ()join است كه بصورت
زير مي باشد :

final void join )(throws InterruptedException

اين روش منتظر مي ماند تا نخي كه روي آن فراخواني شده پايان گيرد . نام آن
از مفهوم " فراخواني روش منتظر مانده تا نخي مشخص به آن پيوند يابد ()" join
گرفته شده است . شكلهاي ديگري از ()join وجود دارند كه به شما اجازه مي دهند
تا همچنين حداكثر زماني كه مي خواهيد براي پايان يافتن يك نخ خاص صبر كنيد را
تعيين نماييد .
در اينجا يك روايت اصلاح شده از مثال قبلي وجود دارد كه از ()join استفاده
كرده تا اطمينان دهد كه نخ اصلي آخرين نخي است كه متوقف مي شود . اين برنامه
همچنين روش ()isAlive را نشان مي دهد .

+ // Using join )(to wait for threads to finish.
+ class NewThread implements Runnable {
+ String name; // name of thread
+ Thread t;
+
+ NewThread(String threadname ){
+ name = threadname;
+ t = new Thread(this/ name);
+ System.out.println("New thread :" + t);
+ t.start)(; // Start the thread
+ }
+
+ // This is the entry point for thread.
+ public void run )({
+ try {
+ for(int i = 5; i > 0; i )--{
+ System.out.println(name + " :" + i);
+ Thread.sleep(1000);
+ }
+ } catch( InterruptdException e ){
+ System.out.println(name + " Interrupted.");
+ }
+ System.out.println(name + " exiting.");
+ }
+ }
+
+ class DemoJoin {
+ public static void main(String args[] ){
+ NewThread ob1 = new NewThread("One");
+ NewThread ob2 = new NewThread("Two");
+ NewThread ob3 = new NewThread("Three");
+
+ System.out.println("Thread One is alive :"
+ + ob1.t.isAlive))(;
+ System.out.println("Thread Two is alive :"
+ + ob2.t.isAlive))(;
+ System.out.println("Thread Three is alive :"
+ + ob3.t.isAlive))(;
+
+ // wait for threads to finish
+ try {
+ System.out.println("Waiting for threads to finish.");
+ ob1.t.join)(;
+ ob2.t.join)(;
+ ob3.t.join)(;
+ } catch( InterruptedException e ){
+ System.out.println("Main thread Interrupted");
+ }
+
+ System.out.println("Thread One is alive :"
+ + ob1.t.isAlive))(;
+ System.out.println("Thread Two is alive :"
+ + ob2.t.isAlive))(;
+ System.out.println("Thread Three is alive :"
+ + ob3.t.isAlive))(;
+ System.out.println("Main thread exiting.");
+ }
+ }

خروجي حاصل از اين برنامه بقرار زير مي باشد :

New thread :Thread[One/5/main]
New thread :Thread[Two/5/main]
New thread :Thread[Three/5/main]
Thread One is alive :true
Thread Two is alive :true
Thread Three is alive :true
One :5
Two :5
Three :5
One :4
Two :4
Three :4
One :3
Two :3
Three :3
One :2
Two :2
Three :2
One :1
Two :1
Three :1
One exiting.
Two exiting.
Three exiting.
One exiting.
Thread One is alive :false
Thread Two is alive :false
Thread Three is alive :false
Main thread exiting.

همانطوريكه مي بينيد ، بعد از اينكه فراخواني ()join برمي گردد ، نخ ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از ()suspend و ()resume ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۴۵ مراجعه امروز
۴۴۶۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از ()suspend و ()resume
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۳۱ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از ()suspend و ()resume

گاهي لازم است اجراي يك نخ را لغو نماييم . بعنوان مثال با استفاده از يك نخ
جداگانه مي توان وقت را نشان داد. اگر كاربر تمايلي به استفاده از ساعت نداشته
باشد ، پس نخ مربوط به آن بايد لغو شود . موضوع آن هر چه باشد ، لغو نمودن يك
نخ كار ساده اي است . همچنين بكار انداختن مجدد يك نخ لغو شده نيز كار ساده اي
است .روشهايي كه ايندو وظيفه را انجام ميدهند عبارتند از()suspend و ()resume.
آنها توسط Thread تعريف شده و بصورت زير مي باشند :

final void resume)(
final void suspend)(

برنامه بعدي اين روشها را نشان مي دهد :

+ // Using suspend )(and resume.)(
+ class NewThread implements Runnable {
+ String name; // name of thread
+ Thread t;
+
+ NewThread(String threadname ){
+ name = threadname;
+ t = new Thread(this/ name);
+ System.out.println("New thread :" + t);
+ t.start)(; // Start the thread
+ }
+
+ // This is the entry point for thread.
+ public void run )({
+ try {
+ for(int i = 5; i > 0; i )--{
+
+ System.out.println(name + " :" + i);
+ Thread.sleep(200);
+ }
+ } catch( InterruptdException e ){
+ System.out.println(name + " Interrupted .");
+ }
+ System.out.println(name + " exiting.");
+ }
+ }
+
+ class SuspendResume {
+ public static void main(String args[] ){
+ NewThread ob1 = new NewThread("One");
+ NewThread ob2 = new NewThread("Two");
+
+ try {
+ Thread.sleep(1000);
+ ob1.t.suspend)(
+ System.out.println("Suspending thread One");
+ Thread.sleep(1000);
+ ob1.t.resume)(
+ System.out.println("Resuming thread One");
+ ob2.t.suspend)(
+ System.out.println("Suspending thread Two");
+ Thread.sleep(1000);
+ ob2.t.resume)(
+ System.out.println("Resuming thread Two");
+ } catch( InterruptedException e ){
+ System.out.println("Main thread Interrupted");
+ }
+
+ // wait for threads to finish
+ try {
+ System.out.println("Waiting for threads to finish.");
+ ob1.t.join)(;
+ ob2.t.join)(;
+ } catch( InterruptedException e ){
+ System.out.println("Main thread Interrupted");
+ }
+
+ System.out.println("Main thread exiting.");
+ }
+ }

اين برنامه خروجي بعدي را توليد مي كند :

New thread :Thread[Two/5/main]
One :15
New thread :Thread[Three/5/main]
Two :15
One :14
Two :14
One :13
Two :13
One :12
Two :12
One :11
Two :11
Suspending thread One
Two :10
Two :9
Two :8
Two :7
Two :6
Resuming thread One
Suspending thread Two
One :10
One :9
One :8
One :7
One :6
Resuming thread Two
Waiting for threads to finish.
Two :5
One :5
Two :4
One :4
Two :3
One :3
Two :2
One :2
Two :1
One :1
Two exiting.
One exiting.
Main thread exiting.

کيفيت مقاله :
عالی خوب متوسط ضعيف


تقدمهاي نخ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۶۴۸ مراجعه امروز
۴۴۶۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تقدمهاي نخ
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۶۶ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

تقدمهاي نخ

تقدمهاي نخ توسط زمانبند نخ استفاده مي شود تا مشخص شود كه كدام نخ بايد
اجازه اجرا پيدا نمايد . از نظر تئوري ، نخهاي داراي تقدم بيشتر نسبت به نخهاي
داراي تقدم كمتر ، زمان بيشتري از cpu را مي گيرند . در عمل ، ميزان وقتي كه
يك نخ از cpu مي گيرد ، علاوه بر تقدم بستگي به عوامل ديگري هم دارد . ( بعنوان
مثال ، اينكه چگونه يك سيستم عامل چند وظيفه اي را پياده سازي مي كند مي تواند
روي دسترسي نسبي به زمان cpu تاثير داشته باشد . ) يك نخ داراي تقدم بيشتر
مي تواند از يك نخ با تقدم كمتر پيشدستي نمايد . بعنوان نمونه ، وقتي يك نخ با
تقدم كمتر در حال اجرا باشد و يك نخ با تقدم بيشتر از سر گرفته شود ( مثلا" از
حالت تعليق يا انتظار روي I/o ) اين نخ با تقدم بيشتر به نخ با تقدم كمتر
پيشدستي مي كند .
در تئوري ، نخ هاي با تقدم برابر بايد دسترسي معادلي به cpu داشته باشند .
اما لازم است مراقب باشيد . بياد داشته باشيد كه جاوا براي كار در طيف وسيعي از
محيطها طراحي شده است . برخي از محيطها ، چند وظيفه اي را كاملا" متفاوت از ساير
محيطها ، پياده سازي مي كنند . بخاطر ايمني ، نخ هايي كه تقدم يكساني را به
اشتراك مي گذارند بايد هر چند گاه يكبار كنترل شوند . اين امر اطمينان مي دهد
كه كليه نخ ها يك فرصت براي اجرا شدن تحت سيستم عامل غير وابسته به پيشدستي
(non-preemptive) را خواهند داشت . در عمل ، حتي در محيطهاي غير وابسته به
پيشدستي ، اكثر نخ ها همچنان يك شانس اجرا شدن دارند ، زيرا اكثر نخ ها بناچار
با برخي شرايط بلوك سازي نظير انتظار براي l/o مواجه خواهند شد . وقتي اين
اتفاق مي افتد ، نخ بلوكه شده لغو شده و ساير نخ ها مي توانند اجرا شوند . اما
اگر مي خواهيد اجراي چند نخي شده را بنرمي انجام دهيد، نبايد روي اين اصل متكي
باشيد . همچنين ، برخي انواع وظايف وجود دارند كه گرايش به cpu دارند چنان
نخ هايي بر cpu چيره خواهند شد . روي اين نوع از نخ ها ، بايد گهگاه كنترلي
داشته باشيد تا ساير نخ ها بتوانند اجرا شوند .
براي تعيين تقدم يك نخ ، از روش ()setpriority استفاده نماييد ، كه عضوي از Thread
است . شكل عمومي آن بقرار زير است :

final void setpriority( in level)

در اينجا level توصيفگر تعيين تقدم جديد براي فراخواننده است . مقدار level
بايد داخل محدوده MIN-PRIORITYو MAX-PRIORITYو باشد . در حال حاضر، اين مقادير 1
و 10 مي باشند .
براي برگرداندن يك نخ به تقدم پيش فرض ، NORM-PRIORITY را مشخص مي كنيد كه
فعلا5 " است . اين تقدمها بعنوان متغيرهاي final داخل Thread تعريف شده اند .
مي توانيد تعيين تقدم جاري را با فراخواني روش ()getpriorityدر Threadر
بدست آوريد ، كه بصورت زير مي باشد :

final int getpriority)(

فعلا" پياده سازي جاوا ، وقتي كه زمانبندي پيش مي آيد ، بصورت شديدي رفتار
متفاوتي نشان مي دهد . روايت ويندوز 95 كمابيش همانطوريكه انتظار داريد كار
مي كند. اما روايت solaries بگونه اي متفاوت كار مي كند. بسياري از ناسازگاريها
هنگامي بروز مي كنند كه شما نخ هايي داشته باشيد كه بجاي اينكه زمان cpu را
بصورت اشتراكي مصرف نمايند ، متكي به رفتار وابسته به پيش دستي باشند . براي
كسب رفتار ارجاع متقابل قابل پيش بيني با جاواي امروز، بايد از نخهايي استفاده
كنيد كه بطور اختياري از كنترل نمودن cpu دست برمي دارند .
مثال بعدي دو نخ با تقدمهاي مختلف را نشان مي دهد، كه روي دو محيط زيربنايي
ذكر شده اجرا نخواهند شد . يك نخ دو سطح بالاتر از تقدم معمولي تعيين شده كه
بوسيله Thread-NORM-PRIORITY تعريف شده است و ديگري دو سطح پايين تر از تقدم
معمولي تعيين شده است . نخ ها آغاز شده و بمدت 10 ثانيه اجازه اجرا دارند . هر
نخ يك حلقه را اجرا مي كند ، كه تعداد تكرارها را شمارش مي كند . بعد از ده
ثانيه ، نخ اصلي هر دو نخ را متوقف مي كند. سپس تعداد دفعاتي كه هر نخ از طريق
حلقه ساخته شده ، بنمايش در مي آيد .

+ // Demonstrate thread priorities.
+ class clicker implements Runnable {
+ int click = 0;
+ Thread t;
+ private boolean running = true;
+
+ public clicker(int p ){
+ t = new Thread(this);
+ t.setPriority(p);
+ }
+
+ public void run )({
+ while( running ){
+ click++;
+ }
+ }
+
+ public void stop )({
+ running = false;
+ }
+
+ public void start )({
+ t.start)(;
+ }
+ }
+
+ class HiLoPri {
+ public static void main(String args[] ){
+ Thread.currentThread.)(setPriority(Thread.MAX_PRIORITY);
+ clicker hi = new clicker(Thread>NORM_PRIORITY + 2);
+ clicker lo = new clicker(Thread>NORM_PRIORITY - 2);
+
+ lo.start)(;
+ hi.start)(;
+
+ try {
+ Thread.sleep(10000);
+ } catch( InterruptedException e ){
+ System.out.println("Main thread interrupted.");
+ }
+
+ lo.start)(;
+ hi.start)(;
+
+ // Wait for child threads to terminate.
+ try {
+ hi.t.join)(;
+ lo.t.join)(;
+ } catch( InterruptedException e ){
+ System.out.println("InterruptedException caught");
+ }
+
+ System.out.println("Low-priority thread :" + lo.click);
+ System.out.println("High-priority thread :" + hi.click);
+ }
+ }

خروجي اين برنامه كه بعدا" نشان داده ايم هنگاميكه تحت ويندوز 95 اجرا ميشود
نشان مي دهد كه نخ ها context switch را انجام داده اند ، حتي اگر هيچكدامشان
بطور اختياري از cpu دست نكشند و يا براي l/o بلوكه نشوند .

Low-priority thread :434104
High-priority thread :4860791

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

Low-priority thread :0
High-priority thread :3062507

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


برنامه نويسي شي ئ گرا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۵۱ مراجعه امروز
۴۴۶۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برنامه نويسي شي ئ گرا
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۴۷۰ بار مطالعه شده است
۱۱ نفر تا به حال به اين مقاله رای داده اند.

برنامه نويسي شي ئ گرا
object-oriented programming

برنامه نويسي شي ئ گرا هسته اصلي جاوا است . در حقيقت كليه برنامه هاي جاوا
شي ئ گرا هستند . بر خلاف C++ كه در آن امكان گزينش شي ئ گرايي وجود دارد .
روشهاي oop آنچنان با زبان جاوا پيوستگي دارند كه حتي قبل از نوشتن يك برنامه
ساده جاوا نيز بايد اصول oop را فرا گيريد . بهمين دليل اين فصل را با بحث
جنبه هاي نظري oop آغاز مي كنيم .
مي دانيد كه كليه برنامه هاي كامپيوتري داراي دو عضو هستند : كد و داده .
علاوه بر اين ، يك برنامه را ميتوان بطور نظري حول محور كد يا داده اش سازماندهي
نمود . يعني بعضي برنامه ها حول محور " آنچه در حال اتفاق است " ( كد ) نوشته
شده و ساير برنامه ها حول محور " آنچه تحت تاثير قرار گرفته است " ( داده )
نوشته مي شوند . اينها دو الگوي مختلف ساخت يك برنامه هستند . روش اول را مدل
پردازش گرا (process-oriented model) مي نامند . در اين روش يك برنامه بعنوان
كدهاي فعال روي داده ها در نظر گرفت . زبانهاي رويه اي (procedural) نظير C از
اين مدل بنحو موفقيت آميزي استفاده مي كنند . اما همانطوريكه در قسمتهاي قبل
عنوان شد ، بموازات رشد و گسترش برنامه ها ، اين روش منجر به بروز مشكلات بيشتر
و پيچيده تري خواهد شد .
براي مديريت پيچيدگي فزاينده ، دومين روش معروف به برنامه نويسي شي ئ گرا
پيشنهاد شده است . برنامه نويسي شي ئ گرا يك برنامه را حول محور داده هاي آن
( يعني اشيائ ) و يك مجموعه از رابطها (interfaces) خوش تعريف براي آن داده ها
سازماندهي مي كند . يك برنامه شي ئ گرا را مي توان بعنوان داده هاي كنترل كننده
دسترسي به كدها (data controlling access to code) تلقي نمود . بعدا" خواهيد
ديد با شروع بكار واحد داده هاي كنترل كننده بسياري ازمزاياي اين نوع سازماندهي
نصيب شما خواهد شد .

تجريد Abstraction
تجريد يك عنصر ضروري در برنامه نويسي شي ئ گرا است . افراد پيچيدگي ها را با
استفاده از تجريد مديريت مي نمايند . بعنوان نمونه ، مردم درباره اتوموبيل
هرگز بعنوان مجموعه اي از هزاران قطعات منفك از هم تفكر نميكنند. آنها اتوموبيل
را بعنوان يك شي ئ خوب تعريف شده داراي نوعي رفتار منحصر بفرد تلقي مي كنند .
اين تجريد به مردم امكان مي دهد تا از يك اتوموبيل استفاده نموده و به خواربار
فروشي بروند ، بدون اينكه نگران پيچيدگي اجزايي باشند كه يك اتوموبيل را تشكيل
مي دهند .
آنها قادرند براحتي جزئيات مربوط به نحوه كار موتور ، سيستم هاي انتقال و
ترمز را ناديده بگيرند . در عوض آنها مختارند تا از اتوموبيل بعنوان يك شي ئ
كلي استفاده نمايند .
يكي از شيوه هاي قدرتمند مديريت تجريد با استفاده از طبقه بنديهاي سلسله
مراتبي (hierarchical) انجام مي گيرد . اين امر به شما امكان مي دهد تا معني و
مفهوم سيستم هاي پيچيده را كنار گذاشته و آنها را به اجزائ كوچك قابل مديريت
تقسيم نماييد. از ديد بيروني ، يك اتوموبيل يك شي ئ منفرد است . از ديد داخلي
اتوموبيل شامل چندين زير سيستم است : فرمان ، ترمزها ، سيستم صوتي ، كمربندهاي
ايمني ، سيستم حرارتي ، تلفن سلولي و غيره . هر يك از اين زير سيستم ها بنوبه
خود از واحدهاي تخصصي كوچكتري تشكيل شده اند. بعنوان نمونه ، سيستم صوتي اتوموبيل
شامل يك راديو، يك پخش CD و يا يك پخش صوت است . نكته مهم اين است كه شما بدين
ترتيب بر پيچيدگي اتوموبيل ( يا هر سيستم پيچيده ديگر ) با استفاده از تجريد
سلسله مراتبي ، فائق مي آييد .
تجريدهاي سلسله مراتبي سيستم هاي پيچيده را مي توان در مورد برنامه هاي
كامپيوتري نيز پياده سازي نمود. داده هاي يك برنامه پردازش گراي سنتي را مي توان
توسط تجريد اشيائ عضو آن ، منتقل نمود . يك ترتيب از مراحل پردازش را مي توان
به مجموعه اي از پيامها بين اشيائ تبديل نمود. بدين ترتيب ، هر يك از اين اشيائ
رفتار منحصر بفرد خودش را تعريف خواهد كرد . مي توانيد با اين اشيائ بعنوان
موجوديتهاي واقعي رفتار كنيد كه به پيامهايي كه به آنها مي گويند چكاري انجام
دهند ، مرتبط و وابسته هستند . اين هسته اصلي برنامه نويسي شي ئ گراست .
مفاهيم شي ئ گرايي در قلب جاوا قرار گرفته اند ، همچنانكه پايه اصلي ادراكات
بشري نيز هستند. مهم اينست كه بفهميد اين مفاهيم چگونه در برنامه هاي كامپيوتري
پياده سازي مي شوند . خواهيد ديد كه برنامه نويسي شي ئ گرا يك نمونه قدرتمند و
طبيعي براي توليد برنامه هايي است كه بر تغييرات غير منتظره فائق آمده و چرخه
حيات هر يك از پروژه هاي نرم افزاري اصلي ( شامل مفهوم سازي ، رشد و سالخوردگي )
را همراهي مي كنند . بعنوان نمونه ، هر گاه اشيائ خوش تعريف و رابطهاي تميز و
قابل اطمينان به اين اشيائ را در اختيار داشته باشيد ، آنگاه بطور دلپذيري
ميتوانيد قسمتهاي مختلف يك سيستم قديمي تر را بدون ترس جابجا نموده يا بكلي از
سيستم خارج نماييد .

سه اصل oop
كليه زبانهاي برنامه نويسي شي ئگرا مكانيسمهايي را در اختيار شما قرار ميدهند
تا مدل شي ئگرا را پياده سازي نماييد. اين مدل شامل كپسول سازي (encapsulation)
وراثت (inheritance) و چند شكلي (polymorphism) مي باشد . اكنون نگاه دقيقتري
به اين مفاهيم خواهيم داشت .

كپسول سازي encapsulation
كپسول سازي مكانيسمي است كه يك كد و داده مربوط با آن كد را يكجا گرد آوري
نموده ( در يك كپسول فرضي قرار داده ) و كپسول بدست آمده را در مقابل دخالت يا
سوئ استفاده هاي غير مجاز محافظت مي نمايد . مي توان كپسول سازي را بعنوان يك
لفافه (wrapper) درنظر گرفت كه كد داده مربوطه را نسبت به دستيابيهاي غيرمعمول
و غير منتظره ساير كدهاي تعريف شده در خارج از لفافه محافظت مي كند . دستيابي
به كد و داده موجود داخل لفافه از طريق رابطهاي خوب تعريف شده كنترل خواهد شد.
در دنياي واقعي ، سيستم انتقال اتوماتيك در يك اتوموبيل را درنظر بگيريد . اين
سيستم صدها بيت از اطلاعات درباره موتور اتوموبيل شما را كپسول سازي مي كند :
مثل سرعت حركت شما ، شيب سطح در حال حركت و موقعيت اهرم انتقال . شما بعنوان
يك كاربر قفط يك راه براي تاثير نهادن در اين كپسول سازي پيچيده خواهيد داشت :
بوسيله تغيير اهرم انتقال دهنده ، اما با استفاده از سيگنالهاي برگشتي يا برف
پاك كن شيشه جلو ، نمي توانيد روي سيستم انتقال قدرت اتوموبيل تاثيري بگذاريد.
بنابراين دست دنده ( اهرم انتقال دنده ) يك رابط خوب تعريف شده ( والبته منحصر
بفرد ) براي سيستم انتقال است . مضاف بر اينكه آنچه درون سيستم انتقال اتفاق
مي افتد ، تاثيري بر اشيائ خارج از سيستم نخواهد داشت . بعنوان مثال ، دنده هاي
انتقال ، چراغهاي جلو اتوموبيل را روشن نمي كنند . از آنجاييكه سيستم انتقال
اتوموبيلها كپسول سازي شده ، دهها توليد كننده اتوموبيل قادرند سيستم هاي انتقال
دلخواه خود را طراحي و پياده سازي نمايند . اما از نقطه نظر كاربر اتوموبيل
همه اين سيستم ها يكسان كار مي كنند. درست همين ايده را مي توان در برنامه نويسي
كامپيوتر نيز پياده سازي نمود . قدرت كدهاي كپسول شده در اين است كه هر كسي
مي داند چگونه به آنها دسترسي يافته و ميتواند صرفنظر از جزئيات اجرا و بدون
ترس از تاثيرات جانبي از آنها استفاده نمايد .
در جاوا كپسول سازي بر اساس كلاس (class) انجام مي گيرد . اگر چه كلاس با
جزئيات بيشتري در اين كتاب بررسي خواهد شد ، اما بحث مختصر بعدي در اين مورد
سودمند خواهد بود. كلاس توصيف كننده ساختار و رفتاري ( داده و كد ) است كه توسط
يك مجموعه از اشيائ اشاعه خواهد يافت . هر شي ئ در يك كلاس شامل ساختار و رفتار
تعريف شده توسط همان كلاس است . بهمين دليل ، به اشيائ گاهي " نمونه هايي از يك
كلاس " نيز مي گويند . بنابراين ، يك كلاس يك ساختار منطقي است ، يك شي ئ داراي
واقعيت فيزيكي است .
وقتي يك كلاس بوجود مي آوريد ، در حقيقت كد و داده اي كه آن كلاس را تشكيل
مي دهند ، مشخص مي نماييد . اين عناصر را اعضائ (members) يك كلاس مي نامند .
بطورمشخص ، داده تعريف شده توسط كلاس را بعنوان متغيرهاي عضو(member variables)
يا متغيرهاي نمونه (instance variables) مي نامند . كدي كه روي آن داده ها عمل
مي كند را روشهاي عضو (member methods) يا فقط روشها (methods) مي نامند .
( اگر با Cو C++و آشنا باشيد مي دانيد كه روش در برنامه نويسي جاوا همان تابع
(function) در زبانهاي Cو C++و مي باشد . ) در برنامه هاي خوب نوشته شده جاوا
روشها توصيف كننده چگونگي استفاده از متغيرهاي عضو هستند . يعني كه رفتار و
رابط يك كلاس توسط روشهايي تعريف مي شوند كه روي داده هاي نمونه مربوطه عمل
مي كنند .
چون هدف يك كلاس پياده سازي كپسول سازي براي موارد پيچيده است ، روشهايي براي
پنهان كردن پيچيدگي اجزائ در داخل يك كلاس وجود دارد. هر روش يا متغير داخل يك
كلاس ممكن است خصوصي private يا عمومي public باشد . رابط عمومي يك كلاس ، معرفي
كننده هر چيزي است كه كاربران خارج از كلاس نياز به دانستن آنها دارند . روشها
و داده هاي خصوصي فقط توسط كدهاي عضو يك كلاس قابل دسترسي هستند . بنابراين هر
كد ديگري كه عضو يك كلاس نباشد، نمي تواند به يك روش خصوصي دسترسي داشته باشد.
چون اعضائ خصوصي يك كلاس ممكن است فقط توسط ساير بخشهاي برنامه شما از طريق
روشهاي عمومي كلاس قابل دسترسي باشند، مي توانيد مطمئن باشيد كه فعل و انفعالات
غير مناسب اتفاق نخواهد افتاد . البته ، اين بدان معني است كه رابط عمومي بايد
با دقت طراحي شود تا كاركرد داخلي يك كلاس را چندان زياد برملا نكند .

وراثت inheritance
وراثت رويه اي است كه طي آن يك شي ئ ويژگيهاي شي ئ ديگري را كسب مي كند . اين
موضوع بسيار اهميت دارد زيرا از مفهوم طبقه بندي سلسله مراتبي حمايت مي كند .
همانطوريكه قبلا" گفتيم ، بسياري از دانشها توسط طبقه بندي سلسله مراتبي قابل
فهم و مديريت ميشوند. بعنوان مثال سگهاي شكاري طلايي يكي از انواع طبقه بنديهاي
سگها هستند كه بنوبه خود جزئي از كلاس پستانداران خونگرم بوده كه در كلاس بزرگتري
تحت عنوان حيوانات قرار مي گيرند .
بدون استفاده از سلسله مراتب ، بايد خصوصيات هر يك از اشيائ را جداگانه
توصيف نمود . اما هنگام استفاده از سلسله مراتب ، براي توصيف يك شي ئ كافي است
كيفيتهايي كه آن شي ئ را در كلاس مربوطه منحصر بفرد و متمايز مي سازد ، مشخص
نماييد . آن شي ئ ممكن است خصوصيات عمومي را از والدين خود بارث برده باشد .
بدين ترتيب در مكانيسم وراثت ، يك شي ئ مي تواند يك نمونه مشخص از يك حالت
عمومي تر باشد . اجازه دهيد تا با دقت بيشتري به اين رويه نگاه كنيم .
بسياري از افراد، دنيا را بطور طبيعي بعنوان مجموعه اي از اشيائ مي دانند كه
در يك روش سلسله مراتبي بيكديگر مرتبط شده اند . نظير حيوانات ، پستانداران و
سگها . اگر بخواهيد حيوانات را با يك روش تجريدي توصيف نماييد ، بايد برخي
خصوصيات نظير اندازه ، هوش و نوع اسكلت آنها را مشخص نماييد . حيوانات همچنين
ويژگيهاي خاص رفتاري دارند ، آنها تغذيه نموده ، تنفس كرده و مي خوابند . اين
توصيف از خصوصيات و رفتار را توصيف " كلاس " حيوانات مي نامند .
اگر بخواهيد توصيف يك كلاس مشخصتر از حيوانات مثل پستانداران داشته باشيد
بايد خصوصيات دقيقتري نظير نوع دندانها و آلات پستانداري را مشخص نماييد . اين
را يك زير كلاس (subclass) از حيوانات و خود حيوانات را كلاس بالاي (superclass)
پستانداران گويند . چون پستانداران نوعي از حيوانات هستند ، بنابراين كليه
خصوصيات حيوانات را بارث برده اند. يك زير كلاس ارث برنده درحقيقت كليه خصوصيات
اجداد خود در سلسله مراتب كلاس را به ارث مي برد .

| Animal |

|| ||
||
\/ \/

| Mammal | | Reptile ...|

|| ||

|| \/ \/

| Canine | | Feline ...|

|| ||

|| \/ \/

| Domesticus | | Lupus ...|

|| ||

|| \/ \/

| Retriever | | Poodle ...|

|| ||

|| \/ \/

| Labrador | | Golden |

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

چند شكلي polymorphism
چند شكلي مفهومي است كه بوسيله آن يك رابط (interface) را مي توان براي يك
كلاس عمومي از فعاليتها بكار برد . فعاليت مشخص توسط طبيعت دقيق يك حالت تعريف
مي شود . يك پشته را در نظر بگيريد ( كه در آن هر چيزي كه آخر آمده ، ابتدا
خارج مي شود ) . ممكن است برنامه اي داشته باشيد كه مستلزم سه نوع پشته باشد .
يك پشته براي مقادير عدد صحيح ، يكي براي مقادير اعشاري و يكي هم براي كاراكترها
لازم داريد. الگوريتمي كه اين پشته ها را اجرا ميكند، يكسان است ، اگرچه داده هاي
ذخيره شده در هر يك از اين پشته ها متفاوت خواهد بود. در يك زبان شي ئ گرا ، شما
بايد سه مجموعه متفاوت از روالهاي (routines) پشته ايجاد نماييد ، و براي هر
مجموعه اسامي متفاوت اختيار كنيد. اما براساس مفهوم چند شكلي در جاوا ميتوانيد
يك مجموعه كلي از روالهاي پشته را مشخص نماييد كه همگي از يك نام استفاده كنند.
در حالت كلي مفهوم چند شكلي را مي توان با عبارت " يك رابط و چندين روش "
توصيف نمود . بدين ترتيب قادر هستيد يك رابط ژنريك (generic) را براي گروهي از
فعاليتهاي بهم مرتبط طراحي نماييد . با طراحي يك رابط براي مشخص نمودن يك كلاس
عمومي از فعاليتها، مي توان پيچيدگي برنامه ها را كاهش داد. اين وظيفه كامپايلر
است تا عمل مشخصي ( منظور همان روش است ) را براي هر يك از حالات مختلف انتخاب
نمايد . شما بعنوان يك برنامه نويس لازم نيست اين انتخاب را بصورت دستي انجام
دهيد . شما فقط كافي است رابط كلي را بياد سپرده و از آن به بهترين وجه ممكن
استفاده نماييد .
در مثال مربوط به سگها ، حس بويايي سگ نوعي چند شكلي است . اگر سگ بوي يك
گربه را استشمام كند ، پارس كرده و بدنبال گربه خواهد دويد . اگر سگ بوي غذا
را استشمام كند ، بزاق دهانش ترشح كرده و بطرف ظرف غذا حركت خواهد كرد . در هر
دو حالت اين حس بويايي سگ است كه فعاليت مي كند . تفاوت در آن چيزي است كه
استشمام مي شود ، يعني نوع داده اي كه به سيستم بويايي سگ وارد مي شود . همين
مفهوم كلي را مي توان در جاوا پياده سازي نمود و روشهاي متفاوت درون برنامه هاي
جاوا را ساماندهي كرد .

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


جاوا يك زبان كاملا" نوع بندي شده است ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۵۴ مراجعه امروز
۴۴۷۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
جاوا يك زبان كاملا" نوع بندي شده است
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۵۲ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

جاوا يك زبان كاملا" نوع بندي شده است

در حقيقت بخشي از امنيت و قدرتمندي جاوا ناشي از همين موضوع است . اكنون
ببينيم كه معناي دقيق اين موضوع چيست . اول اينكه هر متغيري يك نوع دارد ، هر
عبارتي يك نوع دارد و بالاخره اينكه هر نوع كاملا" و دقيقا" تعريف شده است . دوم
اينكه ، كليه انتسابها (assignments) خواه بطور مستقيم و صريح يا بوسيله
پارامترهايي كه در فراخواني روشها عبور مي كنند ، از نظر سازگاري انواع كنترل
مي شوند . بدين ترتيب اجبار خودكار يا تلاقي انواع در هم پيچيده نظير ساير
زبانهاي برنامه نويسي پيش نخواهد آمد. كامپايلر جاوا كليه عبارات و پارامترها
را كنترل مي كند تا مطمئن شود كه انواع ، قابليت سازگاري بهم را داشته باشند .
هر گونه عدم تناسب انواع ، خطاهايي هستند كه بايد قبل از اينكه كامپايلر عمل
كامپايل نمودن كلاس را پايان دهد ، تصحيح شوند .
نكته : اگر داراي تجربياتي در زبانهاي Cو C++و هستيد ، بياد بسپاريد كه جاوا
نسبت به هر زبان ديگري نوع بندي شده تر است . بعنوان مثال در Cو C++و
مي توانيد يك مقدار اعشاري را به يك عدد صحيح نسبت دهيد . همچنين در
زبان C كنترل شديد انواع بين يك پارامتر و يك آرگومان انجام نمي گيرد .
اما در جاوا اين كنترل انجام مي گيرد . ممكن است كنترل شديد انواع در
جاوا در وهله اول كمي كسل كننده بنظر آيد . اما بياد داشته باشيد كه
اجراي اين امر در بلند مدت سبب كاهش احتمال بروز خطا در كدهاي شما

کيفيت مقاله :
عالی خوب متوسط ضعيف


همزمان سازي Synchronization ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۵۷ مراجعه امروز
۴۴۷۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
همزمان سازي Synchronization
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۲۲ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

همزمان سازي Synchronization

وقتي لازم است دو يا چند نخ به يك منبع باشتراك گذاشته ، دسترسي يابند، بايد
روشي بكار بريم تا مطمئن شويم كه آن منبع در يك زمان خاص فقط توسط يك نخ مورد
استفاده قرار مي گيرد. پردازشي كه اينكار را انجام ميدهد، اصطلاحا" همزمان سازي
يا Synchronization مي نامند . همانطوريكه خواهيد ديد ، جاوا پشتيباني سطح
منحصر بفرد زبان را براي اين امر فراهم نموده است .
كليد همزمان سازي ، مفهوم ماسوره monitor است ( كه همچنين مرسوم به semaphore
مي باشد . ) يك monitor شيئي است كه بعنوان يك قفل اجتماع ناسازگار mutually)
(exclusive يا mutexا استفاده مي شود . در يك زمان خاص فقط يك نخ مي تواند
مالك يك ماسوره monitor باشد . وقتي يك نخ يك قفل را بدست مي آورد ، مي گوييم
كه به ماسوره monitor وارد شده است (entered). كليه نخ هاي ديگر كه تلاش ميكنند
به monitor قفل شده وارد شوند تا زماني كه اولين نخ درmonitor حضور داشته باشد
لغو خواهند شد . مي گويند نخ هاي ديگر در انتظار (waiting) ورود به ماسوره monitor
مانده اند. نخي كه مالك يك ماسوره monitor است ، در صورت تمايل ميتواند
مجددا" به آن ماسوره وارد شود .
اگر هنگام استفاده از زبانهاي ديگر نظير Cو C++و با همزمان سازي كار كرده
باشيد ، حتما" مي دانيد كه استفاده از آن تا حدي گومراه كننده است . اين بخاطر
آن است كه اكثر زبانها خودشان از چنين چيزي پشتيباني نمي كنند. درعوض ، برنامه
شما بايد عناصر اوليه سيستم عامل را طوري بهينه نمايد تا نخ ها همزماني پيدا
كنند . خوشبختانه ، چون جاوا همزماني را از طريق اجزائ خود زبان پياده سازي
مي كند ، بسياري از پيچيدگيهاي همراه با همزمان سازي در اين زبان از بين رفته
است .
دو شيوه براي همزمان سازي كدهاي شما وجود دارد . هر دو شيوه شامل استفاده
از واژه كليدي Synchronized است .

استفاده از روشهاي همزمان سازي
همزمان سازي در جاوا بسيار ساده است ، زيرا كليه اشيائ همراه خود و بطور
ضمني يك ماسوره monitor خاص خود را دارند . براي وارد كردن monitor يك شيئي
فقط كافي است روشي را كه با واژه كليدي synchronized اصلاح شده باشد ، فراخواني
نماييد . در حاليكه يك نخ داخل يك روش همزمان سازي قرار دارد، ساير نخ هايي كه
تلاش مي كنند آن ( يا هر روش همزمان سازي ديگر ) را فراخواني نمايند ، روي همان
نمونه بايد منتظر بمانند . براي خارج شدن از monitor و ترك نمودن كنترل شي ئ به
نخ بعدي در حال انتظار ، مالك monitor خيلي ساده بايد از روش همزمان سازي
برگردد .
براي درك نياز به همزمان سازي ، اجازه دهيد با يك مثال ساده شروع كنيم كه
از اين روش استفاده نمي كند و البته بايد استفاده كند . برنامه بعدي سه كلاس
ساده دارد . اولين كلاس callme است كه يك روش منفرد تحت عنوان ()call دارد .
روش فوق يك پارامتر رشته اي string تحت نام msg را مي گيرد . اين روش سعي ميكند
رشته msg را داخل كروشه هاي مربع چاپ نمايد . نكته جالب توجه اين است كه بعد از
اينكه كروشه باز شونده و رشته msg را چاپ مي كند ، (1000) Thread-sleep را
فراخواني مي كند كه نخ جاري را بمدت يك ثانيه متوقف مي سازد .
سازنده كلاس بعدي ، caller ، يك ارجاع به نمونه اي از كلاس callme و يك رشته string
مي گيرد كه بترتيب در targetو msgو ذخيره شده اند . سازنده همچنين يك نخ
جديد ايجاد مي كند كه روش ()run مربوط به اين شي ئ را فراخواني مي كند . نخ
بلافاصله شروع مي شود. روش ()run مربوط به caller، روش ()call روي نمونه target
مربوط به callme را فراخواني نموده و در رشته msg مي گذارند . در نهايت ، كلاس synch
با ايجاد يك نمونه منفرد از callme و سه نمونه از caller ، هر كدام با
يك رشته پيام منحصر بفرد ، آغاز مي شود . همان نمونه از callme به هر يك از caller
ها گذر داده مي شود .

+ // This program is not synchronized.
+ class Callme {
+ void call(String msg ){
+ System.out.print("[" + msg);
+ try {
+ Thread.sleep(1000);
+ } catch(InterruptedException e ){
+ System.out.println("Interrupted");
+ }
+ System.out.println("]");
+ }
+ }
+
+ class Caller implements Runnable {
+ String nsg;
+ Callme target;
+ Thread t;
+
+ public Caller(Callme targ/ String s ){
+ target = targ;
+ msg = s;
+ t = new Thread(this);
+ t.start)(;
+ }
+
+ public void run )({
+ target.call(msg);
+ }
+ }
+
+ class Synch {
+ public static void main(String args[] ){
+ Callme target = new Callme)(;
+ Caller ob1 = new Caller(target/ "Hello");
+ Caller ob2 = new Caller(target/ "Synchronized");
+ Caller ob3 = new Caller(target/ "World");
+
+ // wait for threads to end
+ try {
+ ob1.t.join)(;
+ ob2.t.join)(;
+ ob3.t.join)(;
+ } catch(InterruptedException e ){
+ System.out.println("Interrupted");
+ }
+ }
+ }

در اينجا خروجي توليد شده توسط اين برنامه را مشاهده مي كنيد :

[Hello[Synchronized[World]
]
]

همانطوريكه مي بينيد روش ()call بوسيله فراخواني ()sleep اجازه مي دهد تا
اجرا به ساير نخ ها منتقل شود . اين امر منجر به حاصل پيچيده سه رشته پيام
مي شود . در اين برنامه ، چيزي وجود ندارد كه مانع فراخواني يك روش يكسان
روي يك شي ئ در يك زمان واحد توسط هر سه نخ شود . اين حالت را " شرط مسابقه "
(race condition) مي نامند ، زيرا هر سه نخ براي تكميل روش با يكديگر مسابقه
مي گذارند . در اين مثال از ()sleep استفاده شده تا تاثيرات را آشكار و قابل
تكرار نمايد . در بسياري از شرايط ، شرط مسابقه بسيار ظريفتر و كمتر قابل پيش
بيني است ، زيرا نمي توانيد مطمئن باشيد كه راه گزيني متن (context switch) چه
زماني اتفاق مي افتد . اين امر سبب مي شود تا يك برنامه در يك اجرا صحيح و در
اجراي ديگري ناصحيح عمل كند .
براي تثبيت برنامه قبلي ، بايد دسترسي به ()call را بصورت سريالي ترتيب
دهيد . يعني بايد دسترس به آن را فقط به يك نخ در زمان واحد محدود نماييد .
براي اينكار لازم است تعريف ()call همراه با واژه كليدي synchronized را بصورت
زير بكار بريد :

+ class Callme {
+ synchronized void call(String msg ){
+...

اين كار سبب مي شود كه هنگام استفاده يك نخ از ()call ، ساير نخ ها امكان
ورود به آن روش را نداشته باشند . بعد از اينكه synchronized به ()call اضافه
مي شود ، خروجي برنامه بصورت بعدي خواهد شد :

[Hello]
[Synchronized]
[World]

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

دستور همزمان سازي شده The synchronized statement
در حاليكه ايجاد روشهاي synchronized داخل كلاسهايي كه ايجاد كرده ايد ، يك
وسيله آسان و موثر براي دستيابي به همزمان سازي است ، اما در هر شرايطي اين
روش كارايي ندارد . براي درك علت آن ،مورد بعدي را در نظر بگيريد . تصور كنيد
كه مي خواهيد دسترسي به يك شي ئ از يك كلاس را كه با شيوه دسترسي چند نخ كشي شده
طراحي نشده ، بصورت همزمان درآوريد . يعني اين كلاس از روشهاي synchronized
استفاده نمي كند و بعلاوه ، اين كلاس توسط شما ايجاد نشده و بنابراين به كد منبع
آن دسترسي نداريد . بنابراين نمي توانيد synchronized را به روشهاي مناسب داخل
كلاس اضافه نماييد. چگونه مي توان دسترسي به يك چنين كلاسي را همزمان سازي نمود?
خوشبختانه راه حل اين مشكل بسيار ساده است .
خيلي ساده فراخوانيهاي به روشهاي تعريف شده توسط اين كلاس را داخل يك بلوك synchronized
قرار مي دهيد .
شكل عمومي دستور synchronized بصورت زير است :

synchronized(object ){
// statements to be synchronized
}

در اينجا object ارجاعي است به شيئي كه مي خواهد همزمان سازي شود . اگر فقط
بخواهيد يك دستور منفرد را همزمان سازي نماييد، آنگاه ابروها موردنياز نيستند.
يك بلوك همزمان سازي به شما اطمينان مي دهد كه يك فراخواني به روشي كه عضوي از object
است فقط زماني اتفاق مي افتد كه نخ جاري بطور موفق وارد ماسوره monitor
مربوط به شيئي شده باشد .
يك روايت جايگزين از مثال قبلي وجود دارد. اين مثال از يك بلوك همزمان سازي
داخل يك روش ()run استفاده مي كند .

+ // This program uses a synchronized block.
+ class Callme {
+ void call(String msg ){
+ System.out.print("[" + msg);
+ try {
+ Thread.sleep(1000);
+ } catch(InterruptedException e ){
+ System.out.println("Interrupted");
+ }
+ System.out.println("]");
+ }
+ }
+
+ class Caller implements Runnable {
+ String nsg;
+ Callme target;
+ Thread t;
+
+ public Caller(Callme targ/ String s ){
+ target = targ;
+ msg = s;
+ t = new Thread(this);
+ t.start)(;
+ }
+
+ // synchronize calls to call)(
+ public void run )({
+ synchronized(target ){ // synchronized block
+ target.call(msg);
+ }
+ }
+ }
+
+ class Synch1 {
+ public static void main(String args[] ){
+ Callme target = new Callme)(;
+ Caller ob1 = new Caller(target/ "Hello");
+ Caller ob2 = new Caller(target/ "Synchronized");
+ Caller ob3 = new Caller(target/ "World");
+
+ // wait for threads to end
+ try {
+ ob1.t.join)(;
+ ob2.t.join)(;
+ ob3.t.join)(;
+ } catch(InterruptedException e ){
+ System.out.println("Interrupted");
+ }
+ }
+ }

در اينجا روش ()call توسط synchronized اصلاح نشده است . در عوض ، دستور synchronized
داخل روش ()run مربوط به caller استفاده شده است . حاصل اين
برنامه مثل برنامه قبلي و صحيح است ، چون هر نخ منتظر مي ماند تا نخ با تقدم
بيشتر كارش تمام شود .

ارتباط بين نخ ها Interthread Communication
در مثالهاي قبلي ، ما بدون هيچ شرطي از طريق بلوكه كردن ، ساير نخ ها را از
دسترسي غير همزمان به روشهاي خاصي منع كرديم . اين كاربرد از monitor ضمني در
اشيائ جاوا بسيار قدرتمند است . اما يك سطح ظريفتر از كنترل وجود دارد كه
ميتوانيد از طريق ارتباطات بين پردازشي (interprocess) بدست آوريد. همانطوريكه
خواهيد ديد ، اين امر بخصوص در جاوا بسيار آسان است .
همانطوريكه قبلا"بحث شد، چند نخ كشي كردن ، برنامه نويسي براساس حلقه رويداد
را ، با تقسيم نمودن وظابف به واحدهاي مجزا و منطقي جايگزين مي كند . نخ ها
همچنين يك مزيت ديگر هم دارند . آنها همه نگري polling را انجام مي دهند . polling
معمولا" توسط يك حلقه كه براي كنترل مكرر برخي شرايط استفاده مي شود
پياده سازي مي شود . وقتي شرايط صحيح باشد ، عمل مناسب انجام خواهد گرفت . اين
كار زمان cpu را تلف مي كند . بعنوان مثال ، مشكل صف بندي را در نظر بگيريد
جايي كه يك نخ برخي داده ها را توليد مي كند و نخ ديگري آنها را مصرف مي كند .
براي اينكه مشكل جالبتر شود ، اجازه دهيد فرض كنيم كه توليد كننده براي توليد
داده جديد بايد منتظر بماند تا مصرف كننده داده قبلي را مصرف نمايد . در يك
سيستم polling ، مصرف كننده چرخه هاي زيادي از cpu را تلف مي كند و منتظر توليد
كننده مي ماند . وقتي توليد كننده كارش را تمام مي كند ، شروع به polling
مي كند و چرخه هاي بيشتري از cpu را تلف مي كند تا منتظر بماند كه مصرف كننده
كارش را تمام نمايد و الي آخر . واضح است كه چنين اوضاعي اصلا" مطلوب نيست .
براي ممانعت از polling ، جاوا يك مكانيسم ارتباطات بين پردازشي مناسب توسط
روشهاي ()wait ، ()notify و ()notifyAll داخل مي گرداند . اين روشها در object
بعنوان روشهاي final پياده سازي مي شوند ، بنابراين همه كلاسها آنها را خواهند
داشت . هر سه روش فقط از داخل يك روش synchronized قابل فراخواني هستند اگر چه
قوانين استفاده از اين روشها از نظر علم كامپيوتر بسيار پيشرفته است ، اما
كاملا" ساده و سهل الاستفاده هستند :
ؤ ()wait به نخ فراخواننده مي گويد ماسوره monitor را ترك كرده و فعلا" معوق
( خواب ) بماند تا اينكه يك نخ ديگر وارد همان ماسوره شده و ()notify را
فراخواني نمايد .
ؤ ()notify اولين نخي كه ()wait را روي همان شي ئ فراخواني كرده ، از خواب
مي پراند .
ؤ ()notifyAll كليه نخ هايي كه ()wait را روي همان شي ئ فراخواني كرده اند را
بيدار ( فعال ) مي كند . نخ داراي بيشترين تقدم ، اول اجرا مي شود . اين روشها
داخل object و بصورت زير اعلان مي شوند :

final void wait)(
final void notify)(
final void notify All)(

شكلهاي اضافي از ()wait وجود دارند كه به شما امكان تعيين يك دوره از زمان
انتظار را هم مي دهند .
برنامه نمونه بعدي باشتباه يك شكل ساده از مشكل توليد كننده / مصرف كننده را
پياده سازي مي نمايد . چهار كلاس آن عبارتند از : Q ، صفي است كه در تلاش همزمان
سازي آن هستيد. producer ، شي ئ نخ كشي شده است كه مدخلهاي صف را توليد مي كند. consumer
، شي ئ نخ كشي شده است كه مدخلهاي صف را مصرف مي كند . و pc ، كلاس
ظريفي است كه Q، producer،و consumerو منفرد را ايجاد مي كند .

+ // An incorrect implementation of a producer and consumer.
+ class Q {
+ int n;
+
+ synchronized int get )({
+ System.out.println("Got :" + n);
+ return n;
+ }
+
+ synchronized void put(int n ){
+ this.n = n;
+ System.out.println("Put :" + n);
+ }
+ }
+
+ class Producer implements Runnable {
+ Q q;
+
+ Producer(Q q ){
+ this.q = q;
+ new Thread(this/ "Producer".)start)(;
+ }
+
+ public void run )({
+ int i = 0;
+ while(true ){
+ q.put(i++);
+ }
+ }
+ }
+
+ class Consumer implements Runnable {
+ Q q;
+
+ Consumer(Q q ){
+ this.q = q;
+ new Thread(this/ "Consumer".)start)(;
+ }
+
+ public void run )({
+ while(true ){
+ q.get(i++);
+ }
+ }
+ }
+
+ class PC {
+ public static void main(String args[] ){
+ Q q = new Q)(;
+ new Producer(q);
+ new Consumer(q);
+
+ System.out.println("Press Control-C to stop.");
+ }
+ }

اگر چه روشهاي ()put و ()get روي Q همزمان سازي شده اند ، اما هيچ چيزي مانع
توليد كننده نمي شود تا از مصرف كننده جلوتر برود ، همينطور هيچ چيزي جلوي
مصرف كننده را نمي گيرد تا همان صف را دوباره مصرف نكند. بنابراين ، شما نتيجه
پر از غلطي بصورت زير خواهيد داشت . ( حاصل دقيق براساس سرعت و بارگذاري task
در پردازنده ها متفاوت خواهد بود . )

Put :1
Got :1
Got :1
Got :1
Got :1
Got :1
Put :2
Put :3
Put :4
Put :5
Put :6
Put :7
Got :7

همانطوريكه مي بينيد ، بعد از اينكه توليد كننده 1 را قرار مي دهد ، مصرف
كننده شروع شده و همان مقدار 1 را پنج بار در يك سطر دريافت مي كند. سپس توليد
كننده از سرگرفته شده و 2و 7و را توليد مي كند بدون اينكه به مصرف كننده اجازه
دهد كه از آنها مصرف نمايد .
راه مناسب نوشتن اين برنامه در جاوا ، استفاده از ()wait و ()notify براي
علامت دادن (signal) در هر دو جهت ، بصورت زير است :

+ // A correct implementation of a producer and consumer.
+ class Q {
+ int n;
+ bollean valueSet = false;
+
+ synchronized int get )({
+ if(!valueSet)
+ try {
+ wait)(;
+
+ } catch(InterruptedException e ){
+ System.out.println("InterruptedException caught");
+ }
+
+ System.out.println("Got :" + n);
+ valueSet = false;
+ notify)(;
+ return n;
+ }
+ synchronized void put(int n ){
+ if(valueSet)
+
+ try {
+ wait)(;
+ } catch(InterruptedException e ){
+ System.out.println("InterruptedException caught");
+ }
+
+ this.n = n;
+ valueSet = true;
+ System.out.println("Put :" + n);
+ notify)(;
+ }
+ }
+
+ class Producer implements Runnable {
+ Q q;
+
+ Producer(Q q ){
+ this.q = q;
+ new Thread(this/ "Producer".)start)(;
+ }
+
+ public void run )({
+ int i = 0;
+ while(true ){
+ q.put(i++);
+ }
+ }
+ }
+
+ class Consumer implements Runnable {
+ Q q;
+
+ Consumer(Q q ){
+ this.q = q;
+ new Thread(this/ "Consumer".)start)(;
+ }
+
+ public void run )({
+ while(true ){
+ q.get)(;
+ }
+ }
+ }
+
+ class PCFixed {
+ public static void main(String args[])
+ Q q = new Q)(;
+ new Producer(q);
+ new Consumer(q);
+
+ System.out.println("Press Control-C to stop.");
+ }
+ }

()wait در داخل ()get فراخواني شده است . اين كار سبب شده تا اجراي آن تا
زماني كه producer به شما اعلام كند كه داده آماده مصرف وجود دارد لغو شود .
وقتي اين اتفاق مي افتد ، اجراي داخل ()get از سر گرفته مي شود . هر بار كه
داده اي بدست آمده باشد، ()get ، ()notify را فراخواني مي كند. اين به producer
مي گويد كه مي تواند داده بيشتري را در صف قرار دهد . داخل ()put ، ()wait اجرا
را لغو مي كند تا اينكه consumer آن قلم را از صف حركت داده باشد . وقتي اجرا
از سر گرفته مي شود ، قلم بعدي داده در صف قرار داده مي شود ، و ()notify
فراخواني مي شود . اين امر به consumer مي گويد كه اكنون بايد آن را حركت دهد.
در اينجا قسمتي از حاصل اين برنامه وجود دارد كه نشان دهنده رفتار مناسب و
روشن همزمان سازي است :

Put :1
Got :1
Put :2
Got :2
Put :3
Got :3
Put :4
Got :4
Put :5
Got :5

بن بست Deadlock
يك نوع خاص از خطا وجود دارد كه بخصوص با چند وظيفه اي مرتبط است و بايد از
آن جلوگيري نماييد . اين خطا را " بن بست "يا Deadlockا مي نامند . بن بست
زماني اتفاق مي افتد كه دو نخ وابستگي چرخشي روي يك جفت اشيائ همزمان سازي شده
داشته باشند . بعنوان مثال ، فرض كنيد يك نخ وارد monitor شي ئ x شده و ديگري
وارد monitor شي ئ y مي گردد . اگر نخ در x سعي كند تا هر يك از روشهاي همزمان
سازي شده در y را فراخواني كند ، همانطوريكه انتظار داريد ، بلوكه مي شود . اما
اگر نخ موجود در y سعي كند تا هر يك از روشهاي همزمان سازي شده روي x را
فراخواني نمايد ، بايد تا ابد در انتظار بماند . چون براي دسترسي به x ، بايد
قفل خودش روي y را باز كند . بطوريكه اولين نخ بتواند تكميل شود . اشكال زدايي
خطاي بن بست بدو دليل بسيار مشكل است :
ؤ در كل ، اين خطا بندرت اتفاق مي افتد ، يعني زماني كه برش زماني هر دو نخ
دقيقا" مطابق يكديگر باشند .
ؤ اين خطا ممكن است دربرگيرنده بيش از دو نخ و دو شي ئ همزمان سازي شده باشد.
( يعني بن بست مي تواند از طريق سلسله مراتب بهم پيچيده اي از رويدادها اتفاق
بيفتد . )
براي درك كامل بن بست ، بهتر است آن را حين عمل مشاهده كنيم . مثال بعدي دو
كلاس Aو Bو را ايجاد مي كند كه بترتيب داراي روشهاي fooو barو هستند كه قبل از
تلاش براي فراخواني يك روش در كلاس ديگر توقف كوتاهي ايجاد مي كنند . كلاس اصلي
نحن نام Deadlock يك نمونه از Aو Bو ايجاد مي كند ، سپس يك نخ ثانوي را شروع
مي كند كه شرط بن بست را تعيين مي كند . روشهاي fooو barو از ()sleep بعنوان
شيوه اي براي وقوع شرط بن بست استفاده مي كنند .

+ // An example of deadlock.
+ class A {
+ synchronized void foo(B b ){
+ String name = Trhead.currentThread.)(getName)(;
+
+ System.out.println(name + " entered A.foo");
+
+ try {
+ Thread.sleep(1000);
+ } catch(Exception e ){
+ System.out.println("A Interrupted");
+ }
+ System.out.println(name + " trying to call B.last)(");
+ b.last)(;
+ }
+
+ synchronized void last )({
+ System.out.println("Inside A.last");
+ }
+ }
+
+ class B {
+ synchronized void bar(A a ){
+ String name = Trhead.currentThread.)(getName)(;
+
+ System.out.println(name + " entered B.bar");
+
+ try {
+ Thread.sleep(1000);
+ } catch(Exception e ){
+ System.out.println("B Interrupted");
+ }
+ System.out.println(name + " trying to call A.last)(");
+ a.last)(;
+ }
+
+ synchronized void last )({
+ System.out.println("Inside A.last");
+ }
+ }
+
+ class Deadlock implements Runnable {
+ A a = new A)(;
+ B b = new B)(;
+
+ Deadlock )({
+ Thread.currentThread.)(setName("MainThread");
+ Thread t = new Thread(this/ "RacingThread");
+ t.start)(;
+
+ a.foo(b); // get lock on a in this thread.
+ System.out.println("Back in main thread");
+ }
+ public void run )({
+ b.bar(a); // get lock on b in other thread.
+ System.out.println("Back in other thread");
+ }
+
+ public static void main(String args[] ){
+ new Deadlock)(;
+ }
+ }

وقتي اين برنامه را اجرا مي كنيد ، خروجي زير را مشاهده مي كنيد :

MainThread entered A.foo
RacingThread entered B.bar
MainThread tyring to call B.last)(
RacingThread trying to call A.last)(

چون برنامه به بن بست رسيده ، بايد كليدهاي CTRL-C را فشار دهيد تا برنامه
پايان يابد. با فشردن CTRL-BREAK روي يك pc( و CTRL-\ودرsolariesر ) مي توانيد
يك انبار كامل نهان شده از نخ و monitor را مشاهده نماييد . خواهيد ديد كه Racing Thread
مالك ماسوره روي b است ، در حاليكه در انتظار ماسوره روي a بسر
مي برد . در همان زمان ، نخ اصلي مالك a است و در انتظار گرفتن b مي باشد . ي دهد، اگر گهگاه

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از چند نخ كشي كردن ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۶۰ مراجعه امروز
۴۴۷۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از چند نخ كشي كردن
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۴۰ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

استفاده از چند نخ كشي كردن

اگر مثل ساير برنامه نويسان باشيد ، پس در اختيار داشتن پشتيباني توكار از
چند نخ كشي شدن در زبان برنامه نويسي براي شما تازگي خواهد داشت . كليد استفاده
موثر از اين پشتيباني اين است كه بصورت " همزماني " تفكر نماييد نه بصورت
سريالي . بعنوان مثال ، وقتي دو زير سيستم داخل يك برنامه داريد كه مي توانند
همزمان اجرا شوند ، آنها را به نخ هاي منفرد تقسيم نماييد . با استفاده
محافظه كارانه از چند نخ كشي كردن ، مي توانيد برنامه هاي بسيار موثري بنويسيد.
اما اگر تعداد زيادي از نخ ها ايجاد نماييد، سبب افت عملكرد برنامه اتان خواهيد
شد . بياد داشته باشيد كه برخي بالاسريها با conext switching همراه هستند .
اگر تعداد زيادي از نخ ها ايجاد كنيد، آنگاه وقت cpu بيشتر از آنكه براي اجراي اص يابد ، صرف تغيير context ها خواهد شد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


I/o، applets، و ساير عناوين ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۶۳ مراجعه امروز
۴۴۷۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
I/o، applets، و ساير عناوين
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۴۹ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

I/o، applets، و ساير عناوين

از اين پس با دو تا از بسته هاي مهم جاوا آشنا مي شويد : ioو appletو . بسته io
، سيستم I/o ( ورودي / خروجي ) اصلي جاوا را پشتيباني مي كند و دربرگيرنده
فايل I/o مي باشد . بسته applet از ريز برنامه ها پشتيباني مي كند . پشتيباني
از I/o و ريز برنامه ها از هسته كتابخانه هاي API جاوا ناشي شده اند نه از واژه ي كليدي اين زبان .

کيفيت مقاله :
عالی خوب متوسط ضعيف


اصول I/o ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۶۶ مراجعه امروز
۴۴۸۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اصول I/o
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۸۷ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

اصول I/o

تاكنون بغيراز()printو()println) استفاده مهمي از ساير روشهاي I/o نداشتيم .
دليل آن خيلي ساده است : اكثر برنامه هاي واقعي جاوا براساس متن (text-based) و
برنامه هاي كنسول نيستند . بلكه آنها ريزبرنامه هاي با گرايش گرافيكي هستند كه
براي فعل و انفعال با كاربرشان ، متكي بر " جعبه ابزار پنجره اي مجرد جاوا "
(Java's Abstract window Toolkit) يا (AWT) مي باشند. اگرچه برنامه هاي براساس
متن بعنوان مثالهاي آموزشي بسيار مناسب هستند ، اما كاربرد چندان مهمي در جاوا
و در دنياي واقعي ندارند . در حاليكه پشتيباني جاوا از كنسول I/o محدود شده
است و كاربري آن فاقد زيبايي است اما حتي در برنامه هاي نمونه ساده هم كنسول I/o
براساس متن در برنامه نويسي جاوا اهميت چندان زيادي ندارد .
عليرغم واقعيات ذكر شده در پاراگراف قبلي ، جاوا پشتيباني قوي و قابل
انعطافي از I/o تا آنجاييكه به فايلها و شبكه ها مرتبط باشد ، انجام مي دهد .
سيستم I/o جاوا بسيار منسجم و مستحكم است . در حقيقت ، يكبار كه اصول آن را
درك نماييد ، اداره نمودن بقيه سيستم I/o در آن بسيار ساده خواهد بود .

جريانات Streams
برنامه هاي جاوا I/o را از طريق streams اجرا ميكنند. جريان (stream) تجريدي
است كه اطلاعات را توليد يا مصرف مي كند .
يك جريان ، از طريق سيستم I/o جاوا به يك وسيله فيزيكي پيوند مي يابد. كليه
جريانات (stream) داراي رفتار يكساني هستند ، حتي اگر وسائل فيزيكي كه به آنها
مرتبط شده اند ، با يكديگر متفاوت باشد . بدين ترتيب ، همان كلاسها و روشهاي I/o
را مي توان براي هر نوع وسيله اي اعمال نمود . اين بدان معني است كه يك جريان
ورودي مي تواند انواع مختلفي از ورودي را تجريد نمايد . از يك فايل ديسكت ، از
صفحه كليد يا از يك socket شبكه . بهمين روال ، يك جريان خروجي ممكن است به
كنسول ، به يك فايل ديسكت ، يا يك ارتباط شبكه اي ارجاع نمايد. جريانات (streams)
شيوه روشنتري براي كار كردن با ورودي / خروجي است بدون آنكه بخشهاي مختلف كد
شما دركي از اختلاف بين يك صفحه كليد و مثلا" يك شبكه داشته باشند .
نكته : اگر با C++/C آشنايي داريد ، پس با مفهوم جريان ( مسيل ) آشنايي داريد.
روش جاوا براي جريانات بسيار مشابه C++/C است .

كلاسهاي Stream
جاوا جريانات را داخل يك سلسله مراتب كلاس تعريف شده در بسته java.io پياده
سازي مي كند. در بالاي اين سلسله مراتب دو كلاس مجرد قرار دارند : Inputstream و . Outputstream

جاوا چندين زير كلاس بهم چسبيده از هر يك از اين كلاسها دارد كه تفاوتهاي بين
وسائل مختلف نظير فايلهاي ديسكي ، ارتباطات شبكه اي و حتي بافرهاي حافظه را
اداره مي نمايند . كلاسهاي stream را در جدول 1 نشان داده ايم . در اين قسمت چند
تا از اين كلاسها را بررسي ميكنيم . براي استفاده از كلاسهاي تعريف شده درjava.io
بايد اين بسته را به برنامه اتان وارد نماييد (import) .
كلاسهاي مجرد Inputstreamو Outputstreamو چندين روش كليدي تعريف مي كنند كه
ساير كلاسهاي stream آنها را پياده سازي مي كنند. دو تا از مهمترين آنها ()read
و ()write هستند كه بايت هاي داده را بترتيب خوانده و مي نويسند . هر دو روش
بعنوان abstract در داخل Inputstreamو Outputstreamو اعلان ميشوند. آنها بوسيله
كلاسهاي مشتق شده stream لغو مي شوند .

جريانات پيش تعريف شده
همانطوريكه مي دانيد ، كليه برنامه هاي جاوا بطور خودكار بسته java.lang را
وارد مي كنند. اين بسته يك كلاس موسوم به system را تعريف مي كند كه چندين جعبه
از محيط حين اجرا را كپسول سازي مي كند . بعنوان مثال ، با استفاده از برخي
روشهاي آن ، مي توانيد زمان و تنظيمات جاري متعلقات گوناگونه همراه سيستم را
بدست آوريد. همچنين دربرگيرنده سه متغير جريان از پيش تعريف شده يعني in، out، err
است . اين فيلدها داخل system بعنوان publicو staticو اعلان شده اند . اين
بدان معني است كه آنها توسط ساير بخشهاي برنامه اتان و بدون ارجاع به يك شي ئ
مشخص system قابل استفاده هستند . system.out
به جريان خروجي استاندارد ارجاع مي كند . بصورت پيش فرض ، اين
جريان همان كنسول است . system.in به ورودي استاندارد ارجاع مي كند كه بصورت
پيش فرض ، صفحه كليد است . system.err به جريان خطاي استاندارد ارجاع مي كند
كه بصورت پيش فرض همان كنسول است . اما مي توان اين جريانات را به هر وسيله
سازگار I/o تغيير جريان داد .
قبلا"از system.outز استفاده كرده ايد . مي توانيد system.in را نيز بهمان
ترتيب استفاده نماييد . همانطوريكه خواهيد ديد، كار با system.in كمي پيچيده تر
است .

خواندن ورودي كنسول console input
در جاوا ، ورودي كنسول بوسيله خواندن بايت ها از جريان ورودي انجام مي شود.
اين بايت ها نظير كاراكترها و رشته ها مي توانند به اشيائ گوناگون خوانده شوند.
اجازه دهيد به چند مثال كه ورودي كنسول را انجام مي دهند ، نگاهي داشته
باشيم .
نكته : جاوا يك روش ورودي كنسول عمومي شده دارد كه با تابع استاندارد c يعني
()scanf يا عملگرهاي ورودي C++ برابري مي كند .

جدول 1 : كلاسهاي Stream I/o در جاوا
مفهوم آن كلاس stream

جريان ورودي بافر دهي شده . BufferedInputStream
جريان خروجي بافر دهي شده . BufferedOutputStream
جريان ورودي كه بايت را از يك آرايه ByteArrayInputStream
مي خواند .
جريان خروجي كه بايت را از يك آرايه ByteArrayOutputStream
مي نويسد .
يك جريان ورودي كه شامل روشهايي براي DataInputStream
خواندن انواع داده استاندارد جاوا
است .
يك جريان خروجي كه شامل روشهايي براي DataOutputStream
نوشتن انواع داده استاندارد جاوا
است .
جريان ورودي كه از يك فايل مي خواند. FileInputStream
جريان خروجي كه از يك فايل مي نويسد. FileOutputStream Inputstream
را پياده سازي مي كند . FilterInputStream Outputstream
را پياده سازي مي كند . FilterOutputStream
كلاس مجردي كه ورودي جريان را توصيف InputStream
مي كند .
جريان ورودي كه خطها را شمارش ميكند. LineNumberInputStream
كلاس مجردي كه خروج جريان را توصيف OutputStream
مي كند .
خط لوله ورودي . PipedInputStream
خط لوله خروجي . PipedOutputStream
جريان خروجي كه دربرگيرنده ()print و PrintStream
()println باشد .
جريان ورودي كه از "unget" تك بايتي PushbackInputStream
پشتيباني مي كند كه يك يك بايت را به
جريان ورودي برمي گرداند .
ازدسترسي به فايل I/o پشتيباني ميكند. RandomAccessFile
جريان ورودي كه تركيبي از دو يا چند SequenceInputStream
جريان ورودي مي باشد كه بترتيب يكي
پس از ديگري خوانده شوند .
يك جريان ورودي علامتگذاري tokenizing. StreamTokenizer
جريان ورودي كه از يك رشته مي خواند. StringBufferInputStream

استفاده از ()read
پايين ترين سطح روش ورودي ()read است . اين روش چندين شكل دارد . شكلي كه
استفاده شده بصورت زير است :

int read )(Throws IOException
80
بار كه ()read فراخواني مي شود ، يك بايت تكي را از جريان ورودي خوانده
و آن را بعنوان يك مقدار عدد صحيح برمي گرداند . هنگاميكه با انتهاي جريان
مواجه مي شود ، مقدار 1- را برمي گرداند . همانطوريكه خواهيد ديد ، اين روش
مي تواند يك IOException را پرتاب نمايد .
برنامه بعدي نشان دهنده ()read است . اين برنامه كاراكترها را از ورودي
استاندارد تا زمانيكه كاربر "q" را تايپ كند ، خواهد خواند .

+ // Demonstrate read)(
+ import java.io.*;
+
+ class UseRead {
+ public static void main(String args[] ){
+ throws IOException
+ {
+ char c;
+
+ System.out.println("Enter characters/ 'q' to quit.");
+
+ // read characters
+ do {
+ c =( char )System.in.read)(;
+ System.out.println(c);
+ } while(c != 'q');
+ }
+ }

در اينجا يك اجراي نمونه را مشاهده مي كنيد :

Enter characters/ "q" to quite.
123abcq
1
2
3
a
b
c
q

اين خروجي ممكن است با آنچه انتظار داشتيد كمي متفاوت باشد . اين تفاوت
بخاطر اينست كه system.in بصورت پيش فرض بافردهي شده خطي است (Line buffered).
اين بدان معني است كه تا شما كليد ENTER را فشار ندهيد ، هيچ ورودي به برنامه
گذر نخواهد كرد . همانطوريكه مي توانيد حدس بزنيد ، اين حالت ارزشمندي ()read
در زمينه ورودي فعل و انفعالي كنسول را كاهش مي دهد .
همانطوريكه ذكر شد ، جريانات I/o استاندارد را مي توان تغيير مسير داد .
برنامه بعدي محتوي هر فايل متني را روي صفحه نمايش مي دهد ، با اين فرض كه در
هنگام شروع برنامه شما ورودي استاندارد را به فايل دلخواهتان تغيير مسير
مي دهيد . اين باعث مي شود كه فايل فوق توسط system.in بعنوان يك منبع ورودي
مورد استفاده قرار گيرد .

+ /* Display a text file.
+
+ To use this program/ redirect input to the
+ file that you want to see .For example/ to
+ display a file called TEST.TXT .use the following
+ command line.
+
+ java ShowFile < TEST.TXT
+ */
+
+ import java.io.*;
+
+ class ShowFile {
+ public static void main(String args[] ){
+ throws IOException
+ {
+ int i;
+
+ // read characters until end-of-file( EOF )is encountered
+ do {
+ i = System.in.read)(;
+ System.out.print((char )i);
+ } while(i !=- 1);
+ }
+ }

خواندن يك رشته
يكي از اعمال بسيار رايج ورودي كه اكثر برنامه ها اجرا مي كنند ، خواندن يك
رشته از صفحه كليد است . مي توانيد اينكار را با استفاده از ()read انجام دهيد
تا كاراكترها را به يك آرايه byte خوانده و سپس آرايه فوق را به يك شي ئ string
تبديل نمايد . اما ، جاوا يك روش توكار و بسيار راحت تر موسوم به ()readline
فراهم كرده كه بطور خودكار سلسله اي از كاراكترها را از جريان ورودي خوانده و
آنها را به نوع شي ئ string برمي گرداند . اين روش بخشي از كلاس DataInputStream
مي باشد ، كه روشهايي براي خواندن كليه انواع ساده جاوا باضافه خطوط متن را
فراهم مي كند . شكل عمومي readline بقرار زير است :

finalstringreadline)(throwsIOException

همانطوريكه مي بينيد ، اين روش يك شي ئ string را برمي گرداند .
قبل از اينكه بتوانيد از ()readline استفاده كنيد ، بايد يك شي ئDataInput Stream
كه با يك جريان ورودي پيوند يافته است را بدست آوريد . براي اينكار، از
سازنده DataInputStream كه شكل عمومي آن بقرار زير است ، استفاده نماييد :

DataInputStream(InputStream inputstream)

در اينجا inputstream جرياني است كه با نمونه اي از DataInputStream كه بايد
ايجاد شود، پيوند يافته است . براي خواندن ورودي كنسول ، مي توانيد ازsystem.in
براي اين پارامتر استفاده كنيد .
برنامه بعدي خطوط متن را تا زماني كه "stop" را وارد كنيد، خوانده و نمايش
مي دهد :

+ // Demonstrate readLine.)(
+ import java.io.*;
+
+ class ReadLines {
+ public static void main(String args[] ){
+ throws IOException
+ {
+ // create a DataInputStream using System.in
+ DataInputStream inData = new DataInputStream(System.in);
+ String str;
+
+ System.out.println("Enter lines of text.");
+ System.out.println("Enter 'stop' to quit.");
+ do {
+ str = inData.readLine)(;
+ System.out.println(str);
+ } while(!str.equals("stop"));
+ }
+ }

مثال بعدي يك ويرايشگر ظريف متن را ايجاد مي كند . اين برنامه يك آرايه از
اشيائ string ايجاد نموده و سپس خطوط متن را مي خواند و هر خط خوانده شده را
در آرايه ذخيره مي كند . اين برنامه تا يكصد خط را مي خواند ، مگر اينكه قبلا"
شما "stop" را وارد نماييد .

+ // A tiny editor.
+ import java.io.*;
+
+ class TinyEdit {
+ public static void main(String args[] ){
+ throws IOException
+ {
+ // create a DataInputStream using System.in
+ DataInputStream inData = new DataInputStream(System.in);
+ String str[] = new String[100];
+
+ System.out.println("Enter lines of text.");
+ System.out.println("Enter 'stop' to quit.");
+ for(int i=0; i<100; i++ ){
+ str[i] = inData.readLine)(;
+ if(str[i].equals("stop" ))break;
+ }
+
+ System.out.println("\nHere is your file:");
+
+ // display the lines
+ for(int i=0; i<100; i++ ){
+ if(str[i].equals("stop" ))break;
+ System.out.println(str[i]);
+ }
+ }
+ }

در اينجا يك اجراي نمونه از اين برنامه را مشاهده مي كنيد :

Enter lines of text.
Enter 'stop' to quit.
This is line one.
This is line two.
Java makes working with strings easy.
Just create String objects.
stop
Here is your file:
This is line one.
This is line two.
Java makes working with strings easy.
Just create String objects.

نوشتن خروجي كنسول Writing console output
خروجي كنسول خيلي ساده با ()print و ()println انجام مي شود . اين روشها
توسط كلاس printstream (كه نوع شيئي است كه بوسيله system.out به آن ارجاع شده )
تعريف شده است . چون printstream يك جريان خروجي مشتق شده ازoutputstream است
روش سطح پايين ()write را نيز پياده سازي مي كند . بدين ترتيب مي توان با
استفاده از ()write نوشتن به كنسول را انجام داد. ساده ترين شكل ()write تعريف
شده توسط printstream بصورت زير است : void write( int byteval)

اين روش بايت توصيف شده توسط byteval را به فايل مي نويسد . اگر چه byteval
بعنوان يك عدد صحيح اعلان شده ، اما فقط 8 بيتي هاي كمتر از حد مجاز (low-order)
نوشته مي شوند . در اينجا مثال كوتاهي وجود دارد كه از ()write استفاده مي كند
تا كاراكتر "A" را خارج نموده و بدنبال يك خط جديد از صفحه نمايش قرار دهد :

+ // Demonstrate System.out.write.)(
+ class WriteDemo {
+ public static void main(String args[] ){
+ b = 'A';
+ System.out.write(b);
+ System.out.write('\n');
+ }
+ }

اغلب از ()write براي انجام خروجي كنسول استفاده نمي شود . اما بهر حال در
برخي از شرايط مفيد مي باشد .

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

FileInputStream( String fileName )throws FileNotFoundException
FileoutputStream( String fileName )throws IOException

در اينجا fileName توصيفگر نام فايلي است كه مي خواهيد باز شود . وقتي كه
يك جريان ورودي ايجاد مي كنيد ، اگر فايل وجود نداشته باشد ، آنگاه FileNot FoundException
پرتاب خواهد شد . براي جريانات خروجي ، اگر فايل نتواند ايجاد
شود ، IOException پرتاب خواهد شد . وقتي كه يك فايل خروجي باز مي شود، هر نوع
فايل قبلي با همان فايل نابود مي شود .
وقتي كارتان با يك فايل تمام مي شود ، بايد آن را با فراخواني ()close
ببنديد . اين روش توسط FileInputStreamو FileOutputStreamو بصورت زير تعريف
شده است :

Void close )(throws IOException

براي خواندن يك فايل ، مي توانيد از يكي از روايات ()read كه داخل FileInput Stream
تعريف شده ، استفاده نماييد . روايتي كه ما استفاده مي كنيم بصورت زير
است :

intread )(throws IoException

هر بار كه فراخواني مي شود ، يك بايت تكي از فايل را خوانده و آن را بعنوان
يك مقدار عدد صحيح برمي گرداند . وقتي با انتهاي فايل مواجه شود ، مقدار 1- را
برمي گرداند . همانطوريكه مي توانيد ببينيد ، اين روش قادر است يك IOException
را پرتاب نمايد .
برنامه بعدي از ()read استفاده كرده تا محتوي يك فايل متني را وارد نموده و
نمايش دهد ، نام اين فايل بعنوان يك آرگومان خط فرمان توصيف شده است . دقت
كنيد كه بلوكهاي try/catch مي توانند دو خطايي را كه ممكن است هنگام استفاده
از اين برنامه اتفاق مي افتد را اداره نمايند اين دو خطا يكي اين است كه
فايل توصيف شده پيدا نشود و ديگر اينكه كاربر فراموش كند كه نام فايل را
بگنجاند . هر بار كه از آرگومانهاي خط فرمان استفاده مي كنيد ، مي توانيد از
همين روش استفاده نماييد .

+ /* Display a text file.
+
+ To use this program/ specify the name
+ of the file that you want to see.
+ For example/ to see a file called TEST.TXT.
+ use the following command line.
+
+ java ShowFile TEST.TXT
+ */
+
+ import java.io.*;
+
+ class ShowFile {
+ public static void main(String args[] ){
+ throws IOException
+ {
+ int i;
+ FileInputStream fin;
+
+ try {
+ fin = new FileInputStream(args[0]);
+ } catch(FileNotFoundException e ){
+ System.out.println("File Not Found");
+ return;
+ } catch(ArrayIndexOutOfBoundsException e ){
+ System.out.println("Usage :ShowFile File");
+ return;
+ }
+
+ // read characters until EOF is encountered
+ do {
+ i = fin.read)(;
+ if(i !=- 1 )System.out.print((char )i);
+ } while(i !=- 1);
+
+ fin.close)(;
+ }
+ }

براي نوشتن روي يك فايل ، بايد از روش ()write تعريف شده توسط FileOutput Stream
استفاده نماييد . ساده ترين شكل آن بصورت زير است :

void write( int byteval )throws IOException

اين روش بايت توصيف شده توسط byteval را در فايل مي نويسد . اگرچه byteval
بعنوان يك عدد صحيح اعلان شده ، اما فقط 8 بيتي هاي كمتر از حد مجاز (low-order)
در فايل نوشته مي شوند . اگر خطايي هنگام نوشتن اتفاق بيفتد ، يك IOException
پرتاب خواهد شد . مثال بعدي از ()write استفاده كرده تا يك فايل متني را كپي
نمايد .

+ /* Copy a text file.
+
+ To use this program/ specify the name
+ of the source file and the destination file.
+ For example/ to copy file called FIRST.TXT
+ to a file called SECOND.TXT/ use the following
+ command line.
+
+ java CopyFile FIRST.TXT SECOND.TXT
+ */
+
+ import java.io.*;
+
+ class CopyFile {
+ public static void main(String args[] ){
+ throws IOException
+ {
+ int i;
+ FileInoutStream fin;
+ FileInoutStream fout;
+
+ fin = new FileInputStream(args[0]);
+ fout = new FileInputStream(args[1]);
+ } catch(FileNotFoundException e ){
+ System.out.println("File Not Found");
+ return;
+ } catch(IOException e ){
+ System.out.println("Error Opening Output File");
+ return;
+ } catch(ArrayIndexOutOfBoundsException e ){
+ System.out.println("Usage :CopyFile From To");
+ return;
+ }
+
+ // Copy File
+ try {
+ do {
+ i = fin.read)(;
+ if(i !=- 1 )fout.write(i);
+ } while(i !=- 1);
+ } catch(IOException e ){
+ System.out.println("File Error");
+ }
+
+ fin.close)(;
+ fout.close)(;
+ }
+ }

به روشي كه خطاهاي احتمالي I/o دراين برنامه و در برنامه هاي قبلي show File
را اداره مي كند، توجه فرماييد. برخلاف ساير زبانهاي برنامه نويسي شامل Cو C++و
كه از كدهاي خطا (error codes) براي گزارش خطاهاي فايل استفاده مي كنند ، جاوا
از مكانيسم اداره استثنائ خود بهره مي گيرد . نه تنها اينكار اداره فايل را
تميزتر مي كند ، بلكه به جاوا اجازه مي دهد تا بين شرايط انتهاي يك فايل و
خطاهاي فايل هنگاميكه ورودي در حال اجرا مي باشد ، تمايز قائل شود . در C++/C
بسياري از توابع ورودي ، وقتي خطايي بروز مي كند همان مقداري را برمي گردانند
كه گويا به انتهاي فايل رسيده باشند. ( يعني كه در C++/C اغلب يك شرط EOF همان
مقداري را مي دهد كه يك خطاي ورودي مي دهد . ) اين معمولا" بدان معني است كه
برنامه نويس بايد دستورات اضافي تعبيه نمايد تا تعيين كنند كه واقعا" كدام ، خطاها توسط استثنائات به برنامه شما گذر

کيفيت مقاله :
عالی خوب متوسط ضعيف


اصول ريزبرنامه ها applets ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۶۹ مراجعه امروز
۴۴۸۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اصول ريزبرنامه ها applets
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۹۲۴ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

اصول ريزبرنامه ها applets

كليه مثالهاي قبلي از برنامه هاي (applications) جاوا بودند . اما برنامه ها
فقط يك كلاس از برنامه هاي جاوا مي باشند . نوع ديگر برنامه applet يا همان ريز
برنامه است . همانطوريكه قبلا" اشاره شده ، " ريز برنامه ها " ، برنامه هاي كوچكي
هستند كه روي يك سرويس دهنده اينترنت قابل دسترس بوده و سرتاسر شبكه حمل و نقل
شده و بطور خودكار نصب مي شوند و بعنوان بخشي از يك سند وب اجرا مي شوند .
يكبار كه applet روي سرويس گيرنده مي رسد ، دسترسي محدود شده اي به منابع دارد
بطوريكه مي تواند يك رابط كاربر چند رسانه اي دلخواه را ايجاد نموده و بدون
ايجاد ريسك ويروسها يا نقض تماميت داده ها محاسبات پيچيده را اجرا نمايد .
اجازه دهيد با ريز برنامه ساده بصورت زير شروع كنيم :

+ import java.awt.*;
+ import java.applet.*;
+
+ public class SimpleApplet extends Applet {
+ public void paint(Graphics g ){
+ g.drawString("A Simple Applet"/ 20/ 20);
+ }
+ }

اين ريز برنامه با دو دستور import آغاز مي شود . اولين دستور كلاسهاي جعبه
ابزار پنجره مجرد يا AWT را وارد مي كند. ريزبرنامه ها از طريق AWT با كاربرشان
فعل و انفعال دارند نه از طريق كلاسهاي I/o برمبناي كنسول . AWT دربرگيرنده
پشتيباني براي يك رابط پنجره اي و گرافيكي است . همانطوريكه ممكن است انتظار
داشته باشيد ، اين جعبه ابزار بسيار بزرگ و خبره و پيچيده است . خوشبختانه
اين ريز برنامه ساده استفاده بسيار محدودي از AWT دارد . دستور بعدي import
بسته Applet را وارد مي كند . اين بسته دربرگيرنده كلاس applet است . هر ريز
برنامه اي كه توليد مي كنيد بايد زير كلاسي از Applet باشد .
خط بعدي در برنامه ، كلاس Simple Applet را اعلان مي كند. اين كلاس بايد بعنوان public
اعلان شود ، چون بايد توسط كدهاي خارج از برنامه نيز قابل دسترس باشد .
روش ()paint درون SimpleApplet اعلان شده است . اين روش توسط AWT تعريف شده
و بايد توسط ريز برنامه انباشته شود . هرگاه كه ريز برنامه بايد خروجي اش را
دوباره نمايش دهد ، ()paint فراخواني مي شود . اين شرايط ممكن است به چند دليل
اتفاق بيفتد. بعنوان مثال ، روي پنجره اي كه ريز برنامه داخل آن در حال اجراست
ممكن است توسط پنجره ديگري نوشته شود و سپس آشكار شود . يا پنجره applet
مي تواند بحداقل رسيده و سپس ذخيره شود . وقتي كه ريز برنامه اجرا را شروع
مي كند ، ()paint نيز فراخواني مي شود . دليل هر چه باشد ، هر وقت ريز برنامه
مجبور به نمايش مجدد خروجي خود باشد ، ()paint فراخواني مي شود . روش ()paint
يك پارامتر از نوع Graphics دارد . اين پارامتر دربرگيرنده متن گرافيكي است كه
محيط گرافيكي كه applet در آن در حال اجراست را توصيف مي كند. هر گاه كه خروجي applet
مورد نياز باشد ، اين متن مورد استفاده قرار مي گيرد .
درون ()paint يك فراخواني به ()drawstring وجود دارد كه عضوي ازكلاس Graphics
است . اين روش يك رشته شروع شده در مكانهاي yو xو مشخص را خارج مي كند . شكل
عمومي آن بصورت زير است :

Void drawstring( string message/ int x/ inty)

در اينجا message رشته اي است كه در yو xو شروع شده و بايد خارج شود. در يك
پنجره جاوا ، گوشه سمت چپ بالايي مكان oو oو است . فراخواني ()drawstring در
ريز برنامه سبب مي شود پيام "A simple Applet" بنمايش درآيد و در نقطه 20 و 20
آغاز شود .
دقت كنيد كه ريز برنامه فاقد روش ()main است . برخلاف برنامه هاي جاوا ، ريز
برنامه ها اجراي خود را در ()main شروع نمي كنند. در حقيقت ، اكثر ريز برنامه ها
حتي يك روش ()main هم ندارند. در عوض ، يك ريز برنامه شروع باجرا مي كند هرگاه
كه نام كلاس آن به يك مشاهده گر ريز برنامه (applet viewer) يا يك مرورگر شبكه
گذر داده شود .
بعداز اينكه كد منبع SimpleApplet را وارد كرده ايد، بهمان روشي كه برنامه ها
را كامپايل مي كنيد، ريز برنامه ها را كامپايل مي كنيد. اما اجراي SimpleApplet
شامل يك پردازش متفاوت است . در حقيقت ، دو راه براي اجراي يك ريز برنامه وجود
دارد :
اجرانمودن applet داخل يك مرورگر وب سازگاربا جاوا نظيرNetscape NAvigator
استفاده از يك مشاهده گر ريزبرنامه (applet viewer)نظير ابزارJDK استاندارد
يعني appletviewer . يك مشاهده گر ريز برنامه ، ريز برنامه شما را در يك پنجره
اجرا مي كند . اين روش عموما" سريعترين و آسانترين راه براي آزمون ريزبرنامه ها
است .
اجازه دهيد هر كدام از اين روشها را بررسي نماييم .
براي اجراي يك applet در مرورگر وب ، لازم است يك فايل متني HTML كوتاه
بنويسيد كه دربرگيرنده دنباله APPLET مناسب باشد . در اينجا فايل HTML را كه Simple Applet
را اجرا مي كند ، مشاهده مي نماييد .

+
+

دستورات widthو heightو مشخص كننده ناحيه شروع نمايشي هستند كه توسط ريز
برنامه مورد استفاده قرار مي گيرد . ( دنباله APPLET دربرگيرنده چندين گزينه
ديگر است . ) بعد از اينكه اين فايل را ايجاد كرديد ، مي توانيد مرورگرتان را
اجرا نموده و سپس اين فايل را بار گذاري كنيد . انجام اينكار باعث مي شود كه SimpleApplet
اجرا شود .
براي اجراي SimpleApplet با يك مشاهده گر ريز برنامه ، ممكن است همچنين فايل HTML
قبلي را اجرا نماييد . بعنوان مثال ، اگر فايل HTML قبلي را RunApp.html
بخوانيم ، آنگاه خط فرمان بعدي ، SimpleApplet را اجرا مي كند :

C:\>appletviewer Runnapp.html

اما ، يك روش بسيار راحت تر وجود دارد كه سرعت آزمايش را افزايش مي دهد .
خيلي ساده در بالاي فايل كد منبع جاواي خود يك توضيح (comment) بگنجانيد كه
دربرگيرنده دنباله APPLET باشد. بدين ترتيب ، كد شما با يك الگوي دستورات HTML
ضروري مستند سازي مي شود و مي توانيد ريز برنامه كامپايل شده خود را با شروع
مشاهده گر ريز برنامه با فايل كد منبع جاواي خود مورد آزمايش قرار دهيد. اگر از
اين روش استفاده مي كنيد ، فايل منبع Simple Applet بقرار زير خواهد بود :

+ import java.awt.*;
+ import java.applet.*;
+ /*
+
+
+ */
+
+ public class SimpleApplet extends Applet {
+ public void paint(Graphics g ){
+ g.drwString:"A Simple Applet"/ 20 .20);
+ }
+ }

در كل مي توانيد از طريق توسعه ريز برنامه با استفاده از اين سه مرحله
بسرعت تكرار را اجرا نماييد (iterate) : 1
- يك فايل منبع جاوا ويرايش نماييد . 2
- برنامه اتان را كامپايل كنيد . 3
- مشاهده گر ريزبرنامه را اجرا نموده ، تا نام فايل منبع ريزبرنامه اتان را
مشخص نماييد . مشاهده گر ريز برنامه ، داخل توضيح با دنباله APPLET مواجه شده و
ريز برنامه شما را اجرا خواهد نمود .
پنجره توليد شده توسط SimpleApplet ، آنطوريكه توسط مشاهده گر ريزبرنامه
بنمايش درآمده بصورت زير مي باشد :

|
>< |< | _ |_ ...| pplet Viewer SSimp
| Applet |

| A Simple Applet |
| |
| |
| |
| Applet started .|

نكات اصلي كه بايد در اين موضوع بياد داشته باشيد ، عبارتند از :
ريز برنامه ها نيازي به روش ()main ندارند .
ريز برنامه ها بايد تحت يك مشاهده گر ريز برنامه (applet viewer) يا يك
مرورگر سازگار با جاوا اجرا شوند . اربر با كلاسهاي I/o جريان جاوا اجرا نمي شود. در عوض ، ريز برنامه ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


اصلاحگرهاي ناپايدار و فرار The Transient and volatile Modifiers ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۷۲ مراجعه امروز
۴۴۸۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اصلاحگرهاي ناپايدار و فرار The Transient and volatile Modifiers
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۷۹۱ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

اصلاحگرهاي ناپايدار و فرار The Transient and volatile Modifiers

جاوا دو اصلاحگر نوع بسيار جالب را تعريف مي كند : transientو volatileو .
اين اصلاحگرها براي اداره برخي شرايط تا حدودي مشخص شده استفاده مي شوند .
هرگاه كه يك متغير نمونه بعنوان transient اعلان مي شود، آنگاه مقدار آن لازم
نيست تا زمان ذخيره شدن يك شي ئ ايستادگي نمايد . بعنوان مثال :

+ class T {
+ transient int a; // will not persist
+ int b; // will persist
+ }

در اينجا ، اگر يك شي ئ از نوع T به يك ناحيه ذخيره ايستا نوشته شود ، محتوي a
ذخيره نخواهد شد، اما محتوي b ذخيره ميشود. ايستادگي (persistence) مكانيسمي
است كه همچنان در حال توسعه است . بنابراين ، اثرات مشخص transient در معرض
تغييرات و پاكسازيهاي بيشتري قرار دارند .
اصلاحگر volatile به كامپايلر مي گويد كه متغيري كه اصلاحش مي كند مي تواند
بصورت غير منتظره توسط ساير بخشهاي برنامه تغيير يابد. يكي از اين شرايط مربوط
به برنامه هاي چند نخ كشي شده (multithreaded) است . در يك چنين برنامه اي ، گاهي
دو يا چند نخ ، يك متغير نمونه را باشتراك مي گذارند . براي ملاحظات مربوط به
كارايي ، هر نخ مي تواند كپي اختصاصي خودش را چنان متغير مشتركي را نگهداري
نمايد. كپي اصلي (real) از متغير در زمانهاي گوناگون روزآمد مي شود. مثل زماني
كه يك روش synchronized وارد شده باشد . در حاليكه اين بخوبي كار مي كند ، اما
در برخي شرايط ناكار مي شود .
در برخي حالات ، آنچه واقعا" اهميت دارد اين است كه كپي اصلي يك متغير هميشه
وضعيت جاري آن را نشان مي دهد . براي اطمينان از اين مسئله ، خيلي ساده متغير
را بعنوان volatile توصيف نماييد . انجام اينكار به كامپايلر اعلام مي كند كه
بايد همواره از كپي اصلي يك متغير فرار (volatile) استفاده كند ( يا حداقل
همواره كپي هاي اختصاصي را با كپي اصلي روزآمد نمايد و بالعكس ) . همچنين
دسترسي هاي به متغير اصلي بايد به ترتيب دقيقي اجرا شود كه در آن ، روي هر كپي
اختصاصي اجرا خواهند شد . جاوا كمابيش همان مفهوم در C/C++ را دارد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از instanceof ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۷۵ مراجعه امروز
۴۴۹۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از instanceof
نويسنده : مديريت سايت
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۸۳۴ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

استفاده از instanceof

گاهي خوب است كه طي زمان اجرا ، نوع شي ئ را بدانيم . بعنوان مثال ، ممكن
است يك نخ از اجرا داشته باشيد كه انواع گوناگوني از اشيائ توليد نموده و
همچنين نخي كه اين اشيائ را پردازش مي كند . در اين شرايط ، براي نخ پردازنده
مفيد است كه نوع هر يك از اشيايي را كه به آنها مي رسد ، بداند . شرايط ديگري
كه در آن دانستن نوع شي ئ در زمان اجرا مهم است ، تبديل casting مي باشد . در
جاوا يك تبديل نامعتبر و غير مجاز سبب بروز خطاي حين اجرا مي شود . بسياري از
تبديلات غير مجاز را در زمان كامپايل مي توان گرفت . اما تبديل cast كه شامل
سلسله مراتب كلاس باشد مي تواند تبديلات غيرمجاز توليد كند كه فقط در زمان اجرا
قابل كشف هستند . بعنوان مثال ، يك كلاس بالا موسوم به A مي تواند دو زير كلاس B
و C را توليد نمايد . بدين ترتيب ، مجاز هستيم تا يك شي ئ B را به نوع A تبديل
كنيم ، يا يك شي ئ C را به نوع A . اما مجاز نيستيم يك شي ئ B را به نوع C ( يا
بالعكس ) تبديل نماييم . از آنجاييكه يك شي ئ از نوع A مي تواند به اشيائ B يا C
ارجاع نمايد ، در زمان اجرا چگونه مي توان فهميد كه به چه نوع شيئي ارجاع
شده است ، قبل از اينكه تلاش براي تبديل به نوع C را انجام دهيم ? آن شي ئ ممكن
است شيئي از نوع Aو Bوو Cو باشد . اگر از نوع B باشد ، يك استثنائ زمان اجرا
پرتاب خواهد شد . جاوا عملگر حين اجراي instanceof را براي پاسخگويي به همين
سوال تدارك ديده است .
شكل عمومي عملگر instanceof بقرار زير مي باشد :

object instanceof type

در اينجا ، object يك نمونه از كلاس است و type يك نوع كلاس است . اگر object
از نوع مشخصي باشد و يا قابل تبديل به يك نوع مشخص شده باشد ، آنگاه عملگر instanceof
مقدار true را نشان ميدهد. در غير اينصورت ، منجر به false ميگردد.
بدين ترتيب ، instanceof وسيله اي است كه توسط آن برنامه اتان مي تواند اطلاعات
نوع درباره يك شي ئ در زمان اجرا را بدست آورد .
برنامه بعدي نشان دهنده instanceof مي باشد :

+ // Demonstrate instanceof operator.
+ class A {
+ int i/ j;
+ }
+
+ class B {
+ int i/ j;
+ }
+
+ class C extends A {
+ int k;
+ }
+
+ class D extends A {
+ int k;
+ }
+ class InstanceOf {
+ public static void main(String args[] ){
+ A a = new A)(;
+ B b = new B)(;
+ C c = new C)(;
+ D d = new D)(;
+
+ if(a instancof A)
+ System.out.println("a is instance of A");
+ if(b instancof B)
+ System.out.println("b is instance of B");
+ if(c instancof C)
+ System.out.println("c is instance of C");
+ if(c instancof A)
+ System.out.println("c is instance of A");
+ if(a instancof C)
+ System.out.println("a is instance of C");
+
+ System.out.println)(;
+
+ // compare types of derived types
+
+ A ob;
+
+ ob = d; // A reference to d
+ System.out.println("ob new refers to d");
+ if(ob instancof D)
+ System.out.println("ob is instance of D");
+
+ System.out.println)(;
+
+ ob = c; // A reference to c
+ System.out.println("ob new refers to c");
+ if(ob instancof D)
+ System.out.println("ob is instance of D");
+ else
+ System.out.println("ob is instance of D");
+
+ if(ob instancof A)
+ System.out.println("ob is instance of A");
+
+ System.out.println)(;
+
+ // all object can be cast to Object
+ if(a instancof object)
+ System.out.println("a may be cast to Object");
+ if(b instancof object)
+ System.out.println("b may be cast to Object");
+ if(c instancof object)
+ System.out.println("c may be cast to Object");
+ if(d instancof object)
+ System.out.println("d may be cast to Object");
+ }
+ }

خروجي حاصل از اين برنامه بصورت زير مي باشد :

a is instance of A
b is instance of B
c is instance of C
c can be cast to A

ob now refers to d
ob is instance of D

ob now refers to c
ob cannot be cast to D
ob can be cast to A

a may be cast to Object
b may be cast to Object
c may be cast to Object
d may be cast to Object

عملگر instanceof براي اكثر برنامه ها مورد نياز نيست ، زير معمولا" شما نوع
شيئي را كه با آن كار مي كنيد ، مي دانيد . اما ، وقتي مشغول نوشتن روالهاي
عمومي شده هستيد كه با يك شي ئ از يك سلسله مراتب كلاس پيچيده عمل مي كند ، اين
عملگر بسيار مفيد خواهد بود .
----------------------------------------------------------------------------

روشهاي Native

اگر چه بندرت اتفاق مي افتد، اما گهگاه شرايطي پيش مي آيد كه مي خواهيد يك
زير روال (subroutine) نوشته شده توسط ساير زبانهاي غير از جاوا را فراخواني
نماييد . معمولا" ، چنين زير روالي بصورت كد قابل اجرا براي cpu و محيط خاصي كه
در آن كار مي كنيد عرضه مي شود يعني بصورت كد بومي (Native) . بعنوان مثال
ممكن است بخواهيد يك زير روال كد بومي را فراخواني كنيد تا به زمان اجراي
سريعتري برسيد. يا ممكن است بخواهيد از يك كتابخانه تخصصي شده متفرقه نظير يك
بسته آماري استفاده نماييد . اما از آنجاييكه برنامه هاي جاوا به كد بايتي
كامپايل مي شوند و سپس توسط سيستم حين اجراي جاوا تفسير خواهند شد ، بنابراين
بنظر مي رسد فراخواني يك زير روال كد بومي از داخل برنامه جاوا غير ممكن باشد.
خوشبختانه ، اين نتيجه گيري غلط است . جاوا واژه كليدي native را تدارك ديده
كه براي اعلان روشهاي كدهاي بومي استفاده مي شود. هربار كه اين روشها اعلان شوند
مي توانيد آنها را از درون برنامه جاواي خود فراخواني نماييد . درست مثل
فراخواني هر روش ديگري در جاوا .
براي اعلان يك روش بومي ، اصلاحگرnative را قبل از روش قرار دهيد. اما بدنه اي
براي روش تعريف نكنيد ، بعنوان مثال :

+ public native int meth)(;

هر بار كه يك روش بومي را اعلان نموديد ، مجبوريد روش بومي نوشته و يكسري
مراحل پيچيده تر را تعقيب كنيد تا آن را به كد جاواي خود پيوند دهيد .
نكته : مراحل دقيقي كه لازم است طي نماييد ممكن است براي محيط ها و روايتهاي
گوناگون جاوا متفاوت باشند . همچنين زباني كه براي پياده سازي روش بومي
استفاده مي كنيد ، موثر خواهد بود . بحث بعدي از JDK ، (version 1.02)
و ابزارهاي آن استفاده ميكند. اين يك محيط windows 95/NT را فرض ميكند.
زباني كه براي پياده سازي روش بومي استفاده شده ، زبان C مي باشد .
آسانترين شيوه براي درك اين پردازش ، انجام يك كار عملي است . براي شروع
برنامه كوتاه زير را كه از يك روش native موسوم به ()test استفاده مي كند
وارد نماييد :

+ // A simple example that uses a native method.
+ public class NativeDemo {
+ int i;
+ int j;
+
+ public static void main(String args[] ){
+ NativeDemo ob = new NativeDemo)(;
+
+ ob.i = 10;
+ ob.j = ob.test)(; // call a native method
+ System.out.println("This is ob.j :" + ob.j);
+ }
+
+ // declare native method
+ public native int test)(;
+
+ // load DLL that contains static method
+ static {
+ System.loadLibrary("NativeDemo");
+ }
+ }

دقت كنيد كه روش ()test بعنوان native اعلان شده و بدنه اي ندارد . اين روشي
است كه ما در C باختصار پياده سازي ميكنيم . همچنين به بلوك static دقت نماييد.
همانطوريكه قبلا" گفتيم : يك بلوك static فقط يكبار اجرا مي شود ، و آنهم زماني
است كه برنامه شما شروع باجرا مي نمايد ( يا دقيق تر بگويم ، وقتي كه كلاس آن
براي اولين بار بارگذاري مي شود ) . در اين حالت ، از اين بلوك استفاده شده تا "
كتابخانه پيوند پويا "(dynamic Link Library() را كه دربرگيرنده پياده سازي
بومي ()test است ، بارگذاري نمايد .
كتابخانه فوق توسط روش ()LoadLibrary بارگذاري مسشود كه بخشي از كلاس System
است . شكل عمومي آن بقرار زير است :

Static void LoadLibrary( string filename)

در اينجا ، filename رشته اي است كه نام فايلي كه كتابخانه را نگهداري ميكند
توصيف مي كند . براي محيط ويندوز NT/95 فرض شده كه اين فايل پسوند DLL ، داشته
باشد .
بعد از اينكه برنامه را وارد كرديد، آن را كامپايل كنيد تاNativeDemo.class
توليد شود. سپس ، بايد از java.exe استفاده نموده تا دو فايل توليد نماييد: كه C
.NativeDemoو NativeDemo.1و است . شما NativeDemo.h را در پياده سازي ()test
مي گنجانيد . فايل NativeDemo.C يك فايل stub است كه دربرگيرنده ميزان كوچكي
از كد است كه رابط بين روش بومي شما و سيستم حين اجراي جاوا را تدارك مي بيند.
براي توليد NativeDemo.h ، از دستور بعدي استفاده نماييد : javahNativeDemo

اين دستور يك فايل سرآيند موسوم به NativeDemo.h را ايجاد مي كند. اين فايل
بايد در فايل C كه ()test را پياده سازي مي كند ، گنجانده شود. حاصل توليد شده
توسط اين فرمان بقرار زير مي باشد :

/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class NativeDemo */

#ifndef_ Included_NativeDemo
#define_ Included_NativeDemo

typedef struct ClassNativeDemo {
long j;
long j;
} ClassNativeDemo;
HandleTo(NativeDemo);

#ifdef __ cplusplus
extern "C" {
#endif
extern long NativeDemo_test(struct HNativeDemo *);
#ifdef __ cplusplus
}
#endif
#endif

به چند چيز مهم درباره اين فايل دقت نماييد. اول اينكه ساختارclssNativeDemo
دو عضو را دربرمي گيرد: iو jو. اين ، متغيرهاي نمونه تعريف شده توسط NativeDemo
در فايل جاوا را معين مي كند . دوم اينكه ، ماكرو ()HandleTo ، نوع ساختار HNativeDemo
را ايجاد مي كند ، كه براي ارجاع به شيئي كه ()test را فراخواني
مي كند مورد استفاده قرار مي گيرد .
به خط بعدي ، توجه ويژه اي مبذل داريد، كه الگويي براي تابع ()test كه ايجاد
كرده ايد را تعريف مي كند :

+ extern long NativeDemo_test(struct HNativeDemo *);

دقت نماييد كه نام تابع ، NativeDemo-test است . بايد اين را بعنوان نام
تابع بومي كه پياده سازي مي كنيد ، بكار بريد . يعني كه بجاي ايجاد يك تابع C
موسوم به ()test ، يك تابع موسوم به ()NativeDemo-test را ايجاد مي كنيد .
پيشوند NativeDemo اضافه شده است چون مشخص مي كند كه روش ()test بخشي از كلاس NativeDemo
مي باشد . بياد آوريد ، كلاس ديگري ممكن است روش ()test بومي خود را
تعريف نمايد كه كاملا" با آنكه توسط NativeDemo اعلان شده ، متفاوت است . پيشوند
گذاري نام روش بومي با نام كلاس فراهم كننده ، شيوه اي است براي تمايز بين
روايتهاي مختلف . بعنوان يك قانون عمومي ، توابع بومي ، يك نام كلاس كه در آن
اعلان شده اند را بعنوان يك پيشوند قبول مي كنند .
برگشت ()NativeDemo-test از نوع long است ، اگرچه داخل برنامه جاوا كه آن
را فراخواني مي كند بعنوان يك int توصيف شده است . دليل اين امر بسيار ساده
است . در جاوا ، اعداد صحيح مقادير 32 بيتي هستند . در C ، يك عدد صحيح long
لازم است حداقل 32 بيت براي يك نوع عدد صحيح تضمين نمايد .
يك چيز ديگر درباره الگوي ()NativeDemo-test شايان توجه است . اين الگو يك
پارامتر از نوع HNativeDemo* تعريف مي كند. كليه روشهاي بومي حداقل يك پارامتر
دارند كه اشاره گري است به شيئي كه روش بومي را فراخواني نموده است . اين
پارامتر ضرورتا" شبيه This است . مي توانيد از اين پارامتر استفاده كرده تا
دسترسي به متغيرهاي نمونه شيئي كه روش را فراخواني مي كند ، داشته باشيد .
براي توليد NativeDemoC ( فايل stub ) ، از اين دستور استفاده كنيد : java-stubs NativeDemo

فايل توليد شده توسط اين دستور بصورت زير مي باشد :

/* DO NOT EDIT THIS FILE - it is machine generated */
#include

/* Stubs for class NativeDemo */
/* SYMBOL :"NativeDemo/test)(I"/ Java_Native_test_stub */
__ declspec(dllexport )stack_item
*Java_NativeDemo_test_stub(stack_item *_P_/struct execenv *_ EE )_{
extern long NativeDemo_test(vide *);
_ P_[0].i = NativeDemo_test_(P_[0].p);
return_ P _+ 1;
}

شما اين فايل را كامپايل نموده و با فايل پياده سازي خود پيوند مي دهيد .
پس از توليد فايلهاي سرآيند و stub ضروري ، مي توانيد پياده سازي خود از
()test را بنويسيد . از روايتي كه در زير نشان داده ايم ، استفاده نماييد :

+ /* This file contains the C version of the
+ test )(method.
+ */
+ #include
+ #include "NativeDemo.h"
+ #include
+ long NativeDemo_test(struct HNativeDemo *this)
+ {
+ printf("This is inside the native method.\n");
+ printf("this->i :%ld\n"/ unhand(this.-)i);
+ return( unhand(this-)>i);
+ }

دقت نماييد كه اين فايل دربرگيرنده stubpreamble.h است كه شامل اطلاعات
رابط سازي (interfacing) است . اين فايل توسط كامپايلر جاوا براي شما فراهم
مي شود . فايل سرآيند NativeDemo قبلا" توسط java ايجاد شده بود .
پس از ايجاد test.c بايد آن را و NativeDemo.C را كامپايل نماييد . بعد
اين دو فايل را بعنوان يك DLL ( كتابخانه پيوند پويا ) با يكديگر پيوند دهيد .
براي انجام اينكار با كامپايلر ميكروسافت C++/C ، از خط فرمان بعدي استفاده
نماييد : CL/LD NativeDemo.ctest.c

اين فرمان يك فايل تحت عنوان NativeDemo.dll توليد مي كند . هر بار كه اين
كار انجام شود ، مي توانيد برنامه جاوا را اجرا كنيد. انجام اينكار خروجي بعدي
را توليد مي كند :

This is inside the native method.
this->i :10
This is ob.j :20

داخل test.c به استفاده از ()unhand توجه نماييد . اين ماكرو توسط جاوا
تعريف شده و يك اشاره گر را به نمونه ساختارclass NativeDemo كه درNativeDemo.h
تعريف شده و همراهي شيئي است كه ()test را فراخواني مي كند ، برمي گرداند . در
كل هرگاه نياز به دسترسي به اعضائ يك كلاس جاوا داشته باشيد ، از ()unhand
استفاده مي كنيد .
يادآوري : توضيحاتي كه استفاده ازnative را محصور كرده اند، بستگي به پياده سازي
و محيط دارند . علاوه بر اين ، رفتار مشخصي كه در آن به كد جاوا رابط
مي سازيد قابل تغيير است . بايد مستندات موجود در سيستم توسعه جاوا
خود را مطالعه نماييد تا جزئيات مربوط به روشهاي بومي را درك كنيد .

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


كامپيوترهاي الكترونيكي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۹۸ مراجعه امروز
۴۶۱۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كامپيوترهاي الكترونيكي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۵۹۴ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

كامپيوترهاي الكترونيكي

پيشرفت بشر در طول قرنها بوسيله ابزارهائي كه براي كاهش دادن خستگيهاي فكري
و جسماني خود اختراع كرده است سنجيده مي شود . شايد يزرگترين اختراع بشر فن
نوشتن است كه بااستفاده از آن قادر به ثبت كشفيات خود شده و آنها را در اختيار
نسلهاي آينده قرار داده است . در بسياري از تحقيقات علمي ، بشر براي پيش بيني
نتايج تجربه هاي متعدد خود و آزمون نظريه هاي جديد متكي به محاسبات رياضي بوده
گاه اين محاسبات چنان مفصل بوده كه انجام آنها براي افراد ميسر بنظر نمي رسد .
شايد اين دشواري انگيزه اي بزرگ براي پشرفت هاي در زمينه محاسبات خودكار
الكترونيكي در بيست سال گذشته بوده است . كامپيوتر الكترونيكي Electronic)
(Computers پيشرفت هاي علمي و صنعتي را چنان تحقق بخشيده اند كه بيست سال پيش
تصور آن ممكن نبوده است . مثلا" محاسباتي كه براي فرستادن يك سفينه به مدار ماه
يا پياده كردن در اين كره لازم است ازتوانائي يك تيم رياضي دادن در طول عمر بشر
بيرون است درصورتي كه امروزه با كمك كامپيوتر الكترونيكي تسخير فضا و حل مسائل
مشابه به حقيقت پيوسته است .
كامپيوتر ماشيني است كه براي انجام محاسبات بكار مي رود و وجه تمايز آن از
ماشين حساب (Calculator) داشتن حافظه براي نگهداري برنامه و اطلاعات است .
كامپيوتر در مواردي كه محاسبات تكراري مفصلي ضرورت مي يابد نقش عمده اي دارد . و
بدين ترتيب اهميت كاربرد آن در رشته هاي علمي ( امور تحقيقاتي ، طرحهاي مهندسي
امور فضايي ، تشخيص هاي پزشكي و غيره ) ، بازرگاني ( امور بانكي ، تهيه ليست
حقوق ، صورت حساب ، تهيه برنامه توليدي ، رزرو كردن جا و غيره ) و نظامي
( آشكار سازي هواپيما يا كشتي دشمن ، هدايت موشك هاي قاره پيما ، تعيين محل
زير دريائي ها و غيره ) روشن مي شود . از مشخصه هاي مهم كامپيوتر مي توان حاقظه
سرعت ، دقت و كاهش نيروي انساني و توانائي انجام عمليات پيچيده و مفصل را نام
برد .
پيشرفت سريع كامپيوترها در رشته هاي مختلف سبب شده است كه رشته اي بنام علم
كامپيوتر(Computer Science)بوجودآيد كه عبارت ازطرح وتكميل ساختمان كامپيوترها
و لوازم مورد نياز آنها به منظور انجام يك سلسله كارهاي معين ، تدوين زبانهاي
زبانهاي برنامه نويسي مختلف و توسعه روشهاي رياضي مناسب براي استفاده بيشتر از
اين ماشينها در زمينه هاي علمي ، بازرگاني و نظامي .
افرادي را كه مربوط به كامپيوتر تخصص دارند ميتوان بسه گروه تقسيم كرد : 1
رياضي دانها و مهندسان الكترونيك كه با طرح كامپيوترهاي جديد و طرز كار
مدارهاي داخل كامپيوتر سر و كار دارد . 2
آناليستها(System Analysts) و برنامه نويسها(Programmers) كه از كامپيوتر
براي حل مسايل مورد نظر استفاده ميكند . 3
منگنه زنها (Punchists) و اپراتورها (Operators) كه عمل تهيه كارتهاي
داده ها و بهره برداري و نگهداري كامپيوتر را بعهده داشته و كار آنها به پرورش
داده ها (Data Processing ، بطور اختصار DP) مربوط مي شود .
هدف اصلي اين كتاب ازبيان اصول كلي يكي از پيشرفته ترين زبانهاي علمي برنامه
نويسي در سطحي مقدماتي است . اين زبان كه فرترن (FORTRAN) ناميده ميشود مشابه
زبان رياضيات مقدماتي بوده و وسيله اي آسان و ساده در برنامه نويسي كامپيوترها
براي حل مسائل رياضي كه داراي ماهيت عددي ميباشد فراهم مي نمايد . فرترن زباني
است كه در تدوين آن تا آنجائيكه مقدور بوده سعي شده است كه به نوع كامپيوتري
كه مورد استفاده قرار مي گيرد وابسته نباشد و شايد در نوع خود بيش از هر زبان
ديگر بكار ميرود .
گرچه بسياري از بازرگاني نيز آن استفاده مي نمايند ، مورد استفاده اصلي اين
زبان در قسمتهاي علمي و مهندسي است .
زبان فرترن داراي انواع مختلفي است كه اغلب با هم تفاوتهاي جزئي دارند . در
فصل بعد تنها زبان فرترن چهار (FORTRAN IV) كه درسال 1964 تدوين شده و از لحاظ
برنامه نويسي انعطاف پذيري بيشتري دارد مورد بحث قرار خواهد گرفت .
براي انجام محاسبات علمي و مهندسي علاوه برفرترن زبانهاي برنانه نويس ديگري
ماننده الگال (ALQOL) و PL/I نيز بكار برده مي شود . در امور بازرگاني زبانهاي
برنامه نويسي ديگري كه براي انجام عمليات مورد نظر مناسب تر باشد مانند كوبال
(COBOL)، PL/Iو RPG بكار ميرود .
پيش ازبيان اصول فرترن شايسته است اطلاعاتي مختصري درباره تشكيلات ساختماني
طرز كار كامپيوتر عرضه شود . بدين جهت در اين فصل سعي شده است قسمتهاي اصلي
ساختمان كامپيوتر بزبان ساده بيان و اصول كلي كار آنها ذكر گردد .
گرچه كامپيوتر از لحاظ طرح بسياري متنوع هستند و نمي توان جزئيات مختلف هر
نوع آن را كه امروزه بكار ميرود توضيح داد ولي چون در طرح بيشتر كامپيوترها از
روش عمومي يكساني پيروي مي شود مي توان براي اغلب كامپيوترها يك طرح كلي ذكر

کيفيت مقاله :
عالی خوب متوسط ضعيف


تاريخچه كامپيوتر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۰۱ مراجعه امروز
۴۶۱۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تاريخچه كامپيوتر
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۱۱۴۸ بار مطالعه شده است
۳۱ نفر تا به حال به اين مقاله رای داده اند.

تاريخچه كامپيوتر

بشر اوليه شمارش را باانگشتان دست و اندازگيري كميت ها رابا بعضي از اعضاي
بدن مانند دست و پا انجام ميداد و بدين ترتيب واحدهاي اندازه گيري مانند وجب و
قدم بوجود آمد . سيستم دهدهي امروزه كه براي بيان كميتها بكار ميرود از بكار
بردن انگشتان دست براي انجام شمارش نتيجه شده است . قديمي ترين دستگاهي كه براي
شمارش و انجام محاسبات عددي بكار ميرفت چرتكه بود كه در حدود 610 سال قبل از
ميلاد در خاور دور ساخته شد . پيشرفت مهم بعدي در زمينه محاسبات عددي در سال 1614
صورت گرفت كه درآن موقع نپر (Nepeir) جدولهاي لگاريتم را تهيه و چاپ كرد.
در سال 1642 پاسگال (Pascal) اولين نوع ماشين حساب را تهيه نمود كه نوع اوليه آن
فقط عملهاي جمع و تفريق را انجام ميداد و بعدها توسط دانشمندان ديگري تكميل شد
و عمل ضرب را نيزممكن ساخت . دراواخر قرن هفدهم لايبنيتز(Leibnitz) ماشين حساب
ساخت كه عمل نگهداشتن رقمها را از يك مرتبه به مرتبه ديگر انجام ميداد و اين
يك قدم مهم بسوي تكميل ماشينهاي حساب بشمار ميرفت . در اوائل قرن نوزدهم بابج
(Babbage) ماشين حساب طرح كرد كه ميتوانست محاسبات عددي را انجام دهد و جوابها
را چاپ نمايد . درطرح بابج پيش بيني شده بود كه ماشين بطور خودكاراز دستورهاي
ذخيره شده معيني پيروي كند و محاسبات لازم را انجام دهد . ماشين بابج هرگز
ساخته نشده زيرا ابزارهاي فني آن زمان لازم براي ساختن اجزائ چنين ماشيني را
نداشتند و در واقع طرح بابج پيشرفته تر از تكنولوژي آن زمان بود .
نخستين كامپيوتر الكترونيكي در سال 1940 توسط آزمايشگهاي تلفن بل Bell)
(Telephone Laboratories ساخته شد كه فقط مي توانست در مورد محاسبات عددي بكار
رود . در نيمه اول دهه 1940 دكترهاوردآيكن (Howard Aiken) از دانشگاه هاروارد
كامپيوتري كه بنام Mark I معروف است ساخت كه بارله هاي الكنرومغناطيسي و كارتهاي
منگنه شده بكار ميكرد .
شايد بزرگترين پيشرفت در كامپيوترهاي خود كار زماني صورت گرفت كه درسال 1945
دكتر جان فن نويمن (John Von Neumann) نظريه ذخيره كردن برنامه رادر درون
كامپيوتر بيان نمود . سيستم كنترل در كامپيوترهاي پيشين بوسيله صفحه هاي سيم
پيچي شده خاص يا دستورهائي كه در برخي وسايل بيروني مانند نوار كاغذي منگنه
شده يا كارت منگنه شده ذخيره مي گشتند انجام مي گرفت . اولين كامپيوتر با برنامه
ذخيره شده (Stored Program Computre) بنام EDV AC معروف است كه درسال 1964بوسيله
دانشگاه پنسيلوانيا براي استفاده نيروي زميني آمريكا ساخته شده . در اين ماشين
برنامه مستقيما درون حافظه قرار داده ميشد بطريقي كه يكايك دستورها بلافاصله پس
از آنكه دستور پيشين انجام مي گرفت آماده اجرا بود .
كامپيوتر ENIAC كه در دانشگاه پنسيلوانيا براي قسمت اردنانس نيروي زميني در
ايالات متحد شاخته و در سال 1946 تكميل شد ، يك قدم بزرگ در راه ترقي و در عين
حال يك گام نزولي از نقطه نظر تكنولوژي نسبت به EDVAC مي باشد. ENIAC نخستين
كامپيوتري بود كه همه كارهاي درروني را آن بصورت الكترونيكي انجام مي گرفت اما
داراي هيچگونه برنامه ذخيره شده نبود و در نتيجه ترتيب اتصال بيروني بسيار
پيچيده اي در آن بكار مي رفت . اين كامپيوترها بدنبال كامپيوترهاي ديگري كه
پيشرفتهاي بسياري در زمينه هاي سرعت ، حافظه وقابليت اعتماد بوجود آوردند تكميل
شدند . پس از پايان جنگ جهاني دوم ، پيشگامان صنعت ماشينهاي كامپيوتر مانند IBM
، CDC،، NCR،، SRC،N ، كامپيوترهاي الكنرونيكي همه منظوره بوجود آوردند .
كامپيوتر UNIVACI كه در سال 1951 بوسيله SRC تهيه گشت نخستين كامپيوتر
الكترونيكي بود كه براي فروش در بازار ساخته مي شد . در كامپيوترهاي مدرن
امروزه براي فشردگي و قابليت اعتماد ، بيشتر از ترانزيستورها ز مدارهاي يك
پارچه و عناصر مغناطيسي مينياتوري اسستفاده ميشود . اين كامپيوترها محاسبات
پيچيده را با چنان سرعت و دقتي انجام ميدهند كه توانائي انسان در مقايسه با
آنها براستي بسيار ضعيف ميباشد . مثلا كامپيوترهاي بزرگ امروزه مي توانند در
حدود 10 ميليون عمل جمع يا تفريق را در ظرف يك ثانيه انجام دهند . در حال
حاضر كامپيوترهاي الكترونيكي نه تنها انسان را از انجام كارهاي تكراري بسيار كننده آسوده ساخته اند ، بلكه براي درك بهتر محيط به او كمك شاياني

کيفيت مقاله :
عالی خوب متوسط ضعيف


انواع كامپيوتر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۰۴ مراجعه امروز
۴۶۲۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انواع كامپيوتر
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۴۷۸ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

انواع كامپيوتر

كامپيوتر به دو دسته كلي كامپيوترهاي رقمي يا شمارشگر(Digital Computers) و
كامپيوترهاي تشابهي يا قياس (Analog Computers) تقسيم مي شوند . كامپيوترهاي
رقمي با كميتهائي سرو كار دارند كه هر يك از آنها بصورت ارقام معيني نمايش
داده شده و كامپيوترها عمل مقايسه و محاسبه را با روش شمارش انجام مي دهند ، در
صورتيكه كامپيوتر تشابهي بدون هيچگونه عمل شمارش كار ميكند ونتيجه را مستقيما"
از روي كميتهاي مورد نظر ( مانند ولتاژ ، جريان ، دوران محور) باعمل اندازگيري
بدست مياورد بي آنكه در هيچ مرحله آنها را بصورت ارقام نمايش دهد .
مثال يك دستگاه ساده تشابهي ميزان الحراره جيوه اي است . جيوه در فضاي معيني
قرار دارد . حجم جيوه قابل اندازگيري است و با تغيير درجه حرارت تغيير ميكند و
مقياسي قراردادي تغييرات حجم جيوه را با تغييرات درجه حرارت ارتباط ميدهد . از
آنجائيكه توجه اين كتاب صرفا" محاسبات به كمك كامپيوترهاي رقمي است بيش از اين
درباره كامپيوترهاي تشابهي مطلبي گفته نخواهد شد .
سوال چرتكه و خط كش محاسبه هر يك جزو كداميك از دستگاههاي تشابهي يا رقمي ند ?

کيفيت مقاله :
عالی خوب متوسط ضعيف


قسمتهاي اصلي كامپيوتر رقمي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۰۷ مراجعه امروز
۴۶۲۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
قسمتهاي اصلي كامپيوتر رقمي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۴۷۶ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

قسمتهاي اصلي كامپيوتر رقمي

كامپيوترهاي رقمي مدرن و سريع از پنچ واحد اساسي زير تشكيل يافته اند 1
واحد ورودي (Input Unit) 2
- واحد حافظه (Memory Unit) يا واحد ذخيره كننده (Storage Unit) 3
واحد محاسبه (Arithmetic Unit) 4
واحد خروجي (Output Unit) 5
واحد كنترل (Control Unit)
واحد ورودي واحد ورودي قسمتي است كه بوسيله آن داده هاي ورودي Input)
(Data در اختيار كامپيوتر قرار ميگيرد . براي حل اغلب مسائل ، داده هاي ورودي
لازم اند و بايد بصورت قابل فهم براي كامپيوتر تهيه شوند و از اينرو يايد داده ها
بصورت رمز در آيند. ازمعمولترين لوازم ورودي ماشين منگنه (CardpunchياKeypunch)
است كه كارتهاي منگنه شده را تهيه ميكند و ماشين كارت خوان (Card Reader) است
كه كارتهاي منگنه شده را ميخواند .
واحد حافظه براي حل هر مسئله ، واحد حافظه ، برنامه داده شده و داده هاي
ورودي و نتايج مياني و نهايي را ذخيره ميكند . اين واحد داراي قسمتهاي كوچكي
است كه خانه يا محل حافظه (Mempry Cell or Location) ناميده ميشود و تعداد آنها
در كامپيوتر مختلف متفاوت است . يكي از مشخصه هاي مهم واحد حافظه ، تغييرپذيري
آن در مقابل ورودي هاي و تغييرناپذيري آن در مقابل خروجي ها است ، بدين معني كه
هر گاه اطلاعاتي وارد يك خانه حافظه شود محتويات پيشين آن خانه از ميان ميرود
اما هنگاميكه از يك خانه حافظه اطلاعاتي گرفته ميشود محتويات آن تغيير نميكند .
از اين رو ميتوان اطلاعات را از خانه حافظه هر چند بار كه لازم باشد بيرون آورد
بي آنكه محتويات آن خانه تغيير كند .
واحد محاسبه پس از دريافت دستورها از واحد كنترل ، محاسبات رياضي در واحد
محاسبه انجام ميشود . تمام عمليات محاسباتي بدنبال يكديگر صورت ميگيرند . واحد
محاسبه ورودي هاي خود را از واحد حافظه دريافت مينمايد و پس از انجام محاسبات
لازم نتيجه را دوباربه همان واحد برميگرداند . محاسباتي كه اين واحد مستقيما"
انجام ميدهد از انواع محاسباتي ميباشند كه مدارهاي لازم براي انجام آن در درون
ماشين تعبيه شده است .
واحد خروجي واحد خروجي ميتواند نتايج نهايي هر قسمت از اطلاعات ذخيره شده
در واحد حاقظه را از طريق لوازم خروجي به بيرون منتقل نمايد . از معمولترين
لوازم خروجي از نوارهاي مغناطيسي يا نوارهاي كاغذي منگنه شده استفاده ميكند .
سرعت كار لوازم مختلف ورودي و خروجي متفاوت است و گاه لازم ميشود براي حداكثر
استفاده از كامپيوتر ، اطلاعات خروجي را نخست در لوازم خروجي نسبتا" سريع مانند
ماشين نوار خوان ضبط كرد و سپس آنهارا بكمك وسيله ديگري مانند ماشين چاپ نمود.
واحد كنترل اين واحد برنامه حل مسئله را در صورتي كه بطور مناسب تهيه شده
باشد ميپذيرد و ترتيب انجام عمليات را بتدريج بصورت يك دنباله مرحله به مرحله
فراهم ميسازد . اين واحد در ضمن ، قسمتهاي ديگر كامپيوتر را بكار انداخته و
در حل هر مسئله جريان داده ها را ميان آنها كنترل مينمايد .
مجموعه سه واحد حافظه ، محاسبه و كنترل را واحد پرورش دهنده مركزي
(Central Processing Unit) ناميده و باختصار با CPU نشان مي دهد و چون اغلب
لوازم ورودي وخروجي ازكامپيوتر مجزا هشتند آنها را لوازم پيراموني Peripheral)
(Eguipment نيز مي نامند . تشكيلات كلي يك كامپيوتر رقمي بطور شماتيك در شكل
(َ1) نشان داده شده است .
| |

| |
واحد | | | واحد | >| واحد | | واحد | |
| >| | | | >| | |
خروجي | | محاسبه |< | حافظه | | ورودي |
/\ /\ || /\ /\
|| || || ||
||
|| || \/ || ||

||
|| | واحد | ||
| | |
كنترل |

شكل (1) نمايش تشكيلات كلي يك كامپيوتر رقمي پيكانهاي پر نشان دهنده جريان اشد

کيفيت مقاله :
عالی خوب متوسط ضعيف


مراحل حل يك مسئله بكمك كامپيوتر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۱۰ مراجعه امروز
۴۶۲۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مراحل حل يك مسئله بكمك كامپيوتر
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۴۵۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

مراحل حل يك مسئله بكمك كامپيوتر

در حل هر مسئله نخست بايد روش رياضي يا منطق مورد استفاده كاملا" مشخص گردد
و سپس اين مطالب بصورت يك برنامه (Program) يعني يك سلسله دستورهاي نوشته شده
بيكي از زبانهاي مورد نظر ( مثلا" فرترن چهار ) در آورده شود .
بر روي برنامه اي كه بدين ترتيب تهيه شده عملياتي در كامپيوتر انجام ميشود
كه مراحل اصلي آن بطور خلاصه بشرح زير است :
مرحله 1 برنامه و داده ها ازطريق لوازم ورودي با نظارت واحد كنترل در واحد
حافظه ذخيره ميگردد .
مرحله 2 وقتي برنامه در واحد حافظه قرار گرفت دستورها براي تعبير و اجراي
نهائي در اختيار قسمت كنترل قرار ميگيرد .
مرحله 3 در واحد محاسبه عمليات زير با نظارت واحد كنترل صورت ميگيرد :
الف داده ها از واحد حافظه دريافت ميشود .
ب مطابق راه حلي كه بوسيله برنامه معين گشته روي داده ها عمل ميگردد .
پ نتايج عملهاي انجام يافته به واحد حافظه بر گردانيده ميشود .
مرحله 4 نتايج حاصل از عمليات انجام شده بوسيله لوازم خروجي به بيرون رند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مراحل حل يك مسئله بكمك كامپيوتر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۱۳ مراجعه امروز
۴۶۲۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مراحل حل يك مسئله بكمك كامپيوتر
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۳/۹/۱۳۸۱ اين مقاله ۴۳۶ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

مراحل حل يك مسئله بكمك كامپيوتر

در حل هر مسئله نخست بايد روش رياضي يا منطق مورد استفاده كاملا" مشخص گردد
و سپس اين مطالب بصورت يك برنامه (Program) يعني يك سلسله دستورهاي نوشته شده
بيكي از زبانهاي مورد نظر ( مثلا" فرترن چهار ) در آورده شود .
بر روي برنامه اي كه بدين ترتيب تهيه شده عملياتي در كامپيوتر انجام ميشود
كه مراحل اصلي آن بطور خلاصه بشرح زير است :
مرحله 1 برنامه و داده ها ازطريق لوازم ورودي با نظارت واحد كنترل در واحد
حافظه ذخيره ميگردد .
مرحله 2 وقتي برنامه در واحد حافظه قرار گرفت دستورها براي تعبير و اجراي
نهائي در اختيار قسمت كنترل قرار ميگيرد .
مرحله 3 در واحد محاسبه عمليات زير با نظارت واحد كنترل صورت ميگيرد :
الف داده ها از واحد حافظه دريافت ميشود .
ب مطابق راه حلي كه بوسيله برنامه معين گشته روي داده ها عمل ميگردد .
پ نتايج عملهاي انجام يافته به واحد حافظه بر گردانيده ميشود .
مرحله 4 نتايج حاصل از عمليات انجام شده بوسيله لوازم خروجي به بيرون رند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


انتقال و تبديل اطلاعات ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۱۶ مراجعه امروز
۴۶۳۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انتقال و تبديل اطلاعات
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۵۸۰ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

انتقال و تبديل اطلاعات

عمل واحدهاي ورودي و خروجي شامل انتقال اطلاعات و تبديل آنها بصورت هاي
مطلوب ميباشد . تهيه اطلاعاتي كه بايد از طريق واحد ورودي وارد كامپيوتر شوند
معمولا به صورت بيرون از خط *(Off LLine() با ماشين منگنه يا لوازم مشابه انجام
ميگردد . وقتي برنامه و داده ها تهيه شد ، لوازم مناسب پيراموني ، اطلاعات تهيه
شده را وارد حافظه كامپيوتر مي نمايند . در قسمت خروجي ، كامپيوتر اطلاعات را از
واحد حافظه به لوازم معين شده خروجي مانند ماشين چاپ و ماشين نوار خوان تحويل
ميدهد . در بيشتر كامپيوترها يك ماشين كارت خوان و يك ماشين منگنه بعنوان
لوازم ورودي خروجي اصلي بكار ميروند ، با اين وجود براي يك كامپيوتر سريع ،
سرعت عمل اين گونه ماشينهاي پيراموني بسيار كند است . در اين كامپيوترها اغلب
براي ورود و خروج اطلاعات از نوار مغناطيسي استفاده ميگرددو گاه يك ماشين چاپ
سريع نيز بعنوان يك واحد خروجي اختياري بكار برده ميشود . چون سرعت كار لوازم
ورودي و خروجي معمولا" بسيار كمتر از سرعت عمل كامپيوتر است ، براي استفاده
حداكثر از وقت يك كامپيوتر ، در بعضي مواقع براي انتقال اطلاعات بين كامپيوتر و
محيط بيرون بيش از يك دستگاه ورودي يا خروجي ميرود .
كامپيوتر فقط برنامه هائي را كه بزبان ماشين (Machine Language) نوشته
شده باشد قبول ميكند . ازاين رو هر برنامه كه بزبان ديگري مانند فرترن يا الگل
تهيه شده باشد بايستي نخست بصورت برنامه بزبان ماشين ترجمه شود. اين عمل ترجمه
نخستين مرحله اجراي يك برنامه در كامپيوتر است كه برنامه خاصي بنام كامپايلر
(Compiler) انجام ميگيرد . معمولا اين قسمت را مترجم (Translator) نيز ميگويند
زيرا برنامه ها را بزباني كه براي ماشين قابل فهم است در آورد . برنامه اصلي را
كه بزباني مانند فرترن و يا غيره نوشته شده است برنامه منبع (Source Program)
و برنامه ترجمه شده بوسيله كامپايلر را كه بزبان ماشين ميباشد برنامه موضوع
(Object Program) مينامند .
معمولا" كامپايلر علاوه بر تهيه برنامه بزبان ماشين كارهاي ديگري نيز انجام
ميدهد. مثلا" بيشتر كامپايلرها رونوشتي ازبرنامه منبع راچاپ ميكنند و اگر مطلبي
بر خلاف قواعد زباني كه بكار برده شده است بيابد فورا پيامي مناسب براي تذكر
چنين خطائي چاپ ميكند. برنامه ها بيش از رفع تمام خطاها قابل اجرا نخواهد بود .
البته نميتوان در كامپايلر به تعداد كافي از اين گونه پيامها كه جوابگوي هر
نوع خطاي ممكن برنامه نويس باشند قرار دارد . بدين جهت گاه اين پيامها باندازه
كافي واضح نيستند و خطاي موجود در برنامه را مستقيما" نشان نميدهند . در اين
گونه موارد بايد از تجربه برنامه نويسهاي كار آزموده براي پيدا كردن خطاي واقعي
استفاده كرد . در اينجا بايد تاكيد نمود كه كامپايلر قادر به درك و تشخيص
خطاهائي كه در منطق حل هر مسئله موجود است نمي باشد و فقط ميتواند آن دسته
خطاهائي را تشخيص و تذكر دهد كه مربوط به قواعد زبان بكار برده شده ميباشند .
براي هر كامپيوتر ميتوان كامپايلرهاي مختلفي بكار برد . معمولا" در كارهائي
علمي و مهندسي انواع كامپايلرهاي فرترن ، الگال وPL/I و براي امور بازرگاني
بيشتر كامپايلرهاي كوبال PL/I، RL/G، و اسمبلر(Assembler) بكار برده ميشود .
برنامه موضوع بصورت علامتهاي قابل فهم و تعبير براي كامپيوتر ميباشد . اين
علامتها تركيبي است از رقمهاي صفر و يك . ايندو رقم نماينده دو حالت فيزيكي
مختلف ميباشد كه در كامپيوتر با تغيير جهت جريان در يك حلقه مغناطيسي بوجود
ميايد و چون اساس سيستم دوئي (Binary) دو رقم صفر ويك است در بيشتر كامپيوترها
محاسبات دروني در سيتم دو دوئي صورت ميگيرد . بنابراين ميتوان ديد كه ميان
بيروني و دروني اطلاعات تفاوت كلي وجود دارد . در صورت بيروني ، اطلاعات اغلب
بصورت حروف لاتين و علائم واعداد (در سيتم دهدهي ) ميباشند ، حال آنكه در درون
كامپيوتر كليه اطلاعات دو دوئي است . واضح است كه نتايج خروجي دوباره از صورت
دو دوئي بصورت حروف وعلائم و عددهاي دهدهي در مي آيد . عمل تبديل اطلاعات از صورت
دو دوئي و بعكس بيشتر بكمك لوازم پيراموني انجام ميگيرد .
چنانكه قبلا" گفته شد عمل انتقال اطلاعات بين محيط خارج و لوازم پيراموني
مختلفي انجام ميگيرد كه متداولترين آنها كارتها منگنه شده است . در كارت منگنه
شده اطلاعات بوسيله سوراخهاي كوچكي كه درمحلهاي خاصي روي كارت ، با ماشين منگنه
ايجاد ميشود ضبط ميگردند . انتقال اطلاعاتي كه بدينسان ضبط شده اند با گذرانيدن
كارت محتوي آنها از يك ماشين كارت خوان انجام ميگيرد و اين ماشين وجود يا عدم
سوراخها را با وسايل مكانيكي يا اپتيكي تشخيص داده و آنها را به كامپيوتر
انتقال ميدهد . معمولترين كارت كه كارت IBM نيز گفته ميشود داراي 80 ستون و 12
رديف است كه در هر ستون 12 محل منگنه موجود است . ده رديف از صفر تا نه شماره
گذاري شده است و رديفهاي 11 و 12 بترتيب در بالاي رديف صفر قرار دارند .
هر ستون كارت براي نمايش يك كاراكتر (رقم ، حرف يا علامت ) بكار ميرود .
بدينسان هر كارت ميتواند حداكثر 8 كاراكتر در خود ضبط نمايد . روي هر كارت تون ، حروف با دو سوراخ در يك ستون و علامتهاي خاص

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور محاسباتي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۱۹ مراجعه امروز
۴۶۳۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور محاسباتي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۹۱ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

دستور محاسباتي

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


علامتهاي زبان فرترن ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۲۲ مراجعه امروز
۴۶۳۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
علامتهاي زبان فرترن
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۵۳۱ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

علامتهاي زبان فرترن

در زبانهاي فرترن علامتهاي زير بكار برده ميشود :
الف حروف بزرك الفباي لاتين Aتا Zا
ب رقمهاي صفر تا 9
پ نقطه ( كه در محاسبه عددي به عنوان مميز بكار برده ميشود)
علامتهاي عملهاي اصلي كه عبارتند از :
جمع +
منها
ضرب *
تقسيم /
توان رساني **
ث ساير علامتها :
پرانتز باز )
پرانتز بسته (
جايگزيني =
كاما ،
علامت نقل '
علامت دلار $ علامت هاي ديگر در زبان فرترن مجاز نمي باشند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستورهاي محاسباتي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۲۵ مراجعه امروز
۴۶۴۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستورهاي محاسباتي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۸۶ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستورهاي محاسباتي

اساسي ترين دستورهاي زبان فرترن دستورهاي محاسباتي (Arithmetic Statement)
است كه بمنظور انجام محاسبات بكار ميرود . صورت كلي دستورهاي محاسباتي به شكل

A = E

ميباشد كه در آن E يك عبارت رياضي و A يك متغير است . دو مثال دستور محاسباتي
در زير نشان داده است .

W = X + Y + 2.5
AREA = SIDE * SIDE

هنگام اجراي دستور محاسباتي W = X + Y + 2.5 ، كامپيوتر مجموع مقدارهاي X
، 2.5 / Y، (يعني تنيجه محاسبات سمت راست ) را تعيين وآنرا جايگزين W مي نمايد
البته لازم است كه مقدارهاي X Y قبلا" براي كامپيوتر معلوم باشد . از آنجا كه
مقدار محاسبه شده عبارت رياضي سمت راست = جايگزين متغير سمت چپ ميگردد ،
علامت = علامت جايگزيني ناميده ميشود . در دستور محاسباتي

AREA = SIDE * SIDE ،

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

A + B = C

در زبان فرترن مجاز نمي باشند .
مثالهاي از چند رابطه رياضي و دستورهاي محاسباتي معادل آنها در زير نشان
داده شده است .
دستور محاسباتي معادل در زبان فرترن رابطه رياضي

s = a + b S = A + B
s = x + y + z U = X + Y + Z
F = A B + C /
D
c بروي a + d بروي f = b g = v t Q = V * T
c = 39 .2 d C = 39 .2 * D
* R **
2
َS = 3/14 r به توان x 2 َs = 3/14 Z جذر yدر xر z =

کيفيت مقاله :
عالی خوب متوسط ضعيف


متغيرها و ثابت ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۲۸ مراجعه امروز
۴۶۴۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
متغيرها و ثابت ها
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۸۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

متغيرها و ثابت ها

هر كميتي كه مقدارآن بتواند درضمن اجراي برنامه تغيير كند متغيير(Variable)
خوانده ميشود . مثلا" در دستور محاسباتي :

W = X + Y + 2 . 5
AREA = SIDE * SIDE

كميتهتاي X، Y،، W،، AREA ISIDE، متغير ميباشند . متغيرها تركيبي از حرفها
و رقمها هستند كه برنامه نويس آنها را به منظور معرفي كميتهاي مساله مورد نظر
بكار ميبرد .
از آنجا كه انتخاب اين تركيب دلخواه مي باشد بهتر است انتخاب آنها بطريقي
صورت گيردد كه در مساله مورد نظر داراي مفهوم روشني باشد . مثلا" در دستور
محاسباتي دوم بالا ، براي محاسبه مساحت مربع با در دست داشتن طول ضلع ، اسامي
متعيرها AREAو SIDEو انتخاب شده است . اين عمل درك مفهوم برنامه را هنگام
بررسي مجدد تسهيل مينمايد .
نام متغيرها فقط مي تواند از حرفها و رقمها تكشيل شود و اولين علامت سمت چپ
حتما" بايد يكي از حرفهاي Aتا Zا باشد . ولي ساير علامتها ممكن است حرف يا رقم
باشند . تعداد علامتهاي بكار رفته در نام متغيرها نبايد از 6 حرف يا رقم تجاوز
كند .
مثالهاي از نامهاي مجاز و غير مجاز متغيرها در زير آمده است :

توضيح نامهاي غير مجاز | نامهاي مجاز
اولين علامت بايد حرف باشد 5 A | A
علامت * مجاز نيست FIRST * | A 25
علامت # مجاز نيست SUM # | A 4 Z
تعداد علامتهاي بكار رفته VOLTAGE | XNUM
بيش از 6 ميباشد | AJI
حروف aوBو مجاز نيستند a B | VOLT

عددهائي كه در دستور محاسباتي بكار ميروند ثابت (Constant) خوانده ميشوند
زيرا مقدار آنها نميتواند در حين اجراي برنامه تغيير كند . مثلا"عدد 2.5د در
دستور محاسباتي W = X + Y + 2.5 يك ثابت ميباشد . در حين اجراي برنامه امكان بگيرد ولي مقدار 2.5 هرگز تغييرنمي كند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ترتيب انجام عملهاي اصلي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۳۱ مراجعه امروز
۴۶۴۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ترتيب انجام عملهاي اصلي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۶۶ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

ترتيب انجام عملهاي اصلي

معمولا" براي محاسبه يك عبارت ممكن است انجام چند عمل اصلي لازم باشد . مثلا"
عبارت C_ A*3.2 + B**2_ شامل عملهاي جمع ، و منها ضرب و توان رساني ميباشد .
كامپيوتر مي تواند به سرعت عبارتهاي مفصل را محاسبه نمايد ولي براي انجام اين
محاسبه در هر لحظه تنها يك عمل صورت ميگيرد و بدين سبب براي انجام عملها در
در كامپيوتر ترتيب خاصي وجود دارد . در هر عبارت از چپ ب ه راست و بترتيب زير
انجام ميگيرد : 1
توان رساني 2
ضرب و تقسسيم 3
جمع و تقريق
مثلا" در محاسبه عبارت بالا نخست مقدارB**2 محاسبه ، سپس عمل ضرب A*3.2 انجام
گرفته و بعد حاصل جمع اين دو مقدار بدست آمده و مقدار C از آن كسر ميگردد .
بهمان ترتيب در دستور Z X = W /Y/ ابتدا مقدار Wبر Yر تقسيم گشته و نتيجه به
مقدار Z افزوده ميگردد . اين دستور در زبان فرترن نمايش رابطه رياضي w
بروي x = z + y است و چنانچه منظور نمايش رابطه رياضي w بروي z + y مساوي
است با x باشد اين رابطه بايد بصورت (Y + Z) X = W ) نوشته شود .
در دستورهاي محاسباتي ، موضوع انجام عملها از چپ به راست حائز اهميت است
مثلا" دردستور فرترن X = A *B*Y كه شامل عملهاي هم مرتبه ضرب و تقسيم ميباشد ،
ابتدا مقدار A بر مقدار B تقسيم گشته و سپس تنيجه در كميت Y ضرب ميگردد . باين
ترتيب چنين دستوري نمايشگر عبارت رياضي a بروي b مميز x = y بكار برد .
بطوريكه از مثالهاي بالا مشهود است وجود پرانتز در مشخص كردن ترتيب انجام
عملها موثر ميباشد . باينصورت كه ابتدا تمام عملهاي داخل پرانتز انجام ميگيرد
و سپس ترتيبي كه در بالا گفته شد رعايت ميشود .
دستور فرترن رابطه رياضي

(َU + 0.5) + 3.2*( N-1() A = U** (u+0.5)َ+3.5 به توان a = n-1
(R-S)/(R*S-A) G =ars بروي g = r-s
(C + D)**( A + B/3.0) M = به توان c+d(b+a( بروي 3) m =

علامتهائي مانند كروشه و آكولاد كه گاه در معادلات جبري بكار ميرود در فرترن
مجاز نميباشند و به جاي آنها فقط پرانتز بكار برده ميشود . در صورتيكه در يك
دستور محاسباتي چند زوج پرانتز در درون يكديگر رود ، نخست محاسبات دروني ترين
زوج پرانتز انجام ميگيرد و سپس عملها بطرف پرانتزهاي بيروني پيش ميرود . البته
در هر دستور محاسباتي فرترن لازم است كه تعداد پرانتزها بازو بسته برابر باشند.
مثال در عبارت محاسباتي زير 3.14*(A*(B-C )+ D )+ 6.8

عملها بدين ترتيب انجام ميگيرد كه نخست B-C محاسبه ونتيجه در A ضرب ميشود
سپس نتيجه اين محاسبه با D جمع و حاصل در عدد 3.14 ضرب و نتيجه با 6.8 جمع
ميگردد .
در زبان فرترن دو علامت از عملهاي اصلي نميتوانند بلافاصله پشت سر همديگر
قرار گيرند و در صورت لزوم بايد از پرانتز استفاده نمود . مثلا" عبارتهاي مانند
(b-) a)و aو بروي b - بايد بترتيب بصورتهاي (B-)A*) و (B -)A) نوشته شوند .
بعضي مواقع ممكن است پرانتزهاي غير ضروري در عبارتي بكار رود . بايد تذكر داد
كه چنين عملي مجاز ميباشد . مثلا" در دستور محاسباتي زير پرانتزها اضافي

کيفيت مقاله :
عالی خوب متوسط ضعيف


مود ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۳۴ مراجعه امروز
۴۶۵۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مود
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۶ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

مود

محاسبات زبان فرترن معمولا" در دو مود (Mode) مختلف انجام ميگيرد كه عبارتند
از :
مود صحيح (Integer Mode)
مود اعشاري(Real Mode)
نظر باينكه كامپيوتر محاسبه هاي هر مورد را بطور متفاوتي انجام ميدهد لازم
است كه در عبارت كليه ثابت ها و متغيرها جز در مورد استثنائي كه بعدا" گفته
خواهد شد در يك مود باشند . ثابت ها در مود صحيح بصورت عدد صحيح و در مود
اعشاري همراه بامميز نشان داده ميشوند . مثلا" عددهاي 7.2، 1،.َ10 - و.15 اعشاري
و عددهاي 52 - ، 701 و 15 صحيح ميباشند .
عددهاي اعشاري را ميتوان بصورت نمائي (Exponential) نيز نشان داده ، بدين
معني كه هر عدد بصورت حاصلضرب يك جزاعشاري (كه معمولا مقدار آن بين 0.1و 1.0و
است ) در توان صحيح مناسبي از 10 نشان داده ميشود .
در فرترن جز اعشاري هر عدد قبل از حرف E و توان مورد نظر پس از حرف E بصورت
زير نشان داده ميشود :

صورت نمائي فرترن صورت نمائي صورت اعشاري 0.725E2
2 به توان x 10 َ0.725 5.َ72 1512E3
.0 - 3 به توان x 10 َ1512.0 - 2.َ51 2
- 25E.0 2 - به توان 10 25x.0 0.0025 3
- 2.5E 3 - به توان 2.5 x 10 0.0025 1
- 0.78E - 1 - به توان x 10 َ0.78 - 0.078 - 0.5E0
0 به توان 10 0.5x

بايد توجه داشت كه كميتهاي اعشاري در درون كامپيوتر همواره بصورت نمائي
(كه جز اعشاري آن بين 0.1و1.0و ميباشد) بدون در نظر گرفتن اينكه بصورت اعشاري
يانمائي معرفي شده باشند ذخيره ميگردند . به علت محدود بودن تعداد محلهائي كه
كه حافظه كامپيوتر براي ذخيره كردن مقادير اعشاري اختصاص ميدهد معمولا" فقط 7
تا 8ا رقم از جز اعشاري نگهداري ميشود و مقدار نماي مربوط معمولا" بين 75 - و + 75
است . در مورد كميتهاي صحيح معمولا" ميتوان حداكثر تا حدود10 رقم در
كامپيوتر ذخيره نمود .
متغيرهاي فرترن نيز ميتوانند در مود صحيح يا اعشاري باشند . متغبرهائي كه
حرف اول آنها يكي از 6 حرف I، J،، K،، L،، M،و Nو باشند متغيرهاي صحيح وآنهايي
كه حرف اول آنها بجز 6 حرف فوق باشد متغيرهاي اعشاري خواهند بود . بنابراين
متغيرهائي مانند L، K،، JOB، MASS،، NUM،و ISUNو متغيرهاي صحيح و متغيرهائي
مانند A، F،، SUM،، XMASS، ، Y57 و Z4N متغيرهاي اعشاري ميباشند .
چنانچه در يك برنامه براي واضح شدن مفهوم پاره اي از متغيرها ، انتخاب
نامهائي از قبيل FORCE، AMPER،، VOLT،و OHMو ضروري بوده ولي مقدار اين كميتها
در مود صحيح باشند ميتوان با اضافه كردن يكي از 6 حرف فوق به ابتداي نام اين
متغيرها آنها را بصورت IFORCE، IAMPER،، IVOLT،، IOHM، تغيير داد كه بتوانند
معرف كميتهاي صحيح باشند .
در دستورهاي محاسباتي زير :

A = X + 2.0
BI = 3.0*X + Y*Z / 2.0
I =( N - 2)*J
ELEVEN = TWO + NINE
Z = A*X**2 + B*Y**3.0

دو طرف دستور اول و دوم در مود اعشاري و دو طرف دستور سوم در مود صحيح است
در دستور چهارم دو متغير سمت راست در دو مود مختلف هستند و آميختن آنها مجاز
نميباشد . بالاخره در سمت راست دستور آخر كه در مود اعشاري است متغير اعشاري X
به توان صحيح 2 رسيده و چنين عملي مجاز است زيرا در مورد توان رساني مودها
بصورت زير قابل قبول ميباشند :
الف ثابتها و متغيرهاي اعشاري را ميتوان به توان اعشاري يا به توان صحيح
رساند .
ب ثابتها و متغيرهاي صحيح تنها بايد به توان صحيح برسند . بنابرين اين
عبارتهائي مانند :

A**(I + 1)
B**0.5
(K - 2)**3

مجاز است و حال آنكه عبارتهائي مانند :

I**2.5
I2**(A - 1.5)

مجاز نيست .
در فرترن ميتوان دستورهائي نوشت كه دو طرف چپ و راست آن در دو مود مختلف
باشند كه نمونه هائي از آن در زير نشان داده شده است .

J = X XI = I
JOE = 3.90*Y Y = 3 + MAX
K = A + B*C A = I + J*K

در مثالهاي بالا عملهاي طرف راست علامت جايگزيني در مود مربوط انجام و سپس
نتيجه حاصل به مود طرف چپ تبديل و جايگزين آن ميگردد . مثلا" در دستور JOE = 3.90*Y
اگر مقدار Y برابر 2.0 باشد نخست مقدار سمت راست برابر 7.80
محاسبه ميشود و چون اين مقدار بايد جايگزين متغير صحيح JOE شود بنابرين جز
اعشاري آن حذف و عدد صحيح 7 جايگزين JOE ميگردد .
در دستور Y = 3 + MAX مقدار سمت راست در مود صحيح محاسبه و نتيجه به مود
اعشاري تبديل ميشود مثلا"اگر MAXر برابر با 8 باشد عدد صحيح 11 بدست ميايد كه
پس از تبديل به مود اعشاري عدد 0.َ11 جايگزين متغير Y ميگردد .
تبصره - بايد دقت كرد در عبارتهائي كه در مود صحيح انجام ميگيرد نتيجه هر
عمل يك عدد صحيح خواهد بود . مثلا" در دستور A = 3/2 + 2 نتيجه هر عمل تقسيم 3/2
عدد صحيح 1 ميباشد كه پس از اضافه شدن به عدد 2 عدد صحيح 3 نتيجه ميشود و
بصورت اعشاري 3.0 جايگزين A ميگردد . در مثالهاي زير نمونه هائي از اين گونه
دستورها و جوابهاي حاصل داده شده است .
جواب دستور فرترن

B = 3.2*3 B = 3.
I = 3*3/2 I = 4
B = 3*(3/2 )B = 3.
K = 3/( 2*3 )K = 0

در تدوين زبان فرترن سعي شده است كه دستورهائي محاسباتي از لحاظ صورت ظاهري
حتي الامكان مشابه عبارتهاي رياضي مربوط باشند . اين امر گاه ممكن است سبب
اشتباهاتي گردد كه چند نمونه از آن در زير نشان داده شده است .

عبارت محاسباتي درست عبارت محاسباتي نادرست عبارت رياضيxy XY X*Y
i-(j )I* - J I*-(J)

(َI + 2)A**)A**I + 2 i + 2 به توان a A**X
I**Xx به توان i
(.1./2)**(B + C) (1.2)**(B + C) 0/5 به توان (b + c **2
(A + B)A + B**2 2 به توان (a + b)
(C*D)A*B) A*B/C*D ab بروي cb 4ac4*A*C

کيفيت مقاله :
عالی خوب متوسط ضعيف


تابع هاي رياضي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۳۷ مراجعه امروز
۴۶۵۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تابع هاي رياضي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۶۴۸ بار مطالعه شده است
۱۱ نفر تا به حال به اين مقاله رای داده اند.

تابع هاي رياضي

پاره اي از تابع ها رياضي معمولي به سادگي در فرترن قابل استفاده هستند .
براي استفاده از اين توابع در هر مورد بايد بصورت ويژه تابع مورد نظر را بكار
برد . مثلا" رابطه رياضي Y = Sin x را كه در آن تابع سينوس بكار رفته است بايد
بصورت دستور محاسباتي (X)Y = SIN نوشت . درتدوين زبان فرترن قبلا" فرم اين تابع
بصورت نشان داده شده در بالا تعريف شده است . علاوه برتابع سينوس تابع هاي معمولي
ديگري نيز براي استفاده برنامه نويس وجود دارد . انواع تابع هاي موجود بستگي به
كامپيوتر و زبان بكار برده شده دارد . معمولا تابع هاي زير در تمام كامپايلرهاي
فرترن چهار وجود است .

نوع تابع تابع رياضي صورت ويژه فرترن چهار
سينوس زاويه به راديان sin x (X)SIN
كسسينوس زاويه به راديان cos x (X)COS
ريشه دوم جزx (X)SQRT
مقدار مطلق | x | (X)ABS
لگاريتم طبيعي (نپر) بر مبناي log) (X)ALOG
آركتانژانت محاسيه زاويه به راديان x(1( به توان tan) (X)ATAN
تابع نمائي x به توان e (X)EXP

بمنظور كاربرد اين تابع ها ، در هر حالت بايد نام آنها را بصورتي كه در جدول
بالا تعين شده است نوشت و در بدنبال آن در داخل يك زوج پرانتز پارامتر يا عبارت
مورد نظر را كه آرگومان (Argunment) تابع ناميده ميشود ودر بالا با X نشان داده
شده است قرار دارد .
آرگومانهاي تابع هاي بالا همواره بايد در مود اعشاري باشند .
مثال - رابطه رياضي

( 3/14 بروي 2- t-)P = 3Cos.1 2 .b = 1 + tan 2 x
t

به توان d+e(e( بر مبناي log) جذر z =.3

در زبان فرترن چهار بصورت زير نوشته ميشود : 1.

P = 3.*COS(T - 3.14/2).
2 .B = 1 .+ SIN(2.*X)/COS(2.*X)
3 .Z = SQRT(ALOG(D )+ EZP(T)

بايد توجه داشت كه چون عدد 3/14 براي كامپيوتر مفهومي ندارد در ربطه اول
مقدار آن بكار برده شده است و همچنين نظر به اينكه تابع تانزانت در كامپايلر
فرترن چهار وجود ندارد بجاي آن خارج قسمت سپنوس بر كسينوس آرگومان مورد نظر ت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ترتيب نوشتن دستورهاي رياضي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۴۰ مراجعه امروز
۴۶۵۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ترتيب نوشتن دستورهاي رياضي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۵۱۳ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

ترتيب نوشتن دستورهاي رياضي

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

X = 2.*3.14
A = 3.*X + 10.

نخست مقدار 6.28 در دستور اول محاسبه و جايگزين X ميگردد و سپس در دستور
دوم با در نظر گرفتن اينكه مقدار X برابر با 6.28 است عبارت سمت راست محاسبه
و مقدار 84.َ28 جايگزين A ميشود .
مثال 2 اگر ضريب هاي معادله درجه دوم + bx + c = 0(2( به توان ax) را به
ترتيب A، B،و Cو بناميم براي بدست آوردن ريشه هاي (x برمبناي 1) و (x بر مبناي 2
) اين معادله ، بفرض اينكه معادله داراي دو ريشه حقيقي باشد ميتوان از
دستورهاي زير استفاده نمود :

DELTA = SQRT(B**2-4.*A*C)
XI = -( B + DELTA)/(2.*A)
X2 = -( B - DELTA)/(2.*A)

اگر متغيري بيش از يك بار در سمت چپ دستورهائي ظاهر گردد بايد دقت نمود
كه در هر مرحله از عمليات آخرين مقدار آن در محاسبه منظور خواهد شد . اين مطلب
در مثال زير تشريح شده است :
مثال 3 اگر در برنامه اي دستورهائي بترتيب زير نوشته شده باشد :

I = 5
J = I/2
I = I + 1
K = I /2
N = K + J

هنگام اجراي دستور دوم مقدار 2 جايگزين J ميگردد سپس در موقع اجراي دستور 1
I = I + مقدار Iاز 5زبه 6 تغيير پيدا ميكند و بدين ترتيب در دستور چهارم
براي محاسبه K آخرين مقدار I كه برابر 6 ميباشد بكار ميرود و K = 3 محاسبه
ميشود و بدينسان مقدار N برابر با 5 بدست ميايد
بصره - دستورهائي شييه I = I + 1 محاسبه هاي كامپيوتر كاربرد زيادي دارند و
بايد باين مطلب توجه نمود كه در اين دستور مقدار I در سمت راست علامت جايگزيني
با مقدار آن در سمت چپ متفاوت است و يك چنين دستور محاسباتي مفهومي متفاوت با بايد آنرا با تساوي جبري اشتباه نمود .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستورهاي ورودي و خروجي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۴۳ مراجعه امروز
۴۶۵۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستورهاي ورودي و خروجي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۵۳ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

دستورهاي ورودي و خروجي

براي حل مسائل به كمك كامپيوتر ، داده هاي مورد لزوم بايد به نحوي وارد حافظه
كامپيوتر گردد و سپس نتايج بدست آمده از حافظه گرفته شود . وارد كردن داده ها
توسط واحد ورودي بكمك دستور ورودي و گرفتن نتايج توسط واحد خروجي بكمك دستور
خروجي انجام ميگيرد . اين دستورها در واقع سبب انتقال داده ها بين واحد حافظه
و يكي از لوازم پيراموني ميشوند . هر دستور ورودي يا خروجي بايد همواره يك
دستور فرمت (Format Statement) كه فرم داده هاي ورودي يا خروجي رامشخص مينمايد
باشد .
وارد كردن داده ها به كامپيوتر بكمك دستور READ و گرفتن نتايج مورد نظر بكمك
دستور WRITE انجام ميگيرد . صورت كلي اين دستورها بشكل List

(n1( و m1و) READ LIST
(n2( و m2و) WRITE

ميباشد كه در آن : m1
ثابت يا متغير صحيح بدون علامتي است كه مشخص ميكند داده هاي ورودي توسط
كداميك از لوازم پيراموني (مانند ماشين كارت خوان و غيره ) به كامپيوتر انتقال
مييابد . براي خواندن كارتهاي منگنه شده مقدار m1 در اين كتاب برابر يك اختيار
شده است . m2
نيز مانند m2 ثابت يا متغير صحيح بي علامتي است كه مشخص ميكند داده هاي
خروجي توسط كداميك از لوازم پيراموني (مانند ماشين چاپ ، ماشين منگنه و غيره )
از كامپيوتر گرفته شود . در اين كتاب مقدار m2 براي چاپ كردن برابر 3 و براي
منگنه كردن برابر 2 بكار رفته است . n1
و n2و ثابتهاي صحيح بي علامتي هستند كه شماره فرمت نماميده ميشوند و
مقدار آنها بايد عددي بين 1 و 99999 باشد . List
شامل اسامي كليه متغيرهائي است كه مقدار آنها در دستور READ بماشين
داده شده و در دستور WRITE از ماشين گرفته ميشود . اسامي متغيرها در ليست بايد
بوسيله كاما از يكديگر جدا گردند . ترتيب ورود و خروج متغيرها به همان ترتيب
قيد شده در ليست است .
دستور List(n1(و m1و) READ به كامپيوتر فرمان مي دهد مقادير متغيرهائي را
كه در ليست نشان داده شده بخواند و در حافظه ذخيره نمايد . كارتهائيكه اين
مقادير روي آنها منگنه شده است كارتهاي داده ها (Data Cards) ناميده ميشوند .
ترتيب منگنه كردن اعداد در روي كارتها به همان ترتيب قرار گرفتن متغيرها در
ليست دستور مربوطه ميباشد .
دستور (n1 و m2و) WRITE سبب ميشود متغيرهائي كه در ليست نشان داده شده اند از
حافظه به خارج منتقل گردند .
مثال در دستور M
و Bوو Aو(5(و1و) READ
مقادير A، B، و Mو از روي كارت منگنه شده خوانده ميشود و بكمك دستور BETA
و Jو (17و 3و) WRITE
مقادير J و BETAو به ترتيب روي كاغذ چاپ ميشود .
بايد متذكر شد كه تعداد متغيرها در هر ليست محدود نيست و بعلاوه ميتوان يست بكار برد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور فرمت ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۴۶ مراجعه امروز
۴۶۶۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور فرمت
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۵۴ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور فرمت

چنانچه قبلا" اشاره شد دستورهاي READو ERITEوR بايد هميشه همراه يك دستور
فرمت باشند . منظور از دستور فرمت بيان مود و تعيين محل قرار گرفتن داده هاي
ورودي و خروجي روي كارت يا كاغذ چاپ و غيره است . دستور فرمت از نظر موقعيت
محلي در يك برنامه ميتواند در هر جاي برنامه قرار بگيرد . بنابراين لازم نيست
كه بلافاصله پس از دستور READ يا WRITEا مربوطه قرار گيرد .
براي انتقال داده هاي عددي توسط واحد ورودي و خروجي دو نكته بايد مورد توجه
قرار گيرد :
الف - مود كميت ، كه ممكن است صحيح يا اعشاري باشد و در دستور فرمت به
صورت زير مشخص ميگردد :
كميت صحيح I
كميت اعشاري F
ب - ميدان (F ield) در نظر شده براي متغيرها، كه عبارت از حداكثر تعداد
ستونهاي منظور شده براي متغيرها روي كارت و با كاغذ چاپ و غيره است .
صورت كلي ميدان I بشكل Iw

ميباشد كه در آن w طول ميدان (تعداد ستونهاي در نظر گرفته شده ) است .
مثلا" ميدان 18 مشخص ميكند كه اولا" انتقال يك مقدار صحيح مورد نظر بوده و
ثانيا" تعداد 8 محل براي آن منظور گرديده است .
صورت كلي ميدان F بشكل Fw.d

مي باشد كه در آن w طول ميدان و d تعداد رقمهاي سمت راست علامت مميز (جز
اعشاري ) است . مثلا" ميدان 3.َF10 ده محل براي انتقال يك كميت اعشاري منظور
ميدارد كه سه محل سمت راست آن بصورت زير براي جز اعشاري تخصيص داده شده است . xxxxxx.xxx

ميدانهاي مربوط به متغيرهاي ذكر شده در ليست ، در دستور فرمت قيد ميگردد .
صورت كلي دستور فرمت بشكل
(ميدانهاي مورد نظر) n FORMAT
ميباشد كه در آن n شماره دستور فرمت يعني همان شماره اي كه دستورهاي READ و WRITE
به آن اشاره ميكنند است . داخل پرانتز ميدانهاي IوFو كه بكمك كاما از
يكديگر جدا شده اند نوشته ميشوند .
مثال 1- براي خواندن مقدار متغير صحيح K از روي كارت داده ها ميتوان دستور
فرمت لازم را بصورت زير نوشت : K
(20و 1و) READ 20 FORMAT( 15)

در دستور فرمت بالا تعداد پنچ ستون براي مقدار متغير K منظور گرديده است .

مثال 2- دستور لازم را براي چاپ مقدار متغيرهاي AوNو را ميتوان بصورت زير
نوشت :
(َ105و 3و) WRITE
(َ14و F8.2و) FORMAT َ105
در اين دستور فرمت ، ميدان اول يعني F8.2 مربوط به متغير اول يعني A و
ميدان دوم يعني 14 كه به كمك كاما از ميدان قبلي جدا شده است مربوط به متغير
دوم ميباشد . در اينجا لازم است تاكيد شود كه هر متغير و ميدان مربوط به آن بايد
در يك مود باشند . چنانچه دستور فرمت داراي بيش از يك ميدان باشد شروع هر
ميدان بلافاصله پس از خاتمه ميدان پيشين خواهد بود . باين ترتيب در دستور فرمت
فوق ميدان F8.2 ستونهاي 1تا 8ا و ميدان 14 ستونهاي 9 تا 12 رااشغال مينمايند .
نظر باينكه هر كارت منگنه داراي 80 ستون و هر كاغذ چاپ معمولا" َ132 ستون ياجا
در هر سطر ميباشد بايد در نظر داشت كه مجموع ميدانهاي بكار رفته در هر دستور
فرمت از اين مقادير تجاوز ننمايد .
چنانچه چند متغير در يك ليست داراي ميدانهاي يكسان باشند ميتوان تعداد
متغيرها را در جلوي ميدان مربوط ذكر نمود و به اين ترتيب از تكرار ميدانها
خوداري كرد .

مثال 3- N
,N1,C,B,A,(1(و 1و) READ
(َ215و1و.َ3F10) 1FORMAT

دراين دستور متغيرهاي A,B,Cو بترتيب ستونها 1 تا 10 و 11 تا 20 و 21 تا 30
و متغيرهاي N1 و N2و بترتيب ستونها 31 تا 35 و 36 تا 40 را اشغال ميكنند .
از آنجا كه انتخاب طول ميدان دلخواه ميباشد لازم است كه نكات زير را در موقع
انتخاب در نظر داشت . در انتخاب طول ميدان يك كميت بايد يك جا براي علامت منظور
گردد البته چنانچه علامت كميت مورد نظر مثبت باشد ميتوان از منظور كردن جا براي
آن صرفنظر نمود . بعلاوه در مورد مقادير اعشاري بايد يك جا هم براي مميز در نظر
گرفت . اغلب اتفاق ميافتد كه تعداد ارقام كميتهاي مورد نظر در موقع نوشتن
برنامه مشخص نميباشد بنابراين ميداني كه انتخاب ميشود ممكن است كوچكتر يا
بزرگتر از تعداد جاهاي لازم باشد . هر يك از اين دو حالت ، در زير مورد بحث
قرار گرفته است .
الف - ميدان بزرگتر از تعداد رقم ها است .
در اين مورد كميتهاي مورد نظر در منتهي البه سمت راست ميدانهاي مربوطه قرار
ميگيرند .
مثال 4- عدد اعشاري 5.َ98 با ميدان F10/1 بصورت زير چاپ ميشود .
'''''''9'8'.'5'

درفرمت هاي خروجي نتايج اعشاري بوسبله علامت مميز درميدانهاي مربوطه جايگزين
ميشوند . يعني اول جاي مميز تعيين گشته و سپس جزئهاي پس از مميز و پيش از مميز
در جاهاي خود قرار ميگيرند .
در مورد مقادير اعشاري كه با ميداني بزرگتراز حداقل ميدان لازم خوانده ميشود
ميتوان مقادير مورد نظر را در هر جاي ميدان قرار داد . بنابراين مقدار فوق را
ميتوان مثلا" بصورت زير روي كارت داده ها منگنه كرد .
'''9'8'.'5'''''

مثال 5 - عدد صحيح 247 با فرمت I6 بصورت زير چاپ ميشود .
''''2'4'7'

در اينجا بايد تاكيد نمود كه براي خواندن كميتهاي صحيح با ميدانهاي بزرگتر
از حداقل لازم ، حتما" بايد آنها را در منتهي اليه سمت راست ميدان منگنه نمود
زيرا در غير اينصورت براي جاهاي خالي سمت راست عدد در داخل ميدان صفر منظور
ميگردد . مثلا" اگر عدد فوق در روي كارت داده ها در داخل ميدان I6 اشتباها"
بصورت : '''2'4'7''

مگنه شده باشد مقدار خوانده شده 2470 خواهد بود .
انتخاب ميدانهاي بزرگتر از حداقل لازم اغلب ممكن است بمنظور ايجاد جاي خالي
(فاصله ) بين مقادير منگنه شده در روي يك كارت و يا مقادير چاپ شده روي يك خط
بكار رود .
مثال 6 - چاپ متغيرهاي I، A، و Bو مقادير آنها بترتيب برابر 325 ، 41 ، 12
و 2.8 - ميباشد بكمك دستورهاي : B

و Aوو Iو (20و 3و) WRITE
(َ2.َ2F10 و I10) FORMAT َ20

بصورت زير خواهد بود :
''''''''3'2'5''''''1'2'.'4'1''''''-'2'.'8'0'

چنانچه از مثال فوق مشهود است چون جاهاي منظور شده براي جزئ اعشاري در
ميدان 2.َF10 بيشتر از تعداد ارقام جزئ اعشاري عدد 2.8- ميباشد جاهاي خالي با
صفر پر شده است .
سوال - در مثال فوق اگر به جاي ميدان 2.َ2F10 از ميدان 7.َ2F10 استفاده ميشد
مقادير مربوطه چگونه چاپ ميشدند ?
ب - طول ميدان كوچكتر او تعداد رقم هااست .
گاه اتفاق مي افتد كه در موقع چاپ كردن تعداد رقمهاي قبل از مميز يك عدد
و يا تعداد ارقام يك عدد صحيح از تعداد محلهاي منظور شده براي آن تجاوز
مينمايد . در چنين صورتي ارقام اضافي سمت چپ آنها حذف مي گردد . از آنجا كه اين
امر سبب تغيير اساسي در مقدارچاپ شده عدد مورد نظر ميشود اين خطا به وسيله
كامپيوتر مشخص ميگردد . بايد تذكر داد كه در نظر نگرفتن جاي لازم براي علامت
منها تيز سبب خطاي فوق ميگردد . اگر جاهاي منظور شده براي جزئ اعشاري كمتر از
تعداد ارقام جزئ اعشاري يك عدد باشد ارقام اضافي سمت راست جزئ اعشاري آن عدد
حذف و عدد روند ميگردد. مثلا" عدد 723.َ943 با ميدان 2.َF10 يصورت زير چاپ ميشود.
'''''9'4'3'.'7'2'

سوال - عدد فوق با ميدان 0.َF10 به چه صورت چاپ ميگردد ?

مثال 7 - اگر aو bوو cو اضلاع مثلثي باشند برنامه اي بنويسيد كه مقادير آنها
از روي يك كارت داده ها بخواند و سپس مساحت مثلث را از رابطه جذر (a- S-)s
(c- s-)(b- S-) كه در آن (a + b + c) S = 0/5 ميباشد محاسبه و چاپ نمايد .

C
و Bوو Aو (16و 1و) READ 16 FORMAT( 3F10.1)
S = 0.5*(A + B + C)
AREA = SQRT(S*(S - A)*(S - A)*(S - C)
AREA
(20و 3و)WRITE 20 FORMAT( F10.1)

مثلا"اگر a = 7.5ر، 3،.َb = 14و 4و.َc = 12 باشد لازم است كه كارت داده ها طبق
فرمت شماره 16 منگنه گردد .
اگر محاسبه مساحت مثلث ديگري مورد نظر باشد فقط كافي است كه كارت دادهاي
ديگري براي اضلاع مثلث مورد نظر تهيه و به جاي كارت دادهاي فوق قرار گيرد و
برنامه مجددا" اجرا گردد .
توضيح - برنامه بالا را بصورت زير ميتوان نوشت : A = 7.5

B = 14.3
C = 12.4
S = 0.5*(A + B + C)
AREA = SQRT(S*(S - A)*(S - B)*(S - C))
AREA
(20و 3و) WRITE = 20 FORMAT( F10.1)

برنامه هائي از اين قبيل كه داده هاي لازم براي حل مسئله در متن برنامه تعريف
شده باشد مواقعي به كار ميرود كه منظور فقط حل يك مسئله با داده اي مذكور در
برنامه باشد . در مواردي كه هدف حل يك مسئله با دادهاي ابتدائي مختلفي باشد ها

کيفيت مقاله :
عالی خوب متوسط ضعيف


طرز تنظيم برنامه ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۴۹ مراجعه امروز
۴۶۶۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
طرز تنظيم برنامه
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

طرز تنظيم برنامه

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


فرم كد گذاري ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۵۲ مراجعه امروز
۴۶۶۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فرم كد گذاري
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۵۱ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

فرم كد گذاري

اغلب براي تسهيل منگنه كردن برنانه نوشته شده ، نخست آن را روي ورقه مخصوصي
كه فرم كد گذاري فرترن (FORTRAN Coding Form) نام دارد مينويسند . هر سطر از
فرم كد گذاري براي نوشتن يك دستور بكار ميرود . هر سطر داراي 80 ستون است به
معادل 80 ستون يك كارت ميباشد . هر يك از علامتهاي فرترن بايد در يك ستون نوشته
شود .
هر يك از دستورهاي فرترن مانند دستورهاي محاسباتي ، دستور ورودي ، دستور
خروجي و دستور فرمت بايد در ستون 7 تا 72 نوشته شود . ستونهاي 1تا 5ا براي
نوشتن شماره هر دستور (مانند شماره دستور فرمت ) بكار ميرود ، مثلا" اگر شماره
دستوري 7 باشد ميتوان آنرا درهر يك از ستونهاي 1تا 5ا نوشت . ستونهاي 73 تا 80
را نميتوان براي دستورها بكار برد و فقط ميتوان از آنها به منظور افزودن
اطلاعاتي در مورد برنامه استفاده كرد كه البته در اين صورت كامپيوتر آنها را
ناديده ميگيرد . مثلا" ممكن است از اين ستونها براي شماره گذاري ترتيب كارتها
استفاده نمود .
اگر دستوري آنقدر طويل باشد كه در ستونهاي 7 تا 72 يك كارت جا نگيرد در آن
صورت دنباله آن در ستونهاي 7 تا 72 كارت يا كارتهاي بعد نوشته خواهد شد .
در اين گونه موارد لازم است كه در ستون 6 كارتهاي بعد علامتي جز صفر نوشته شود .
چنين كارتهائي را كه ادامه يك دستور در روي آنها مگنه ميشود كارتهاي ادامه
(COntinuation Cards) مينامند .
اغلب ممكن است برنامه نويس بخواهد اطلاعاتي را كه از نظر عمليات محاسباتي لازم
نيستند به منظور خاصي در برنامه بگنجاند . مثلا" ممكن است بخواهد نام و مشخصات
خود و يا روش حل مسئله مورد نظر را توضيح دهد . اطلاعاتي او اين قبيل را مي توان
بوسيله كارت توضيح (Comment Card) در برنامه گنجانيد . كارت توضيح بايد داراي
حرف C در ستون اول باشد . در انصورت ، كامپيوتر مطالبي را كه در ستون 2 تا 80
چنين كارتهائي منگنه شود ناديده خواهد گرفت . اينگونه كارتها را ميتوان به هر
جاي برنامه بجز بلافاصله قبل از كارت ادامه قرار دارد .
بايد توجه داشت كه تقسيم بندي ستونهاي مختلف كارتها بطريق بالا فقط مربوط
به كارتهاي دستورهاي برنامه فرترن است و در مورد داده هاي ورودي ميتوان از كليه بط فوق استفاده نمود .

کيفيت مقاله :
عالی خوب متوسط ضعيف


آماده ساختن برنامه براي اجرا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۵۵ مراجعه امروز
۴۶۷۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آماده ساختن برنامه براي اجرا
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۷ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

آماده ساختن برنامه براي اجرا

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

و يا CALL EXIT
مي باشد .
دستورهاي فوق ميتوانند داراي شماره دستور باشند كه طبق قاعده كلي بايد در
ستونهاي 1تا 5ا قرار گيرند . در يك برنامه ممكن است بيش از يك دستور توقف وجود
داشته باشد .
هر برنامه را بايد با دستور پايان كه صورت كلي آن بشكل END

ميباشد ختم نمود . عمل ترجمه برنامه فرترن توسط دستور پايان خاتمه مي يابد و
بنابرين هر برنامه بايد فقط داراي يك دستور پايان باشد . اين دستور نيز مانند
ساير دستورهاي فرترن بايد در ستونهاي 7 تا 72 گنجانيده شود ولي نميتوان داراي
شماره دستور باسند .
پس ازاينكه كارتهاي منگنه شده برنامه آماده شد بايد آنها را به همان ترتيبي
كه روي ورقه كد گذاري نوشته شده اند پشت سر هم قرار داد . بعلاوه كارتهاي دادها
نيز بايد به همان ترتيبي كه توسط دستورهاي ورودي برنامه خوانده ميشوند آماده
گردند .
براي اجراي هر برنامه توسط يك كامپيوتر چند كارت كنترل لازم است . كارت كنترل
اول Job Card ناميده ميشود و شروع برنامه مورد اجرا را براي كامپيوتر مشخص
ميسازد . كارت بعد اطلاعاتي در مورد نحوه چاپ و جزئيات مربوط به اجراي برنامه
را تعيين ميكند كارت چهارم نشان ميدهد كه برنامه مورد اجرا به زبان فرترن
نوشته شده است . بعد از اين كارتهاي كنترل ، كارتهاي منگنه شده برنامه منبع
قرار ميگيرند . سه كارت كنترلي كه بعد از كارت دستور پايان قرار ميگيرند ختم
برنامه منبع و شروع كارتهاي داده ها را نشان مي دهند و بعد از كارتهاي دادها دو
كارت كنترل نهائي كه به ترتيب ختم داده ها و پايان برنامه مورد اجرا را مي سازند
قرار ميگيرند .
قسمت اول ، صورت دستورهاي برنامه منبع مي باشد كه ليست برنامه Program)
(Listing ناميده ميشود و قسمت بعد كه نقشه حافظه (Storage Map) ناميده ميشود
نحوه ذخيره اطلاعات در حافظه را نشان مي دهد . اگر مراحل ترجمه و اجراي برنامه نظر بلافاصله بعد از نقشه حافظه چاپ ميگردد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


انتقال كنترل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۵۸ مراجعه امروز
۴۶۷۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انتقال كنترل
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۴۷ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

انتقال كنترل

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور GO TO ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۶۱ مراجعه امروز
۴۶۷۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور GO TO
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۴۲ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور GO TO

دستور GO TO براي انتقال كنترل نامشروط بكار ميرود و صورت كلي آن بشكل GO TO n

مي باشد كه درآن n شماره دستوري است كه كنترل به آن انتقال ميشود . دستور شماره n
بايد حتما" دستور قابل اجرائي مانند دستور محاسباتي و دستور ورودي و خروجي
باشد و بنابراين كنترل را نميتوان به دستورهائي مانند دستور فرمت و دستور
پايان كه قابل اجرا نيستند منتقل نمود .
مثال 1- دستور زير سبب ميشود كه كنترل به جاي آنكه به دستور بعدي منتقل شود
به دستور شماره 7 انتقال يابد . GO TO 7

مثال 2- برنامه زير مجموع سه مقدار A و Bوو Cو را محاسبه و چاپ ميكند : C

و Bوو Aو(5(و1و) 3 READ 5 FORMAT( 3F10.2)
SUM = A + B + C
SUM
(10و 3و) WRITE 10 FORMAT( F20. 1)
GO TO 3
END

هر بار كه دستور خواندن اجرا ميگردد سه مقدار اعشاري Aو Bوو Cو از يك كارت
منگنه شده خوانده ميشود و پس از آنكه مجموع آنها محاسبه و چاپ شد دستور 3
GO TO سبب ميشود به جاي آنكه برنامه پايان پذيرد كنترل به دستور شماره 3
منتقل و كارت جديدي خوانده شود . اين عمل آنقدر ادامه پيدا ميكند تا تمام
كارتهاي داده ها كه در دنباله برنامه قرار داده شده اند خوانده شوند . اين عمل
تكرار كه در ضمن آن تمام يا قسمتي از برنامه تكرار ميگردد اصطلاحا" حلقه تكراري
(Iooping) ناميده ميشود . در برنامه فوق بعد از آنكه تمام كارتهاي داده ها
خوانده شد وقتيكه كنترل يك بار ديگر به دستور شماره 3 منتقل ميشود چون ديگر
كارتي وجود ندارد كه خوانده شود كامپيوتر پيغام خطائي كه نشان دهنده كمبود كارت
داده ها است چاپ ميكند و اجرائ برنامه در اثر بوجود آمدن اين خطا خودبخود متوقف
ميگردد . در برنامه فوق چون دستور توقف مورد نياز نبوده بكار نرفته است
(افزودن دستور توقف بعد از دستور GO TO 3 در بعضي كامپيوترها سبب چاپ پيغام
خطا ميگردد) .
بايد توجه داشت كه اولين دستور قابل اجرا بعد از دستور GO TO الزاما" بايد
داراي شماره دستور باشد تا بتوان كنترل را به آن منتقل نمود . و به همين سبب
در برنامه فوق اگر بعد از دستور GO TO 3 دستور توقف اضافه ميشد چون دسترسي به
آن امكان پذير نميبود پيغام خطائي در اين مورد چاپ ميشد .
مثال 3- دستورهاي زير را كه ممكن است جزئي از يك برنامه باشند در نظر
بگيرند :

GO TO 25
15 I = I + 1
I = I/2
25 K = 2*I

در اين چنانچه دستور I = I + 1 داراي شماره دستور نباشد اين دستور و دستور
بعد ازآن هيچگاه قابل دسترس نخواهد بود ، حال آنكه بصورت نشان داده شده ميتوان
با استفاده از شماره دستور 15 كنترل را از قسمتهاي ديگر برنامه به آن منتقل
نمود .
بايد در نظر داشت كه دستور پايان و لواينكه بعد از دستور GO TO قرار گرفته

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور IF محاسباتي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۶۴ مراجعه امروز
۴۶۸۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور IF محاسباتي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۰۴ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور IF محاسباتي

دستور IF محاسباتي (Arithmetic IF Statement) بر خلاف دستور GO TO دستور
انتقال كنترل مشروط است و صورت كلي آن بشكل n3
و n2و و n1و(a()IF
ميباشد كه در a ( كه آگومان دستور IF ناميده ميشود ) يك عبارت محاسباتي

مانند : A A - B 2.0*X + 3.0/C 2*K - 5

و غيره است و n1و n2وو n3و شماره دستورهاي قابل اجرائي هستند كه درجاهاي مختلف
برنامه قرار گرفته اند . چنانچه مقدار عدد آرگومان منفي باشد كنترل بلافاصله به
دستور شماره n1 منتقل ميشود و اگر مقدار آرگومان صفر و يا مثبت باشد كنترل به
ترتيب بدستورهاي شماره n2و n3و انتقال مييابد .
مثال 1- دستور IF محاسباتي زير را در نظر بگيريد : 15
و 10و 5و(I-(4() IF
اگر مقدار داخل پرانتز منفي باشد (يعني اگر مقدار Iاز 4ز كوچكتر باشد ) كنترل
بدستور شماره 5 منتقل ميگردد . چنانچه مقدار I مساوي 4 باشد آرگومان صفر بوده
كنترل به دستور شماره 10 منتقل ميشود و بالاخره هر گاه مقدار Iاز 4ز بزرگتر
باشد كنترل به دستور شماره 15 انتقال مييابد .
چنانچه در مورد دستور GO TO گفته شد اولين دستور قابل اجرائي كه بعد از
دستور IF محاسباتي قرار ميگيرد نيز بايد داراي شماره دستور باشد تا بتواند
كنترل را به آن منتقل نمود .
اگر در يك دستور IF محاسباتي عدد n1و n2وو n3و متفاوت باشد دستور IF تشكيل
يك انشعاب سه شاخه ميدهد يعني تحت سه شرط مختلف كنترل و سه قسمت مختلف برنامه
منتقل ميگردد . ممكن دربعضي حالتهاي خاص انشعاب دو شاخه باشد يعني دو تا از
سه عدد n1و n2وو n3و برابر باشند و فقط دو حالت متفاوت براي انتقال وجود داشته
باشد .
مثال 2- دستور IF محاسباتي زير را در نظر بگيريد : 6
و 7وو 6و(A*B() IF
اگر آرگومان مثبت يا منفي باشد ، كنترل به دستور شماره 6 منتقل ميشود و اگر
آرگومان صفر باشد كنترل به دستور شماره 7 انتقال مييابد .
مثال 3- در دستورهاي زير وقتي اجرائ برنامه متوقف ميشود مقدار X چقدر خواهد

بود ? N = 1
X = 1.0
1 X = X + X
N = N + 1
2
و 1وو 1و(3(- N-) IF 2 STOP

با كمي دقت ميتوان ملاحظه نمود وقتيكه كنترل براي اولين بار بدستور IF ميرسد 0
.َX = 2و N = 2و است و چون دراين حالت Nاز 3ز كوچكتر ميباشد ، آرگومان منفي
بوده ، كنترل به دستور شماره 1 منتقل ميگردد و چون مقدار قبلي X برابر 2 بوده
است مقدار جديد X مساوي 4 خواهد بود . دراين موقع مقدار جديد N برابر 3 ميشود
و بنابراين آرگومان صفر گشته ، كنترل دوباره به دستور شماره 1 منتقل ميگردد .
اين بار مقدار جديد X برابر 8 و مقدار جديد N برابر 4 مي باشد . در اين حالت
آرگومان مثبت گشته ، كنترل به دستور شماره 2 منتقل و اجرائ برنامه متوقف ميگردد
و در نتيجه مقدار نهائي X برابر 8 خواهد بود .
در برنامه فوق ميتوان عمل حلقه تكرار را كه قبلا" به آن اشاره شد ملاحظه
نمود . در اين مورد خاص ، قسمتي از برنامه كه شامل دستور شماره 1 تا دستور IF
ميشود ، سه بار تكرار گرديده است .
مثال 4- برنامه ئي بنويسيد كه دو مقدار Xو Yو را از يك كارت داده ها بخواند
و بزرگترين آن دو را تعيين و چاپ نمايد .
اين برنامه را ممكن است بصورت زير نوشت : Y

و Xو (15و 1و) READ 1 2 15 FORMAT( 2F10.2)
25
و 20 و 20(Y(- X-) IF) 3 Y
(15و 3و) WRITE َ20 4 5 GO TO 30
X
(15و 3و) WRITE َ25 6 7 30 STOP
8 END

براي آنكه بتوان برنامه فوق را مورد بحث قرار دارد ، دستورهائي نوشته شده
بترتيب از 1تا 8ا شماره گذاري شده اند . البته واضح است كه اين شماره هاجزئي از
برنامه نبستند و نبايد آنها را با شماره دستور اشتباه كرد .
بكمك دستور 1 مقدار عدد دو متغير اعشاري Xو Yو خوانده ميشود .
دستور 2 نشان ميدهد كه لازم است مقادير X و Yو روي يك كارت داده ها بترتيب
بين ستونهاي 1 و 10 و بين ستونهاي 11 و 20 منگنه شده باشد و بنابراين قبل از
اجرائ برنامه چنين كارتي بايد تهيه و به عنوان كارت داده ها به كامپيوتر داده
شود .
دستور 3 مقدار عدد Xو Yو را مقايسه ميكند . اگر Y بزرگتر از X باشد Y جواب
مورد نظر است كه بايد چاپ شود و چون در اين حالت آرگومان منفي است كنترل به
دستور شماره 20 منتقل و مقدار Y چاپ ميگردد . چنانچه X بزرگتر از Y باشد X
جواب مورد نظر است و چون در اين حالت آرگومان مثبت ميباشد كنترل بدستور شماره 25
انتقال مييابد و مقدار X چاپ ميشود . چنانچه Xو Yو برابر باشند ميتوان
مقدار هر يك را بعنوان جواب مورد نظر چاپ نمود و بنابراين براي حالتي كه
آرگومان صفر است ميتوان شماره دستور 20 يا 25 را قرار دارد ( دربرنامه فوق
شماره دستور 20 استفاده شده است ) .
دستور 5 بدين سبب منظور شده كه اگر دستور4 اجرا و مقدار Y چاپ شود نتيجه
مطلوب حاصل شده است و مقدار X نبايد چاپ گردد و بنابراين در اين حالت بكمك
دستور GO TO 30 كنترل به دستور شماره 30 انتقال مييابد و كامپيوتر متوقف
ميشود .
ميتوان ملاحظه نمود كه در دستورهاي 4و 6و براي چاپ هر يك از مقادير Xيا Yا
از فرمت شماره 15 كه بصورت 2.َ2F10 ميباشد استفاده شده است . گرچه امكان داشت
در هر يك از دستورهاي شماره 20 و 25 از فرمت هاي جديد استفاده شود ليكن براي
مقصود مورد نظر ميتوان فرمت شماره 15 را بكار برد زيرا در هر يك از اين دو
دستور فقط يك متغير در ليست مربوطه وجود دارد ، حال آنكه در فرمت شماره 15 دو
ميدان منظور شده است ودرواقع استفاده از فرمت شماره 15 در مورد دستورهاي شماره 20
و 25 مانند استفاده از يك ميدان 2.َF10 ميباشد .

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

Y
و Xو (15و 1و) READ 15 FORMAT( 2F10.2)
25
و 20 و 20(Y(- X-) IF) 20 A = Y
GO TO 30
25 A = X
A
(15و 3و) WRITE 30 STOP
END

واضح است كه در اين برنامه ابتدا هر يك از دو متغيير Xو Yو كه بزرگتر باشد
در محلي ازحافظه كه A ناميده ميشود قرار داده ميشود و سپس با استفاده از دستور
شماره 30 مقدار A كه جواب مسئله است چاپ ميگردد .
يادآوري - در بعضي از مسائل ممكن است يكي از حالات انشعاب سه گانه هيچگونه تحقق
نيابد . در چنين مواردي باز هم لازم است كه سه عدد n1و n2وو n3و نوشته شود .
مثلا" دردستور 50 و 20 و 30(1.0(- (X()SIN) IF چون مقدار (X) SIN هرگز نميتواند
از 1.0 بزرگتر باشد پس حالتيكه آرگومان مثبت باشد هيچگونه اتفاق نميافتد و
بنابراين كنترل هرگز به دستور شماره 50 منتقل نميشود ولي بااين حال بايد دستور
قابل اجرائي با شماره 50 در برنامه وجود داشته باشد . در اين مثال ميتوان بجاي
شماره 50 هريك از شماره هاي 20 ، 30 و ياهر شماره دستور قابل اجرائ ديگري را كه
در برنامه وجود داشته باشد نوشت ، اما همواره بايد توجه نمود كه براي هر شماره د ، دستوري به آن شماره بايد در برنامه وجود

کيفيت مقاله :
عالی خوب متوسط ضعيف


ميدان E ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۶۷ مراجعه امروز
۴۶۸۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ميدان E
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۶۱ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

ميدان E

براي انتقال ثابتهاي اعشاري نمائي كه قبلا" مورد بحث قرار گرفت ميتوان از
ميدان E استفاده نمود . صورت كلي ميدان E بشكل Ew . d

مي باشد كه در آن w عدد صحيحي است كه نشان دهنده طول ميدان است و شامل علامت
مميز ، نما وجاهاي خالي ميگردد و d عدد صحيحي است كه تعداد رقم هاي بعد از مميز
را نشان مي دهد .
مثال 1- حداقل لازم براي انتقال ثابت اعشاري 11 - x 10 َ393.َ12- كه در فرترن
بصورت 11 - 393E.َ12- نوشته ميشود ، 3.َE11 است . بايد توجه داشت كه صورت كلي
نمائي ثابتهائي كه بكمك ميدان E منتقل ميشود بشكل ee
مثبت و منفي E
ميباشد كه در آن ee نشان دهنده يك عدد صحيح دو رقمي است . مثلا" اگر نماي عددي 25
باشد بصورت E + 25 و اگر 7- باشد بصورت 07 َE-0 انتقال داده ميشود .
براي نشان دادن نمائي داده هائي كه با ميدان E خوانده ميشوند تسهيلاتي در
زبان فرترن در نظر گرفته شده است . مثلا" ميتوان علامت + را حذف نمود و بجاي آن
يك جاي خالي در نظرگرفت و يا اصولا جاي آنرا كاملا" حذف كرد و بنابراين E + 12
را ميتوان بصورت Eb12 يا E12 روي كارت منگنه نمود . بعلاوه در مورد نماهاي يك
رقمي ، صفر قبل از نما را مي توان حذف نمود و بنابراين E + 07 را ميتوان بصورت 7
E +يا E 7ا منگنه گرد . بالاخره اگر علامت نما نشان داده شود ، مي توان حرف E
را حذف نمود . مثلا" َE + 07 را ميتوان بصورت +7 منگنه گرد . بايد توجه داشت كه
چون در مورد ميدان E جاهاي خالي بعد از نما بعنوان صفر محسوب خواهد شد لازم است
كه نما در منتهي اليه سمت راست مقادير ورودي قرار گيرد .
مثال 2- صورتهاي زير ، صورتهاي قابل قبول براي خواندن نماي +3 ميباشد :

E + 03 Eb03 E03 E + 3 E3 +3

در هر يك از موارد فوق رقم 3 بايد درستون آخر ميدان قرار بگيرد .
صورت كلي داده هاي خروجي انتقال يافته بكمك ميدان E بشكل ee
مثبت و منفي E..0.nn. مثبت و منفي
است كه در آن ...0.nn جزئ اعشاري كميت انتقال يافته و ee نماي متناسب مربوطه
ميباشد . كميتهاي خروجي انتقال يافته بكمك ميدان E نيز مانند ميدان هاي Iو Fو
در منتهي اليه سمت راست ميدان تعيين شده قرار ميگيرد و همچنين اگر علامت عدد
انتقال يافته مثبت باشد علامت + نشان داده نخواهد شد .
مثال 3- عدد 2.4493849 - با ميدان F12 به صورت + 01 b-020.2449E و عدد 13
به توان x 10 َ0.024 با ميدان 2.َE10 بصورت bb0.24Eb12 در روي كاغذ چاپ نشان
داده ميشود .
چنانچه مقادير A و Bو بترتيب برابر 1.3496- و 0.01814 باشند ، دستور چاپ
زير اين مقادير را بصورت نشان داده شده چاپ خواهد كرد : B

و Aوو Aو (50و 3و) WRITE
(َ3.َ2E12و 5و.َE13) FORMAT َ50 ''-'0'.'1'3'4'9'6'E''0'1'''-'0'.'1'3'5'E'''0'1''''0'.'1'8'1'E'-'0'1'
|
>12< | >12< | >13< |

معمولا" اعداد بسيار بزرگ و كوچك و كميتهائي كه از مقدار آنها اطلاع كافي در يشود .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ميدان X ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۷۰ مراجعه امروز
۴۶۸۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ميدان X
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۷۲ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

ميدان X

ميدان X كه ميدان خالي (Blank Field) نيز ناميده ميشود براي خالي گذاردن
تعدادي از ستونهاي يك سطر كاغذ چاپ بكار ميرود و صورت كلي آن بشكل w X

ميباشد كه در آن w عدد صحيح بدون علامتي است كه تعداد جاهاي خالي ايجاد شده را
نشان ميدهد . در دستورهاي ورودي ، ميدان X براي ناديده گرفتن ستونهاي معيني از
كارت داده ها بكار ميرود .
مثال 1- چنانچه بخواهيم عبارت TABLE 12 را در وسط سطر كاغذ چاپ كنيم بفرض
آنكه هر سطر كاغذ چاپ داراي 132 باشد ، عبارت مورد نظر بايد بين ستونهاي 63 و 70
چاپ نمود وبنابراين لازم است كه 62 ستون اول سطر خالي بماند و فرمت مورد نظر
بصورت زير خواهد بود :
(َ7500و 3و) WRITE
(َ8HTABLE 12 و 62X) FORMAT َ7500
بايد متذگر گرديد كه در دستور فرمت فوق كاماي بعد از 62X را ميتوان حذف نمود .
مثال 2- اگر بخواهيم از روي كارت داده ها دو كميت Aو Bو را كه با ميدانهاي 2
.َF10 بترتيب در ستونهاي 21 تا 30 و 41 تا 50 منگنه شده اند بخوانيم ميتوان
دستورهاي لازم را بصورت زير نوشت : B
و Aو (105و 1و) READ
(َ2.َF10 و 10Xو 2و.َF10 و 20X) FORMAT َ105
ممكن است در ستونهاي 1 تا 20 و 31 تا 40 كارت داده ها مورد نظر اطلاعاتي منگنه كه البته توسط دستورهاي فوق خوانده نخواهد شد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


جدا كردن ميدانها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۷۳ مراجعه امروز
۴۶۸۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
جدا كردن ميدانها
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۴۶ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

جدا كردن ميدانها

براي جدا كردن ميدانهاي مختلف يك دستور فرمت ، از علامتهاي كاما (/) و اسلش
(/) استفاده ميشود كه ميدان جدا كننده (Field Separators) ناميده ميشوند .
همانطور كه قبلا" ديده ايم در عمل ، ميدانهاي جدا شده بكمك كاما پششت سر هم روي
يك كارت يا يك سطر قرار ميگيرند ، حال آنكه ميداني كه در دستور فرمت بعد از
علامت / نوشته ميشود درابتدائ كارت يا سطر بعد قرار ميگيرد . كاربرد علامت / در
مثالهاي زير نشان داده شده است .
مثال 1 - دستورهاي زير را در نظر بگيريد :

(َ25و 3و) WRITE
(1HB و 9Xو 1HXو و 9X) FORMAT َ25

دستور فوق سبب ميشود كه حرف Aو Bو روي يك سطر بترتيب در ستونهاي 10 و 20 چاپ
گردند . حال آنكه دستور فرمت فوق بصورت زير نوشته شود :
(1HB و 9X 1HA و 9X) FORMAT 25
بعد از چاپ شدن A در ستون 10 علامت / سبب ميشود كه كنترل چاپ به اول سطر بعد
منتقل گردد و بعد از خالي گذاشتن 9 ستون اول B را در ستون 10 (يعني زير A) چاپ
نمايد .
چنانچه در دستور فرمت دوم بجاي يك علامت / دو علامت / متوالي بكار ميرفت بين
خطوطي كه حروف Aو Bو روي آن چاپ شده بودند يك سطر خالي فاصله ميبود و بطور كلي
هر گاه علامت / در بين ميدانهاي فرمت ، n بار پشت سر هم تكرار گردد اعداد 1- n-
سطر خالي بين دو سطر چاپ قبلي و بعدي (و يا در مورد دستورهاي ورودي ، تعداد 1
- n- كارت خوانده نشده بين كارتهاي خوانده شده قبلي و بعدي ) وجود خواهد
داشت . حال آنكه اگر تعداد n علامت / قبل از اولين و يا آخرين ميدان يك دستور
فرمت قرار گيرند دراغلب كامپيوترها تعداد n سطر خالي بين دوسطر چاپ قبلي وبعدي
( و يا در مورد دستورهاي ورودي تعداد n كارت خوانده نشده ) وجود خواند داشت .
مثال 2 - دستور زير را در نظر بگيريد : L
و Kوو Jوو Iو (100و 1و) READ
(َ15/15 و 15/50X و 15/50X) FORMAT َ100
دستورهاي فوق سبب ميشود كه مقدار I از ستونهاي 1تا5ا كارت اول و مقدار J از
ستونهاي 51 تا 55 كارت دوم مقدار K از ستونهاي 51 تا 55 كارت سوم و مقدار L
ستونهاي 1تا 5ا كارت چهارم خوانده شوند .
دستور فرمت فوق را بصورت زير نيز ميتوان نوشت :
(َ15 و (15/ و 50X)َ15/2) FORMAT َ100
كه در آن ميدانهاي 15/ و 50X دوباره متوالي مورد استفاده قرار خواهد گرفت .
چنانچه در اين مثال مقدار L نيز بين ستونهاي 51 تا 55 منگنه شده بود ، دستور
فرمت فوق بصورت زير در ميايد :
(َ15 و 15/50X و 15/50X و 15/50X) FORMAT 100
كه ميتوانستيم آنرا بصورت ساده شده زير نيز بنويسيم :
((15 و 15X)15/) FORMAT َ100
در چنين مواردي قاعده كلي آن است كه هرگاه تعداد متغيرهاي ليست دستور ورودي
يا خروجي ازتعداد ميدانهاي دستور فرمت بيشتر باشد ، براي تامين ميدانهاي مورد
لزوم ليست از ميدانهاي داخل آخرين پرانتز باز شده سمت راست به تعداد مورد نياز
استفاده ميگردد . بايد توجه داشت هر با كه ازاولين ميدان داخل پرانتز مورد نظر
استفاده ميگردد يك كارت جديد داده ها (و يا در مورد چاپ يك سطر جديد) بكار
ميرود .
مثال 3 - به منظور خواندن مقادير Aو Bوو Cو ازسه كارت دادهاي متوالي ميتوان
از هر يك از دو دستور فرمت نشان داده شده در زير استفاده كرد :

C و Bوو Aو ( 40و 1و) READ 40 FORMAT( F10.2/F10.2/F10.2)
C
و Bوو Aو و (50و 1و) READ 50 FORMAT( F10.2)

مثال 4 - برنامه زير عدد صحيحي راازيك كارت منگنه شده ميخواند وپس از تعيين
اينكه آيا عدد خوانده شده مثبت ،و منفي و يا صفر است ، آن را همراه با عبارت
مناسبي چاپ مينمايد .

C EXAMPIE 6.14 -DETERMINE POSITVE AND
C NEGATIVE VUMBERS

(َ10و 1و) READ 10 FORMAT( I6)
35
و 25 و 15(N() IF N
(20و 3و) WRITE 15 IS NEGATIVE
12H و 3Xو I6و و 20X) FORMAT 20 GO TO 45

(َ30و 3و) WRITE 25
(N IIS ZZERO 10H و 26X) FORMAT 30 GO TO 45
N
(40و 3و) WRITE 35
(IS PPOSITIVE 12H و 3Xو I6و و 20X) FORMAT 40 45 STOP
END

در موقع اجراي اين برنامه بايد يك كارت داده هاكه مقدارN مطابق فرمت شماره 10
روي آن منگنه شده است تهيه وهمراه برنامه درقسمت داده ها به كامپيوتر داده شود.
مثال 5 - براي تعيين اينكه عدد صحيح زوج يا فرد است ميتوان آن را بر عدد 2
تقسيم و سپس در عدد صحيح 2 ضرب نمود . چنانچه عدد مورد نظر زوج باشد حاصل
مساوي خود عدد و اگر عدد مورد نظر فرد باشد نتيجه يك واحد كوچكتر از خود عدد
خواهد بود . برنامه زير تعيين ميكند كه آيا عدد N زوج است يا فرد .

C EXAMPLE 6.15 - DETERMINE ODD AND EVEN
C NUMBERS
N
(2و 1و) READ 1 2 FORMAT( 15)
M = N/2*2
3
و 5وو 3و(N(- M-) IF N
(4و 3و) WRITE 3
(IS OODD 7H و 15 و 54X) FORMAT 4 GO TO 1
N
(6و 3و) WRITE 5
(IS EEVEN 8H و 15 و 54X) FORMAT 6 GO TO 1
END

بطوريكه ملاحظه ميشود برنامه فوق طوري نوشته شده كه ميتوان تعداد نامعيني
كارت منگنه شده را هر يك حاوي يك عدد صحيح است و زوج يا فرد بودن هر عددرا تعيين
نمود . براي خواندن هر كارت جديد دستور GO TO 1 كنترل را به دستور شماره 1
انتقال ميدهد و اين عمل آنقدر تكرار ميگردد تا ديگر كارتي براي خواندن وجود
نداشته باشد و بنابراين بدين وسيله اجرائ برنامه متوقف ميشود و نيازي به دستور
توقف نخواهد بود .
مثال 6 - برنامه زير هزينه فرستادن تلگرافي را كه داراي N كلمه است محاسبه
و چاپ ميكند . در اين برنامه فرض شده كه هزينه فرستادن تلگراف براي 15 كلمه
اول 40 ريال و براي هر 5 كلمه اضافي يا كسر آن 10 ريال ميباشد . بعنوان مثال
اگرتلگرافي 23 كلمه داشته باشد ، 15 كلمه اول آن 40 ريال ، 5 كلمه بعدي 10 ريال
و 3 كلمه بعد نيز 10 ريال هزينه خواهد داشت و بنابراين هزينه چنين تلگرافي 60
ريال خواهد بود . توصيه ميشود كه خواننده براي حالتهائي كه N برابر با 14 و 15
و 16 و غيره است درستي محاسبات برنامه را كنترل نمايد .

C EXAMPIE 6.16 - SENDING A TELEGRAM
N
(100و 1و) READ 100 FORMAT( 13)
300
و 200 و 200 (15 َN-1) IF 200 COST = 40
GO TO 400
300 EXTRA =( N - 16)/5 + 1
COST = 40 .+ EXTRA*10.
COST
و Nو (500و 3و) WRITE َ400
(RIALS 6H 1 .WORDS CCOSTNG 11F7 14Hو I3و و 10Xو 1H1و) FORMAT َ500 STOP
END

مثال 7 - برنامه زير مجموع سري اعداد صحيح از1 تا15 رامحاسبه وچاپ مينمايد.
دراين برنامه حاصل جمع جمله هاي سري مزبور در محلي از حافظه بنام ISUM و مقدار
هر جمله سري درمحلي بنام ITERM ذخيره ميگردد . ابتدا مقدار ISUMو ITERMو برابر
صفر قرار داده ميشوند . هر جمله جديد سري مورد نظر با افزودن يك واحد به مقدار
جمله قبلي (كه ITERM ناميده شده ) بدست ميايد و جايگزين مقدار جمله قبلي ميگردد
(يعني جمله جديد نيز ITERM ناميده ميشود) مقدار جمله جديد به مجموع جملات قبلي
اضافه و حاصل جديد دوباره ISUM ناميده ميشود وپس از آن كه اين عمل 15 با تكرار
شد مقدار ISUM برابر مجموع سري مورد نظر خواهد بود .

C EXAMPLE 6.17 - SUM OF INTEGERS 1 TO 15
ISUM = 0
ITERM = 0
7 ITERM = ITERM + 1
ISUM = ISUM + ITERM
8
و 8وو 7و (15 َITERM-1) IF ISUM
(9(و 3و) WRITE 8
(َ14و ISUM =و 7H و 30Xو 1H1و) FORMAT 9 STOP
END

ملاحظه ميشود كه چون در مثال فوق ميتوان مقدار جمله هاي سري مورد نظر را
مستقيما" توسط برنامه نوشته شده توليد كرد ، نيازي به خواندن اين مقادير نيست
مثال 8 - برنامه زير مجموع 10 جمله اول سري
(َ1 بروي 2 x 1) و (1 بروي 3 x 2) و (1 بروي 4 x 3) و ... و (1 بروي x10 َ11)

را محاسبه و چاپ مينمايد . گرچه هر جمله اين سري حاصل تقسيم دو كميت صحيح
ميباشد ليكن چون مقدار جمله يك كميت اعشاري است لذا در برنامه زير مجاسبات در
مود اعشاري انجام گرفته است . براي كنترل نتيجه بدست آمده ميتوان توجه نمود كه
حاصل جمع مورد نظر بايد برابر (N + 1)N) باشد كه در آن N تعداد جمله هاي جمع
شده است .

C EXAMPLE 6.18 - COMPUTING A SERIES
SUM = 1./(1 .* 2).
I = 2
5 A = I
SUM = SUM + 1./(A*(A+ 1)).
I = I + 1
15
و 5وو 5و (10 َI-1) IF SUM
(25و 3و) WRITE 15 25 FORMAT( F20.4)
STOP
END

مثال 9 - برنامه زير مقدار e را با استفاده از فرمول
... + (3! بروي 1) + (2! بروي 1) + (1! بروي 1) e = 1 +
محاسبه و چاپ مينمايد . البته معمولا" هر چند تعداد جمله هاي جمع شده بيشتر باشد
دقت محاسبه بيشتر خواهد بود . در اين برنامه فرض شده است كه اگر مقدار جمله اي
از 6 - 10 كوچكتر باشد ميتوان او افزودن آن صرفنظر كرد . بعلاوه بايد توجه كرد
كه فاكتوريل هر عدد برابر است با فاكتوريل عدد ما قبل آن ضربدر آن عدد . در
برنامه زير فاكتوريل هر عدد FACT ناميده شده است .

C EXAMPIE 6.19 - COMPUTING E
E = 1.
A = 1.
FACT = 1.
20 FACT = FACT*A
30
و 30 و 40(9( - TERM-101.0E) IF 30 E = E + TERN
A = A + 1.
GO TO 20
40 WRITE( 3 50 )E
50 FORMAT( E20.7)
STOP
END

مثال 10 - برنامه زير عدد 3/14 را با استفاده از سري
(... 7 + بروي 1 منهاي 5 بروي 1 بعلاوه 3 بروي 1 منهاي 1) = 4 َ3/14
محاسبه و در عنوان مناسبي چاپ مينمايد . ازآنجا كه علامت جمله ها بطور متناوب
مثبت و منفي است در برنامه زير متغيري بنام A بكار برده شده كه مقدار آن بطور
متناوب + 1و 1و - است و بنابراين ضرب كردن A در جمله هاي سري فوق علامتهاي مورد
نظر را تامين مينمايد . تعداد جمله هاي مورد نظر براي محاسبه از يك كارت منگنه
شده خوانده مي شود .

C EXAMPLE 6.20 - COMPUTING PI
READ( 1 1 )N
1 FORMAT( 16)
PI = 1.
A =- 1.
I = I
2 I = I + 1
IF( I - N )3 3 4
3 B = 2*I-1
PI = PI + A/B
A = - A
GO TO 2
4 PI = 4.*PI
N PI
(5(و 3و) WRITE Iو USING FIRSTو و 12H و 20Xو 1H1و) 5 FORMAR

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور DO ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۷۶ مراجعه امروز
۴۶۹۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور DO
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۱۳ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور DO

صورت كلي دستور DO بشكل m3
و m2وو DO n i = m1و
ميباشد كه درآن : n
شماره دستور قابل اجرائ است كه انتهاي حلقه DO را مشخص مينمايد . حلقه DO
شامل تمام دستورهائي است كه از دستور DO شروع و به دستور شماره ختم ميگردد . i
يك متغير صحيح بدون علامت است كه شاخص دستور DO، (DO Index() ناميده ميشود . m1
، m2،، m3، اعداد صحيح يا متغيرهاي صحيح بدون علامتي هستند كه به ترتيب مقدار
ممكنه شاخص و نمو را نشان ميدهند .
مثال 1 - در حلقه 3
و 50و K = 5و DO 999 >
|
|
| حلقه DO
|
| 99
>
شاخص حلقه متغير صحيح K ، مقدار اوليه شاخص 5 ، نمو شاخص 3 و حداكثر مقدار
ممكنه آن 50 ميباشد . دستور شماره 99 انتهاي حلقه DO را مشخص ميسازد .
دستورهاي داخل DO با توجه به مقادير m1، m2،، m3، چندين بار تكرار ميشود .
بدين ترتيب كه بار اول مقدار شاخص برابر m1 قرار داده ميشود سپس هر بار كه حلقه DO
تكرار ميشود شاخص i به اندازه نمو m3 اضافه ميگردد و كنترلي از نظر اينكه
مقدار شاخص از m2 تجاوز ننمايد انجام ميگيرد . هنگامي كه i بزرگتر از m2 گردد
كنترل اجراي عمليات به اولين دستور بعد از دستور شماره n منتقل ميگردد و گويند
حلقه DO كامل شده است .
مثال 2 - برنامه زير مجموع اعداد فرد را از يك تا 100 محاسبه و چاپ ميكند .

JSUM = 0
2
و 100و K = 1و َDO 17 17 JSUM = JSUM + K
JSUM
(20و 3و) WRITE 20 FORMAT( 110)
STOP
END

دراين برنامه ابتدا مقدار متغير JSUM ، كه مجموع مورد نظر را نشان ميدهد
برابر صفر قرار داده ميشود . دستور DO عدد فردي را كه بايد جمع گرداند بوجود
مياورد و آنها را برابر متغير K قرار ميدهد . به اين ترتيب كه ابتدا متغيرK
را برابر مقدار اوليه قرار ميدهد و كنترل به دستور بعدي كه دستور شماره 17 است
منتقل ميشود و در اينجا مقدار K به مقدار قبلي JSUM اضافه ميشود و چون دستور
شماره 17 آخرين دستور حلقه DO است كنترل به دستور DO برگشته و مقدار نمو را به
به مقدار قبلي K اضافه ميكند و سپس آن را با JSUM قبلي جمع مينمايد . اين عمل
آنقدر تكرار ميشود تا اينكه مقدار K از حداكثر ممكنه ( كه دراينجا 100 است )
تجاوز كند دراينصورت كنترل به دستور بعدي كه دستور WRITE ميباشد انتقال مييابد
و مجموع محاسبه شده چاپ ميگردد .
توضيح - اگر مقدار نمو دستور DO برابر1 باشد ميتوان ازنوشتن آن صرفنظر كرد.
مثال 3 - براي محاسبه فاكتوريل عدد N ،

N! = 1 x 2 x 3 x .. x N

ميتوان از يك حلقه DO بصورت زير استفاده نمود .

NFACT = 1
N
و J = 2و َDO 45 45 NFACT = NFACT * J

دراين دستور DO ، مقدار m3 نوشته نشده است بنابراين مقدار آن برابر يك درنظر
گرفته ميشود . درهر بار اجراي حلقه DO ، مقاديرJ بترتيب برابربا2، 3، 4، ..و N
منظور گشته و در هم ضرب ميشوند تا اينكه فاكتوريل عدد N بدست آيد .
توضيح - لزومي ندارد كه مقدار شاخص i در داخل حلقه DO بكار برده شود .
مثال 4 - برنامه زير را در نظر بگيريد . 100

و K = 1و َDO 16 Y
و Xو (25و 1و) READ 25 FORMAT( 2F 10 .4)
Z = X + Y
Z
(20و 3و) WRITE َ16 20 FORMAT( F10.3)
STOP
END

در برنامه فوق 100 جفت مقادير Xو Yو از روي 100 كارت داده ها خوانده شده و
جمع هر جفت ازاين اعداد محاسبه و چاپ ميشود . چنانچه مشهود است دراين حلقه DO رفته است و K تنها عمل يك شمارنده را انجام ميدهد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


حلقه هاي DO متداخل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۷۹ مراجعه امروز
۴۶۹۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
حلقه هاي DO متداخل
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۳۸۳ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

حلقه هاي DO متداخل

چند حلقه DO را ميتوان در داخل يكديگر بكار برد و در اينصورت آنها را
حلقه هاي متداخل (Nested DO Loops) مينامند . حلقه هاي DO متداخل نمي توانند
يكديگر را قطع كنند و بعبارت ديگر آخرين دستور حلقه دروني يا بايد همان آخرين
دستور بيروني آن باشد و يا اينكه قبل از آن دستور قرار گرفته باشد .
در حلقه هاي DO متداخل ، عمليات با مقدار اوليه شاخص حلقه بيروني شروع ميشود
و پس از ورود كنترل به حلقه دروني اين حلقه بطور كامل اجرا ميگردد . موقع ترك
حلقه دروني عمليات باز هم با همان مقدار اوليه شاخص حلقه بيروني ادامه پيدا
ميكند تا به آخرين دستور حلقه بيروني برسد . هنگاميكه شاخص حلقه بيروني دومين
مقدار خود را دارا ميشود مجددا" حلقه دروني بطور كامل اجرا ميگردد . بهمين
ترتيب در ازائ هر مقدار شاخص حلقه بيروني حلقه دروني بطور كامل اجرا ميگردد
تا اينكه حلقه بيروني نيز كامل گردد .
مثال - در برنامه زير دو حلقه DO متداخل بكار رفته است .

DO 17 JN = 1 / 10
XJ = JN
DO 17 ID = 1 / 10
XI = ID
A = XJ / XI
WRITE( 3/90 )JN / ID / A
90 FORMAT( 214 / F10 .5)
17 CONTINUE
STOP
END

در اينجا برنامه با JN = 1 شروع ميشود سپس مقدار XJ = 1.0 ميگردد . با اين
مقادير كنترل به حلقه دروني منتقل ميشود و مقدار ID را از يك شروع كرده تا اين
كه حلقه دروني كامل گردد يعني مقادير .2 بروي .A = 1 ، ... و .10 بروي .A = 1)
و (.1 بروي .A = 1 حساب كرده و چاپ مينمايد . در اين هنگام كنترل به حلقه DO
بيروني انتقال يافته وبا مقادير JN = 2و XJ = 2/0و كنترل دوباره به حلقه دروني
منتقل ميشود تا اينكه حلقه دروني دوباره كامل شود . پس در مرحله دوم مقادير 1

بروي .A = 2،.2، بروي .A = 2 ،..... و.10 بروي .A = 2 حساب شده و چاپ
ميگردد . بدين ترتيب برنامه فوق ، جدولي ازنسبت دو عدد كه هر كدام ميتوانند از
کيفيت مقاله :
عالی خوب متوسط ضعيف


متغيرهاي زير نويس دار ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۸۲ مراجعه امروز
۴۶۹۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
متغيرهاي زير نويس دار
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

متغيرهاي زير نويس دار

در بسياري از مسائل براي كار كردن با كميتهائي كه خواص مشابه دارند و اغلب
لازم است عمليات مشابهي روي آنها انجام گيردازمتغيرهاي زيرنويس دارSubscripted)
(Variables استفاده ميشود و علت آن تسهيلاتي است كه ازلحاظ انجام عمليات مشابهه
يا مختصر كردن يك سري عمليات در موقع برنامه نويسي در زبان فرترن گنجانيده ده است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


رشته ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۸۵ مراجعه امروز
۴۷۰۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
رشته ها
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۰۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

رشته ها

دسته اي از كميتها كه خواص مشابهي دارند و بصورت يك دنباله نوشته ميشوند
رشته (Array) و هر يك از اين كميتها را عنصر رشته مي نامند . هر رشته معمولا" با
يك اسم مشخص ميشود و بسته به طرز تنظيم عناصر در يك رشته ميتوان رشته هاي يك
بعدي ، و دو بعدي و يا چند بعدي بوجود آورد . رشته يك بعدي دسته اي از كميتها
است كه عناصر آن بصورت يك سطر يا يك ستون مرتب شده اند . رشته دوبعدي دسته اي از
كميتها است كه عناصر آن بصورت سطر ياستونها مرتب شده است . معمولا" در محاسبات
رياضي ، رشته يك بعدي را بردار (Vector) و رشته دو بعدي را ماتريس (Matrix)
مي نامند .
مثال 1- كميتهاي نشان داده در زير ، نمرات امتحاني درس معيني رانشان ميدهند 57
، 72 ، 38 ، 95 ، 62 ، 47 ، 25 ، 93 ، 74 ، 88
اين كميتهارا ميتوان بصصورت يك رشته تلقي كرد و آن را با نام G مشخص نمود.
عناصر رشته با ضميمه كردن عدد صحيحي مانند i به نام رشته كه زيرنويس يا انديس
(Index) گفته ميشود مشخص ميگردند . بنابراين G1 نشان دهنده اولين عنصر رشته
يعني 88و G8و مشخص كننده هشتمين عنصر رشته يعني 38 ميباشد .
مثال 2- كميتهاي جدول ( الف ) را ميتوان بعنوان عناصر يك رشته دو بعدي تلقي
كرد . ممكن است ستونهاي اين جدول نشان دهنده شهرهاي مختلف باشد مانند تهران ،
تبريز ، اصفهان و سطرهاي آن نشان دهنده نفع حاصل از فروش محصولات معيني از
قبيل يخچال ، كولر ، و اجاق گاز در اين شهرها بر حسب هزار ريال در عرض يكسال
باشد .
جدول ( الف ) رشته دو بعدي

|
ستون 3 | ستون 2 | ستون 1 | رديف |
|
800 | 8 1000 | 1 1500 | 1 رديف 1 | |
| 101700 1500 | 1 1800 | 1 رديف 2 | |
500 | 5 900 | 700 | رديف 3 | |
| 101300 1900 | 1 1600 | 1 رديف 4 |

اگر اين رشته را S بناميم ميتوان عناصر آنرا با ضميمه كردن دو زيرنويس به
صورت jو Siو مشخص كرد . زيرنويس اول يعني عدد صحيح i شماره رديف و زيرنويس
دوم يعني عدد صحيح j شماره ستون محل عنصر را تعيين ميكند . معمولا" وقتي محل
يك عنصر را در رشته دو بعدي مشخص ميكنيم ابتدا شماره رديف و سپس شماره ستون آن
را نام ميبريم . بنابراين 2وS1و كميتي را كه در رديف اول و ستون دوم قرار دارد
يعني عدد 1000و 3وو S4و كميتي را كه در رديف چهارم و ستون سوم قرار دارد يعني

کيفيت مقاله :
عالی خوب متوسط ضعيف


نمايش رشته ها در فرترن ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۸۸ مراجعه امروز
۴۷۰۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نمايش رشته ها در فرترن
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۵۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

نمايش رشته ها در فرترن

براي نشان دادن يك رشته در فرترن بايد از نام يك متغير استفاده كرد . اگر
تمام عناصر يك رشته اعشاري باشند بايد نام آن رشته بصورت اعشاري و اگر همه
اعداد صحيح باشند بايد بصورت صحيح انتخاب گردد . واضح است كه چون نام انتخاب
شده رشته بطور كلي مود تمام عناصر را نشان ميدهد ، لازم است كه تمام عناصر يك
رشته داراي يك مود باشند . عناصر هر رشته با ضميمه كردن يك يا چند زيرنويس
به اسم رشته كه محل عنصررا در رشته تعيين ميكنند مشخص ميگردندوچنين متغيرهائي
متغيرهاي زيرنويس دار گفته ميشوند . زيرنويسها بايد در داخل پرانتز قرار گيرند
و هرگاه تعداد آنها بيش از يكي باشد بايد بوسيله كاما از يكديگر جدا شوند .
زيرنويسها كميتهاي صحيحي هستند كه مقدار آنها تعيين كننده عنصر مورد نظر
ميباشد و هنگاميكه متغيري بعنوان زيرنويس بكار ميرود و تنها مقدارآن قابل توجه
است (I)A عنصر i ام يك رشته يك بعدي را كه A ناميده شده نشان ميدهد و اگر به
متغير I قبلا" مقدار عدد 6 داده شده باشد (I)A ششمين عنصر رشته A را مشخص
ميكند .
كاربرد متغيرهاي زيرنويس دار دردستورهاي فرترن شبيه كاربرد متغيرهاي معمولي
است مثلا" دستور رياضي 4

و c = a2 + b2و
(َ4و 2و)+ B(2()C = A
در فرترن بصورت
(َ4و 2و)+ B(2()C = A

نوشته ميشود . ميتوان دستور فوق را بصورت زير نوشت :

I = 2

(َ4و Iو)+ B(I()C = A تنها ميتواند كميتهاي صحيح باشند .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور DIMENSION ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۹۱ مراجعه امروز
۴۷۰۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور DIMENSION
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۱۸ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

دستور DIMENSION

چنانكه گفته شد هر متغير زيرنويس دار خود معرف چندين كميت مشابه است . از
اينرو بايستي در هر برنامه تعداد محلهاي كافي جهت ذخيره كردن اين كميتها قبلا"
گرفته شود ، يعني بيش از اينكه متغيرهاي زيرنويس دار در يكي از دستورهاي برنامه
بكار برده شوند بايد تعداد عناصر آن مشخص شود و بهمين تعداد محل در حافظه
كامپيوتر جهت ذخيره آنها منظور گردد . اين عمل به كمك دستور DIMENSION انجام
ميگيرد كه صورت كلي آن بشكل :

DIMENSION v1 / v2 / v3 /.

ميباشد كه در آن v ها نام متغيرهاي زيرنويس دار هستند كه توسط كاما از همديگر
جدا ميشوند و بدنبال آنها حداكثر ابعاد رشته در داخل پرانتز نوشته ميشود .
مثال 1- نمونه هائي از طرز نوشتن متغيرهاي زيرنويس دار در دستور DIMENSION
در زير داده شده است .

DIMENSION A(10)
DIMENSIOM X(30 )/ B(10/10 )/ C(15 )/ K(4/3)
DIMENSION DELTA(15 )/ ALI(5/6)

هنگام استفاده از دستور DIMESIOM بايد قواعد زير را رعايت نمود : 1
- هر متغير زيرنويس دار بايد در دستور DIMENSION ذكر شود . 2
- محل دستور DIMENSION در ابتداي برنامه و قبل از اولين دستور قابل اجرا
است . 3
- اعدادي كه در دستور DIMENSION به متغيرهاي زيرنويس دار داده ميشود بايد
ثابت هاي صحيح بوده و نشان دهنده حداكثر ممكن تعداد عناصر رشته باشد .
بنابراين تعداد عناصر متغير زيرنويس داري كه در برنامه مورد استفاده قرار
مي گيرد مي تواند كمتر يا مساوي تعداد ذكر شده در دستور DIMENSION باشد ولي
نبايد از آن تجاوز كند . 4
- تعداد ابعاد متغيرهاي زيرنويس دار بايد همواره در دستور DIMENSION و در
متن برنامه يكسان باشد (يعني يك متغير زيرنويس دار تنها مي تواند به يكي از
صورتهاي يك بعدي ، دو بعدي يا چند بعدي بكار رود) . 5
- هر متغير ميتواند دريك برنامه تنها به يكي از صورتهاي ساده يا زيرنويس دار
بكار رود .
دومثال زير براي شريح مزاياي در نظر گرفتن دسته اي ازكميت ها بصورت عناصر يك
رشته ذكر شده اند .
مثال 2- پنچ كارت كه روي هر يك ده عدد با فرمت 10F8.3 منگنه شده داده شده
است ميخواهيم ريشه چهارم هر يك از اين اعداد را محاسبه و چاپ كنيم .
اگر كميتهاي فوق بصورت عناصر يك رشته تلقي نشود بايد به هر يك از ده عدد
روي كارت يك اسم متغير مختلف داده شود و ممكن است برنامه در اين حالت بصورت
زير نوشته شود :

DO 3 I = 1 / 5
READ( 1/1 )A / B / C . D / E / F / G / H / R / S
1 FORMAT( 10F8.3)
X = A ** .25
WRITE( 3/2 )A / X
2 FORMAT( 10X / 'FOURTH ROOT OF'/ 2X / F8 / 3/ 2X
1'IS'2X / E15.7
X = B ** .25
WRITE( 3/2 )B / X
X = C ** .25
WRITE( 3/2 )C / X
X = D ** .25
WRITE( 3/2 )D / X
X = E ** .25
WRITE( 3/2 )E / X
X = F ** .25
WRITE( 3/2 )F / X
X = G ** .25
WRITE( 3/2 )G / X
X = H ** .25
WRITE( 3/2 )H / X
X = R ** .25
WRITE( 3/20 )R / X
X = S ** .25
WRITE( 3/ 2 )S . X
3 CONTINUE
STOP
END

در اين طرز نوشتن برنامه چون لازم است به هر يك از اعدادهاي روي كارت نام
متغير جداگانه داده شود لذا مجبور بوديم كه براي محاسبه و چاپ ريشه چهارم هر
عدد دستورهاي مختلفي بكار ببريم . اين روش به برنامه اي كه از 27 دستور تشكيل
يافته است منجر گرديد .
با استفاده از متغيرهاي زيرنويس دار ميتوان برنامه فوق را بصورت ساده زير
نوشت . در اين روش ده عدد منگنه شده روي هر كارت بعنوان عناصر يك رشته يك بعدي A
در نظر گرفته شده اند .

DIMENSION A( 10)
DO 3 I = 1/5
READ( 1/1 )A(1 )/ A(3 )/ A(4 )/ A(5 )/ A(6 )/ A(7.)
1 A(8 )/ A(9 )/ A(10)
1 FORMAT( 10F8.3)
DO 3 J = 1 / 10
X = A(J)**.25
WRITE( 3/2 )A(J )/ X
2 FORMAT( 10X / 'FOURTE ROOT OF' / 2X / F8.3/
1 2X / 'IS'/ 2X / E15.7)
3 CONTINUE
STOP
END

در برنامه بالا متغير J بعنوان زيرنويس بكار رفته و از دستور **.25(J) X = A
براي محاسبه ريشه چهارم هر يك از ده عدد منگنه شده روي كارت استفاده ميشود .
ده عدد فوق بصورت عناصر ريشه يك بعدي A تلقي شده اند . در اين طرز نوشتن برنامه
تنها11 دستور بكار رفته است در حاليكه در طرز نوشتن قبلي 27 دستور لازم بود
اين روش صرفه جويي قابل ملاحظه در برنامه نويسي و مزاياي استفاده از متغيرهاي
زيرنويس دار را در ساده كردن برنامه نشان ميدهد .
مثال 3- ميخواهيم برنامه اي بنويسيم كه ده عدد منگنه شده روي يك كارت را
بخواند و بزرگترين آنها را تعيين و چاپ كند .
در اين برنامه ده عدد مورد نظر بصورت عناصر يك رشته يك بعدي A درنظر گرفته
ميشود و بزرگترين عنصر در محلي بنام XLARGE ذخيره ميگردد . ابتدا فرض ميشود كه
اولين عنصر رشته همان بزرگترين عنصر رشته باشد . سپس عنصر دوم با XLARGE
مقايسه ميشود اگر عنصر دوم كوچكتر يا مساوي XLARGE باشد مقدار XLARGE تغيير
نميكند ولي اگر عنصر دوم از XLARGE بزرگتر باشد مقدار عنصر دوم جايگزين متغير XLARGE
ميگردد . اين عمل بترتيب براي تمام عناصر رشته انجام ميشود و در خاتمه
بزرگترين عنصر رشته در XLARGE ذخيره خواهد شد .

DIMENSION A(10)
READ( 1/1 )A(1 )/ A(2 )/A(3 )/ A(4 )/ A(5 )/ A(6 )/ A(7 )/
1 A(8 )/ A(9 )/ A(10)
1 FORMAT( 10F8.3)
XLARGE = A(1)
DO 3 I = 2/ 10
IF( XLARGE - A( I ))2 / 3 / 3
2 XLARGE = A(I)
3 CONTINUE
WRITE( 3/4 )XLARGE
4 FORMAT( 10X / 'LARG

کيفيت مقاله :
عالی خوب متوسط ضعيف


حلقه DO ضمني ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۹۴ مراجعه امروز
۴۷۱۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
حلقه DO ضمني
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۳ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

حلقه DO ضمني

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

READ( 1/20 )X(1 )/ X(2 )/ X(3 )/ X(4 )/ X(5 )/ X(6 )/ X(7 )/ X(8 )/
X(9 )/ X(10)

ليكن بكمك حلقه DO ضمني ميتوان دستور مورد نظر را بصورت زير نوشت :

READ( 1/20( )X(I )/ I = 1 / 10 / 1)

و يا همانطور كه در مورد دستور DO معمولي ديده شد چون در اين دستور مقدار نمو
برابر واحد است ميتوان آن را حذف نمود و دستور فوق را بصورت زير نوشت :

READ( 1/20( )X(I )/ I = 1 .10)

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

DIMENSION A(10)
READ( 1/1 )A(I )/ I = 1/10
1 FORMAT( 10F6.2)
SUM = 0.
DO 2 J = 1/10
2 SUM = SUM + A(J)
WRITE( 3/3( )A(I )/ I = 1/10 )/ SUM
3 FORMAT( 1H1 / 'SUM OF'/ 10(F6.2 / 2X )/ 'IS'/ F8.2)
STOP
END

چنانكه از اين مثال ديده ميشود ميتوان از حلقه DO ضمني در دستورهاي خارجي
نيز مانند دستورهاي ورودي استفاده كرد .
اغلب كار كردن باداده هائي كه بصورت رشته هاي دو بعدي (ماتريس ) هستند مزاياي
زيادي دارند . حل اكثر مسائلي كه جنبه رياضي دارند با بكار بردن ماتريسها و
انجام عمليات جمع ، تفريق ، ضرب و معكوس كردن ماتريسها تسهيل فراواني پيدا
ميكنند . گرچه منظور از اين كتاب توضيح عمليات جبري ماتريسها نيست ، معهذا
مثالهائي از كاربرد رشته هاي دو بعدي گفته خواهد شد و بعضي از آنها برنامه نويسي
اين عمليات ماتريسي را نيز نشان خواهد داد .
براي تشريح برنامه نويسي رشته هاي دو بعدي دو دسته از داده هاي جدول ( الف ) و
( ب ) نشان داده شده در زير را در نظر مي گيريم اين جدولها فروش چهار محصول
مختلف را در سه شهر ، در سالهاي 1350 و 1351نشان ميدهند . عناصر اين جدولها
سود حاصل از فروش كل اين محصولات را در شهرهاي نامبرده را در عرض يك سال و بر
حسب هزار ريال مشخض ميكنند . فرض كنيد D50 نام رشته اي از كميتها كه نشان
دهنده داده هاي سال 1350 و D51 نام رشته اي از كميتها كه نشان دهنده داده هاي سال 1351
هستند باشند بنابراين (2/3)َD50 برابر 1700 يعني سود حاصل از فروش كولر
در شهر اصفهان در سال 1350 و 4/20)َD51 برابر 1500 يعني سود حاصل از فروش اجاق
گاز در شهر تبريز درسال 1351 ميباشد .

جدول ( الف ) داده هاي سال 1350
|
اصفهان | تبريز | تهران | نوع محصول |
|
800 | 8 | 101000 | 101500 يخچال | |
| 101700 | 101500 | 101800 كولر | |
500 | 5 900 | 9 700 | 7 بخاري | |
| 101300 | 101400 | 101600 اجاق گاز |

جدول ( ب ) داده هاي سال 1351
|
اصفهان | تبريز | تهران | نوع محصول |
|
1200 | 1 1300 | 1 2100 | 2 يخچال | |
1900 | 1 1700 | 1 2200 | 2 كولر | |
700 | 1100 | 1 800 | بخاري | |
1500 | 1 َ1500 | 1700 | 1 اجاق گاز |

مثالهاي كه در زير گفته خواهد شد به داده هاي جدول بالا مربوط است و در اينجا
فرض ميشود كه اين داده ها قبلا" در واحد حافظه ذخيره شده اند .
مثال 2- برنامه اي بنويسيد كه سود حاصل از فروش ،
الف - يخچال در سال 1350 را در سه شهر اصفهان تهران ، تبريز ، (جدول الف )
تعيين كند .
ب - يخچال در سال 1350 و 1351 را در اين سه شهر تعيين كند (جدول ب و الف )
پ - چهار محصول نامبرده در جدول (الف ) را در سال 1350 در شهر تهران تعيين
كند .
در قسمت (الف ) منظور نوشتن برنامه اي است كه عناصر رديف اول جدول (الف ) را
با هم جمع كند . دستورهاي فرترن زير اين عمل را انجام ميدهند و نتيجه آن را
بصورت متغير X محاسبه و ذخيره ميكنند .

DIMENSION D50( 4/3)
X = 0.
DO 1 I = 1 / 3
1 X = X + D50( 1/I)

در اين برنامه متغير I مقادير صحيح از يك تا سه را اختيار ميكند و موجب
ميشود كه عناصر (1/1) D50و (1.2() D50و (1/3() D50 بترتيب به متغير X افزوده
شوند . توجه كنيد كه چون عناصر موجود در جدول (الف ) با هم جمع ميشود از اين
لحاظ زيرنويس اول (يعني رديفها) رابرابر نگهميداريم وتنها زيرنويس دوم (يعني
ستونها) را از يك تا سه تغيير ميدهيم .
در قسمت (ب ) منظور نوشتن برنامه اي است كه عناصر رديفها اول جدولهاي (الف )
و (ب ) را با هم جمع كند . دستورهاي فرترن زيراين عمل را انجام ميدهند و نتيجه
را بصورت متغير Y محاسبه و ذخيره ميكنند .

DIMENSION D50( 4/3 )/ D51( 4/3)
Y = 0.
DO 1 I = 1/3
1 Y = Y + D50( 1/I )+ D51( 1/I)

در قسمت (پ ) منظور نوشتن برنامه اي است كه عناصر ستون اول جدول (الف ) را
با هم جمع كند . دستورهاي فرترن زير اين عمل را انجام ميدهند و نتيجه را بصورت
متغير Z محاسبه و ذخيره ميكنند .

DIMENSION D50( 4/3)
Z = 0.
DO 1 J = 1/4
1 Z = Z + D50( J/1)

مثال 3- برنامه اي بنويسيد كه سود حاصل از فروش هر يك از چهار محصول نشان
داده شده در جدولهاي (الف ) و (ب ) را در هر يك از سه شهر اصفهان ، تبريز ،
تهران ،
الف - در سال 1350 تعيين و نتايج را در يك رشته يك بعدي X ناميده ميشود
ذخيره كند .
ب - در سالهاي 1350 و 1351 تعيين و نتايج را در يك رشته دو بعدي كه D5051
ناميده ميشود ذخيره كند .
در قسمت (الف ) منظور نوشتن برنامه اي است كه عناصر ردسف اول را با هم جمع
كند و مساوي اولين عنصر رشته X قرار دارد و سپس عناصر رديف دوم را با هم جمع
نمايد و مساوي دومين عنصر رشته X قرار دهد و الي آخر . براي اين كار لازم است
كه هم زيرنويس رديف و هم زيرنويس ستون تغيير داده شود . اين عمل ميتواند با
استفاده از حلقه DO متداخل بصورت زير انجام گيرد :

DIMENSION D50( 4/3 )/ D51(4/3 )/ X(4)
DO 1 I = 1/4
X(I )= 0.
DO 1 J = 1/3
1 X(I )= X(I )+ D50(I/J)

توجه كنيد كه متغير X نيز در دستور DIMENSION ذكر شده است زيرا كه X نشان
دهنده يك رشته است همچنين توجه كنيد كه قبل از اينكه عناصر رشته D50 با هم جمع
شوند تمام عناصر رشته X مساوي صفر قرار داده شده اند .
در قسمت (ب ) منظور نوشتن برنامه اي است كه عناصر متناظر در جدولهاي (الف )
و (ب ) را با هم جمع كرده و رشته دو بعدي جديد D5051 را بوجود آورد . در واقع
اين قسمت مثالي از برنامه نويسي جمع دو ماتريس را نشان ميدهد .

DIMENSION D50(4/3 )/ D51(4/3 )/ D5051(4/3)
DO 1 I = 1/4
DO 1 J = 1/3
1 D5051(I/J )= D50(I/J )+ D51(I/J)

توجه كنيد كه رشته دو بعدي D5051 نيز بايد در دستور DIMENSION ذكر شود و صر متناظر مانند قسمت (الف ) بصورت مرحله به مرحله انجام نميگيرد

کيفيت مقاله :
عالی خوب متوسط ضعيف


ورود و خروج رشته هاي دو بعدي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۸۹۷ مراجعه امروز
۴۷۱۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ورود و خروج رشته هاي دو بعدي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۷ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

ورود و خروج رشته هاي دو بعدي

هنگاميكه بخواهيم عناصر يك رشته دو بعدي راروي كارت منگنه كنيم ميتوان آنها
را بترتيب رديفهايا ستونها مرتب و بهمان ترتيب منگنه نمود . در اينصورت گويند
رشته فوق بطور رديفي يا ستوني منگنه شده است . رشته دو بعدي نشان داده شده در
جدول ( الف ) را مجددا" در نظر بگيريد . عناصر اين رشته را ميتوان بيكي از دو
صورت زير منگنه كرد : 000
، 1700، 1500 ، 1800 ، 800 ، 1000 ، 1500
يا 000
، 1500 ، 1000 ، 1600 ، 700 ، 1800 ، 1500
در صورت اول عناصر بطور رديفي و درصورت دوم بطور ستوني منگنه ميشوند . براي
تعيين اينكه عناصر يك رشته بطور رديفي يا ستوني منگنه شده اند تنها لازم است
كه ترتيب عناصر منگنه شده را معلوم كرد نه اينكه چند عنصر روي يك كارت منگنه
شده است .
مثال 1- برنامه زير را در نظر بگيريد :

DO 1 I = 1 / 4
DO 1 J = 1 / 3
1 READ( 1/2 )A( I/J)
2 FORMAT( F5.1)

در اين برنامه عناصر رشته دو بعدي A بطور رديفي خوانده ميشود (توجه كنيد كه
زيرنويس ستوني سريعتر تغيير ميكند) و يك عنصر ازروي هر كارت منگنه شده خوانده
ميشود و دستور READ ، 12 بار اجرا ميگردد .
اين برنامه را ميتوان با استفاده از حلقه DO ضمني بصورت زير نيز نوشت :

DO 1 I = 1/4
1 READ( 1/2( )A(I/J )/ J = 1/3)
2 FORMAT( F5.1)

همچنين ميتوان حلقه DO اول را حذف كرد و عمل اين حلقه را مانند برنامه زير
در داخل حلقه DO صمني قرار داد .

READ( 1/2(( )A(I/J )/ J = 1/3 )/ I = 1/4)
2 FORMAT( F5.1)

مثال 2- در بعضي مسائل اغلب لازم ميگردد رشته بزرگي كه بيشتر عنصرهاي آن صفر
هستند به داخل ماشين خوانده شوند . در اين قبيل موارد راحت تراست كه بجاي
خواندن تمام عناصر رشته ها تنها عناصر غير صفر آن خوانده شود . در اين روش چون
عناصر بطور متوالي خوانده نميشوند ، لذا هنگام خواندن هر عنصر بايد شماره
رديف و ستون آن مشخص گردد .
برنامه زير طرز انجام اين عمل را نشان ميدهد :

DIMENSION X(10/50)
DO 1 I = 1/10
DO 1 J = 1/50
1 X(I/J )= 0.
2 READ( 1/3 )I / J / X(I/J )/ K
3 FORMAT( 2I2 / 2X / F10.3 / 63X / I1)
IF( K - 1 )2 / 8 / 8

8

در اين برنامه ابتدا تمام عناصر رشته دو بعدي X مساوي صفر قرار داده ميشود .
هنگام خوانده هرعنصر ابتدا شماره رديف و سپس شماره ستون آن عنصر معين ميگردد .
در اينجا براي مشخص كردن آخرين كارت داده ها ازستون 80 كارت داده ها استفاده شده
است و متغير K نشان دهنده مقدار منگنه شده در اين ستون ميباشد و چنانكه ديده
ميشود در تمام كارت داده ها اين ستون بايد خالي باشد و تنها در كارت آخر عدد 1 .

کيفيت مقاله :
عالی خوب متوسط ضعيف


صورتهاي مجاز زيرنويسها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۰۰ مراجعه امروز
۴۷۱۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
صورتهاي مجاز زيرنويسها
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۲۰ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

صورتهاي مجاز زيرنويسها

زيرنويسها تنها ميتوانند به يكي از صورتهاي داده شده زير بكار روند :

v
c
v + c / v - c
c * v
c * v + c / c * v - c

كه در آن v يك متغير صحيح بدون زيرنويس بوده و c ثابت صحيح بدون علامت
ميباشد . توجه كنيد كه صورتهاي مجاز زيرنويسها كه در بالا داده شد تنها صورتهاي
مجاز هستند و بنابراين زيرنويس بصورت c + v مجاز نيست زيرا در نوشتن آن طبق
قاعده بالا ابتدا بايد نام متغير نوشته شود يعني زيرنويس به صورت v + c باشد .
همچنين به خاطر بسپاريد كه يك زيرنويس نميتواند خود داراي زيرنويس باشد و در
نتيجه متغيري بصورت (4)I)A مجاز نميباشد .*
مثال - چند نمونه از متغيرهاي زيرنويس دار مجاز در زير داده شده است .

A(I )A(ID )K(3 )B(I + 2 )C(K - 3)
I(4*IB )J(2*K + 5 )L3(3*I - 2)
DD(I / J + 1 )W(I + 1 / J + 5 )YY(K + 1 / 3

کيفيت مقاله :
عالی خوب متوسط ضعيف


ورود و خروج رشته ها بدون استفاده از زيرنويس ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۰۳ مراجعه امروز
۴۷۱۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ورود و خروج رشته ها بدون استفاده از زيرنويس
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۱۸ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

ورود و خروج رشته ها بدون استفاده از زيرنويس

هنگاميكه انتقال تمام عناصر يك رشته (بطوريكه در دستور DIMENSION مشخص شده
است ) مورد نظر باشد ميتوان طرز نمايش خاصي در دستور ورودي و خروجي بكار برد ،
براي اين منظور اسم رشته بدون زيرنويس نوشته ميشود كه در آن صورت دستورهاي READ
يا WRITEا مربوط تمام عناصر اين رشته را در بر خواهد گرفت . چنانكه رشته
مورد نظر دو بعدي باشد عناصر اين رشته بطور ستوني منتقل خواهد شد .
مثال - دو برنامه نشان داده شده در زير با هم معادل ميباشند .

الف - DIMENSION A(10 )/ B(10/10)
READ( 1/1( )A(I )/ I = 10)
READ( 1/1(( )B(I/J )/ I = 1/10 )/ J = 1/10)
1 FORMAT( 10F 8.3)

ب - DIMENSION A(10 )/ B(10/10)
READ( 1/2 )A/B
2 FORMAT( 10F 8.3)

در اين دو برنامه چون منظور خواندن تمام عناصر رشته ها بتعداي كه در دستور DIMENSION
ذكر شده اند ميباشد لذا همانطور كه در قسمت (ب ) ديده ميشود ميتوان
رشته هاي Aو Bو را بدون زيرنويس نوشت . در حقيقت بايد توجه داشت كه اين طريق
حالت خاصي از كاربرد حلقه DO ضمني است كه در آن تعداد رديفها و ستونهاي رشته اي
كه در دستورهاي ورودي و خروجي بدون زيرنويس نوشته ميشود همان مقادير هستند كه DIMENSIO براي اين رشته ذكر شده است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


نكات ديگر درباره انتقال رشته ها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۰۶ مراجعه امروز
۴۷۲۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نكات ديگر درباره انتقال رشته ها
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۲۶ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

نكات ديگر درباره انتقال رشته ها

در بيشتر مثالهائي كه قبلا" درباره انتقال رشته ها گفته شد تعداد دقيق عناصر
رشته كه بايد خوانده يا نوشته شود توسط ثابت يا ثابتهائي در دستورهائي DOياDOا
ضمني مشخص ميگرديد ، ليكن برنامه نويسها ماهر اكثر برنامه ها را چنان مينويسند
بتوانند بدون تغيير اساسي در برنامه ، آن را با رشته هائي با اندازه هاي مختلف
اجرا كنند . حداكثر اندازه اين رشته ها توسط ابعاد ذكر شده در دستور DIMENSION
محدود ميگردد . در چنين مواردي متغيرهاي صحيحي كه مقادير آنها نشان دهنده
ابعاد واقعي رشته هاي مورد نظر است بكمك دستور READ خوانده شده ، وارد حافظه
ماشين ميگردد تا در واقع لزوم اين ابعاد در دسترس قرار بگيرند . حال اگر ابعاد
رشته اي از مساله اي به مساله ديگر متفاوت باشد در اين صورت تنها تغيير لازم اين
خواهد بود كه مقادير داده شده براي اين متغيرهاي صحيح را در روي كارت داده هاي
مربوطه تغيير دهيم .
مثالهاي زير طرز استفاده از اين روش را روشن ميكند :
مثال 1- برنامه هاي زير را در نظر بگيريد :

الف - DIMENSION A(100)
READ( 1/1 )M
1 FORMAT( I2)
READ( 1/2( )A(I )/ I = 1 / M)
2 FORMAT( 4F10.5)

ب - DIMENSION A(100)
READ( 1/1 )M /( A(I )/ I = 1 / M)
1 FORMAT( I2/(4F10.5)

اين دو برنامه با هم معادل هستند و هر دو براي خواندن رشته يك بعدي A كه
كه تعداد عناصر آن M ميباشد بكار ميروند . بكمك اين برنامه ها و تنها با تغيير
كارت داده هاي متناظر با M هر رشته را كه حداكثر 100 عنصر داشته باشد ميتوان
بجاي A بكار برد . در برنامه دوم ملاحظه ميشود كه براي خواندن M و رشته A از يك
دستور خواندن استفاده شده است البته بايد توجه داشت كه اول مقدار M بايد خوانده
شود .
مثال 2- برنامه زير را در نظر بگيريد :

DIMENSION B( 10/10)
READ( 1/1 )M / N(( B(I/J )/ J = 1/N )/ I = 1/M)
1 FORMAT( 1 I 2/(4F10.3)

در اين برنامه ابعاد رشته دو بعدي A با متغيرهاي صحيح Mو Nو مشخص ميگردد و
چنانكه از دستور DIMENSION مشهود است حداكثر مقادير Mو Nو هر دو 10 ميباشد .
مثال 3- برنامه اي بنويسيد كه جدول ضرب اعداد از يك تا 40 را در اعداد 11 تا 25
بصورت نشان داده زير محاسبه و چاپ كند .

| | 11 12 13 . . . . . . . . . . 24 25 |

| 1 | 11 12 13 . . . . . . . . . . 24 25 |
| 2 | 22 24 26 . . . . . . . . . . 48 50 |
| 3 | 33 36 39 . . . . . . . . . . 72 75 |
| . | . . . . . . . . . . . . . . . |
| . | . . . . . . . . . . . . . . . |
| . | . . . . . . . . . . . . . . . |
| 39 |429 468 507 . . . . . . . . . . 936 975 |
| 40 | 40 480 520 . . . . . . . . . . 960 1000 |

برنامه زير جدول ضرب اعداد 1 تا 40 را در اعداد 11 تا 25 را چاپ ميكند .

DIMENSION L(15)
WRITE( 3/20)
20 FORMAT( 1H1 / 50X / 14H PRODUCT TABLE / 16X / 182('-'))
DO 18 J = 1/15
18 L(J )= J + 10
WRITE( 3/22( )L(J )/ J = 1 / 15)
22 FORMAT( 16X /'1'/ 3X / 1'/ 1515 / 1X /'1')
WRITE( 3/12)
DO 24 K = 1/40
DO 23 J = 1/15
23 L(J )= K *( J + 10)
WRITE( 3/17 )K /( L(J )/ J = 1/15)
17 FORMAT( 16X /'1' / 1X / I2 /'1'/ 1515 / 1X /'1')
24 CONTINUE
WRITE( 3/12)
12 FORMAT( 16X /'1'/ 3('-' )/'1'/ 76 /( '-' )/'1')
STOP

کيفيت مقاله :
عالی خوب متوسط ضعيف


برنامه هاي فرعي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۰۹ مراجعه امروز
۴۷۲۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برنامه هاي فرعي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۱۶ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

برنامه هاي فرعي

در اينجا يكي از جنبه هاي مهم زبان فرترن كه آن قابليت انعطاف زيادي ميدهد
مورد بحث قرار مي دهيم . معمولا" در اين برنامه فرترن ، هنگاميكه انجام يك سري
عمليات بطور مكرر لازم است ، برنامه هاي فرعي (Subprograms) بكار برده ميشوند .
برنامه هاي فرعي از طريق برنامه اصلي (Main Program) و يا برنامه هاي فرعي ديگر
مورد استفاده قرار ميگيرند . بطور كلي استفاده از اين قسمت از برنامه فرترن به
منظور تكرار يك سري عمليات به يكي از صورتهاي زير انجام ميگيرد :
الف - توابع آماده شده (Supplied Functions)
ب - تابع يك جمله اي (Arithmetic Statement Function)
پ - برنامه فرعي FUNCTION(FUNCTION Subprogram() - برنامه فرعي SUBROUTINE(SUBROUTINE Subprogram()

کيفيت مقاله :
عالی خوب متوسط ضعيف


توابع آماده شده ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۱۲ مراجعه امروز
۴۷۲۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
توابع آماده شده
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۷ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

توابع آماده شده

تعداد اين توابع كه به آنها توابع كتابخانه اي (Library Functions) نيز گقته
ميشود دركامپايلرهاي مختلف فرترن متفاوت ميباشد ، مثلا" در كامپيوتري كه بمنظور
محاسبات عمليات نقشه برداري به كار ميرود ، چون محاسبه فاصله دو نقطه كاربرد
زيادي دارد ، براي اين منظور ميتوان برنامه مربوط به اين محاسبات را در قسمت
توابع آماده شده آن كامپيوتر ذخيره كرد . هنگام كاربرد اين توابع آماده شده ، ايد نام مشخص شده آنها را همراه با آرگومانهاي مربوطه ذكر كرد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


تابع يك جمله اي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۱۵ مراجعه امروز
۴۷۳۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تابع يك جمله اي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۷ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

تابع يك جمله اي

در مواردي كه تابع مورد نظر را بتوان بصورت يك عبارت بيان نمود ميتوان از
تابع يك جمله اي استفاده نمود . تابع يك جمله اي يك دستور فرترن است كه بايد قبل
از اولين دستور محاسباتي در برنامه مورد نظر نوشته شود .
صورت كلي تابع يك جمله اي به شكل زير ميباشد :

Name( x1 / x2 /.../xn )= e
/\ /\ /\
|| || ||

يك عبارت فرترن آرگومانها نام تابع
هر تابع يك جمله اي بايد حداقل داراي يك آرگومان باشد . آرگومانهاي تابع يك
جمله اي متغيرهاي بدون زيرنويس هستند . تعداد علامتهاي موجود در نام تابع نبايد
از 6 كاراكتر تجاوز كند . اولين علامت سمت چپ يكي از حروف الفباي انگليسي است
و اين علامت ، مود كميت تابع را مشخص مينمايد .
مثال - اگر در چند مرحله يك برنامه بايداز جواب معادله هاي درجه دوم استفاده
كرد ميتوان يكي از جوابهاي معادله را استفاده از فرمول / 2a

(4ac(- 2- به توان b جذر) X =-bb +
به صورت تابع يك جمله اي در برنامه گنجانيد :

ROOT( A / B / C )=-( B +( B**2-4.*A*C)**0.5)/(2.*A)

باين ترتيب در اين برنامه هر موقع جواب يك معادله درجه دوم لازم باشد ميتوان
تابع بالا را با ذكر آرگومانهاي مورد نظر (ضرايب معادله درجه دوم ) بكار برد .
بعبارت ديگر كاربرد تابع ROOT در اين برنامه شبيه كاربرد تابع هاي آماده شده
خواهد بود .

مثلا" اگر در دستور

X = ROOT( P / Q / 2).

در برنامه منظور گردد جواب معادله درجه دوم 2 + gx + 2 = 0 به توان Px محاسبه
و جايگزين متغير X ميگردد .
در موقع كاربرد تابع يك جمله اي ممكن است ازآرگومانهاي زيرنويس دار استقاده
كرد مثلا" اگر ضرايب a c b يك معادله درجه دوم در رشته A بصورت (1)/ A(2()A
و (3)A ذخيره شده باشند در اينصورت براي تعيين جواب اين معادله تابع يك جمله اي ROOT
بصورت زير بكار ميرود .

X = ROOT( A(1 )/ A(2 )/ A(3))

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

ART( A )= A**2 - 2.*B
A

آرگومان تابع و B يك متغير اعشاري معمولي است كه مقدار آن بايد قبلا" مشخص

کيفيت مقاله :
عالی خوب متوسط ضعيف


برنامه فرعي FUNCTION ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۱۸ مراجعه امروز
۴۷۳۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برنامه فرعي FUNCTION
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۶۰ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

برنامه فرعي FUNCTION

در بعضي از موارد ، تابع يك جمله اي را بعلت محدوديتهاي زير نميتوان بكار
برد . 1
- تابع مورد نظر را بايد بتوان فقط با يك دستور فرترن تعريف نمود . 2
- نتيجه حاصل از محاسبات تنها بصورت يك مقدار خواهد بود .
با بكار بردن برنامه هاي فرعي ، محدوديتهاي بالا را ميتوان از بين برد . برنامه
فرعي FUNCTION محدوديت اول برنامه فرعي SUBROUTINE هر دو محدوديت را بر طرف
ميكند .
برنامه فرعي FUNCTION مشابه يك برنامه كامل است ، بدين مفهوم كه مجزا از
برنامه اصلي مربوطه نوشته ميشود . برنامه فرعي FUNCTION بايد بصورت زير تنظيم
گردد :

FUNCTION name( x1 / x2 / x3 /..... xn)
/\ /\
|| ||

آرگومانها نام تابع
......................... |

......................... name = .................. |

......................... RETURN
END

اولين دستور يك برنامه فرعي FUNCTION بايد بصورت بالا در برنامه نوشته شود .
بعد از كلمه FUNCTION ، نام دلخواه برنامه فرعي ذكر گردد كه در دنباله آن يك
يا چند آرگومان تابع در داخل يك جفت پرانتز نوشته ميشود . نتيجه حاصل از
محاسبات بصورت يك مقدار ، بكمك نام تابع در اختيار برنامه اصلي مربوطه قرار
داده ميشود . بنابراين ، در برنامه فرعي ، نام تابع بايد حداقل يك بار در سمت
چپ يك دستور محاسباتي نوشته شود وجود دستور RETURN براي انتقال كنترل به برنامه
اصلي مربوط ميباشد و دستور END پايان برنامه فرعي را نشان ميدهد .
مثال 1- برنامه فرعي زير براي پيدا كردن ريشه دوم عدد A با خطاي نسبي 0.00001
نوشته شده است .

FUNCTION SQR( A)
R = A/2.0
DO 5 J = 1/500
SQR = 0.5 *( R + A/R)
IF( ABS(SQR ** 2 - A)/A - 0.00001 )10 / 5 / 5
5 R = SQR
10 RETURN
END

در اين برنامه براي پيدا كردن ريشه دوم عدد A فرمولي تسلسلي
(Ri بروي Ri + A) Ri + 1 = 0/5 كه از روش عددي تانژانت نيوتن بدست آمده است
بكار برده ميشود . در اين فرمول كه از روش تكرار عمليات استفاده ميشود هر بار
مقدار جديد R با استفاده از مقدار آن محاسبه ميگردد . اولين مقدار R برابر A/2
فرض شده است .
كاربرد برنامه فرعي FUNCTION شبيه كاربرد تابع يك جمله اي است مثلا" اگر در
برنامه اصلي مربوطه دستور (DELTA) Y = SQR نوشته شود ، ريشه دوم DELTA محاسبه
و جايگزين متغير Y ميگردد . اگر تعداد آرگومانهاي تابع بيش از يك باشد بايد
توسط كاما از يكديگر جدا شوند . در مورد نام برنامه فرعي FUNCTION نيز مانند
تابع يك جمله اي قواعد مربوط به نام متغيرها رعايت ميگردد . بايد توجه داشت
كه آرگومانهائي كه در برنامه فرعي FUNCTION بكار ميروند مانند آرگومانهاي تابع
يك جمله اي ساختگي بوده و مقادير آن مشخص نيست . در موقع كاربرد برنامه فرعي
بايد مقادير در اختيار برنامه فرعي قرار گرفته و محاسبات لازم صورت ميگيرد .
اجرا دستور RETURN سبب ميشود كه مقدار تابع محاسبه شده در اختيار برنامه اصلي
مربوطه قرار گرفته و بقيه محاسبات دنبال گردد .
مثال 2- اگر y بزرگترين مقدار باشد كه براي هر مقدار x از روابط زير بدست
آيد ، cos
x
- 2- به توان | yy = cos x
0/5 cos
x
- 3- به توان x | yy = cos

برنامه اي بنويسيد كه كميت w را از رابطه y + sin yجذر w =ر براي مقادير / 100
.... x = 1 / 2 / 3 / حساب كند .
براي نوشتن اين برنامه ميتوان از برنامه فرعي FUNCTION استفاده كرد . هر با
مقدار y در برنامه فرعي تعيين و سپس مقدار مربوطه w در برنامه اصلي محاسبه
ميگردد . برنامه فرعي مورد نظر BIG ناميده شده است .
برنامه اصلي

C EXAMPLE 6.3
DO 4 J = 1/100
X = J
Y = BLG( X)
W = SQRT( Y + SIN(Y))
4 WRITE( 3/10 )X / W
10 FORMAT( F5.0 / E14.5)
STOP
END

برنامه فرعي

FUNCTION BIG( A)
Y1 = COS( A * A - )COS( A)
Y2 COS( A ** 3 - )0.5 * COS(A)
IF( y1 - y2 )7 / 4 / 4
4 BIG = Y1
RETURN
7 BIG = Y2
RETUEN
END

توجه : لازم است كه هنگام كاربرد برنامه فرعي تعداد ، ترتيب و همچنين مود
آرگومانها مشابه با آرگومانهاي دستور FUNCTION باشد .
آرگومانهاي يك برنامه فرعي ممكن است شامل يك يا چند رشته باشند .
مثال 3- برنامه فرعي زير بزرگترين عنصر رشته A را تعيين مينمايد .

C EXAMPLE 9.4 FIND LARGEST ARRAY ELEMENT
FUNCTION AMAX( A / N)
DIMENSION A( 100)
AMAX = A(1)
IF( N - 1 )12 / 12 / 2
2 DO 10 I = 2 / N
IF( AMAX - A(I ))5 / 10 / 10
5 AMAX = A(I)
10 CONTINUE
12 RETURN
END

در اين برنامه فرض شده است كه رشته A شامل N عنصر است كه از 100 تجاوز
نميكند . توصيه ميشود كه خواندن به منطق اين برنامه توجه نمايد . چنانچه
ميانگين نمرات 35 نفر دانشجويان يك كلاس در رشته يك بعدي AVRG ذخيره شده باشد ،
براي تعيين ميا

FIRST = AMAX( AVRG / 35)

بكمك اين دستور ، ميانگين دانشجوي رتبه اول در محلي از حافظه بنام FIRST
ذخيره ميگردد . بايد توجه داشت كه حداكثر عناصر منظور شده براي آرگومانهاي
زيرنويس دار در دستورهاي DIMENSION برنامه اصلي و برنامه فرعي بايستي مساوي مثلا" برنامه اي كه در آن دستور (35 AVRG ) FIRST = AMAX به كار رفته

کيفيت مقاله :
عالی خوب متوسط ضعيف


برنامه فرعي SUBROUTINE ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۲۱ مراجعه امروز
۴۷۳۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برنامه فرعي SUBROUTINE
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۴۲ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

برنامه فرعي SUBROUTINE

چنانچه قبلا" گفته شد ، تابع يك جمله اي و برنامه فرعي FUNCTION هر كدام قادر
به محاسبه و انتقال تنها يك كميت هستند . به منظور انتقال كميتهاي متعددي از
يك برنامه فرعي به برنامه اصلي ، از برنامه فرعي SUBROUTINE استفاده ميگردد .
دو نوع برنامه فرعي SUBROUTINE UFUNCTION از نظر كاربرد متفاوت ميباشند .
هنگام استفاده از برنامه فرعي FUNCTIIN مقادير آرگومانها از برنامه اصلي به
برنامه فرعي منتقل ميشود سپس محاسبات لازم انجام و مقدار محاسبه شده تابع
(يك كميت ) به برنامه احضار كننده منتقل ميگردد .
در مورد برنامه فرعي SUBROUTINE علاوه بر امكان انتقال چند كميت از برنامه
اصلي به يرنامه فرعي كميتهاي متعددي را نيز ميتوان از برنامه فرعي به برنامه
اصلي انتقال نمود در اين نوع برنامه فرعي انتقال كميتها در هر دو جهت تنها به
وسيله آرگومانها انجام ميگيرد . برنامه فرعي SUBROUTINE بايد به شكل زير تنظيم
گردد .

SUBROUTINE name( x1 / x2 /... xn)
/\ /\
|| ||

آرگومان نام
|
دستورهاي لازم براي |
محاسبات مورد نظر

RETURN
END

در برنامه فرعي SUBROUTINE نام برنامه فقط SUBROUTINE به كار ميرود و حال
آنكه در مورد برنامه فرعي FUNCTION ميبايست نام آن حداقل يكبار در سمت چپ يك
دستور محاسباتي ذكر گردد .
آرگومانهاي برنامه فرعي SUBROUTINE نيز مانند برنامه فرعي FUNCTION ساختگي
هستند و اين برنامه فرعي هم بايد در دستورهاي END ERETURN ختم شوند . نظر به
اينكه در برنامه فرعي SUBROUTINE بر خلاف برنامه فرعي FUNCTION كميتي جايگزين
نام برنامه نميگردد و انتقال كميتها تنها از طريق آرگومانها صورت مي گيرد .
بنابراين در انتخاب نام اين برنامه فرعي همان ضوابط انتخاب متغيرها بدون در
نظر گرفتن مود آنها رعايت ميگردد .
استفاده از برنامه فرعي SUBROUTINE بكمك دستور CALL در برنامه اصلي انجام
ميگيرد .
صورت كلي دستور CALL به شكل

CALL name( x1 / x2 /.... xn)

ميباشد كه درآن name نام برنامه فرعي SUBROUTINE ومتغيرهاي x1. / x2.... xn /.
آرگومانهاي مورد نظر هستند .
مثال - برنامه فرعي SUBROUTINE زير تعيين ميكند كه آيا 3عدد aد c b
ميتواند بعنوان اضلاع مثلثي بكار روند يا خير ? در صورتيكه بتوانند مثلثي تشكيل
دهند مساحت و پيرامون آن مثلث محاسبه و به برنامه اصلي منتقل ميگردد . اگر a و b
c / نتوانند مثلثي نشكيل دهند پيرامون ومساحت آن برابر 1- قرار داده ميشود .
در اين برنامه ، براي محاسبه مثلث فرمول (c- p-) (b- p-) (a- p-)pجذر s =ر كه
در آن p نصف پيرامون مثلث است بكار برده شده است .
برنامه اصلي 1

READ( 1/2 )A / B / C
2 FORMAT( 3F10.2)
CALL TAREA( A / B / C / S / P)
IF( S )5 / 10 / 10
5 WRITE( 3 / 6 )A / B / C
6 FORMAT( //3F10 .2/5X / 'NO TRIANGLE')
GO TO 1
10 WRITE( 3 / 12 )A / B / C / S / P
12 FORMAT( //3F10 .2/2X / 'AREA' / F10.2 / 5X/
1'PER.'/ F10.2
GO TO 1
15 STOP
END

برنامه فرعي

SUBROUTINE TAREA( A / B / C / AREA / PER)
AREA = - 1.
PER = - 1.
IF( A( - B + C )1 / 5 / 5
1 IF( B( - C + A )2 / 5 / 5
2 IF( C( - A + B )3 / 5 / 5
3 PER = A + B + C
P = 0.3*PER
AREA = SQRT( P*(P - A )*( P - B )*( P - C)
5 RETURN END
END

در اين مثال مقادير متغيرهاي A C B در برنامه اصلي خوانده ميشود سپس
بكمك دستور CALL اين مقادير به برنامه فرعي منتقل گشته و پس از انجام مقايسه ها
و محاسبات لازم مساحت و پيرامون مثلث تعيين ميگردد . در مواقع اجراي دستور RETURN
مقادير محاسبه شده از طريق آرگومانها به برنامه اصلي منتقل گشته و
و محاسبات از بلافاصله بعد از دستور CALL دنبال ميگردد . در برنامه اصلي ، بسته
به مقادير آرگومانها منتقل شده از برنامه فرعي ، نتيجه محاسبات چاپ ميشود .
هر برنامه اصلي ميتواند بيش از يك برنامه فرعي FUNCTION و يا SUBROUTINE
داشته باشد و در اين صورت هر يك از برنامه هاي فرعي ميتوانند از برنامه هاي فرعي
ديگر استفاده كنند .
چنانكه در برنامه فرعي FUNCTION گفته شد در مورد برنامه فرعي SUBROUTINE نيز
بايد تعداد و ترتيب و همچنين مود آرگومانهاي دستور CALL مشابه با آرگومانهاي

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستورهاي تعيين نوع ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۲۴ مراجعه امروز
۴۷۴۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستورهاي تعيين نوع
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۲۶ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستورهاي تعيين نوع

متغيرها را برحسسب آنكه حرف اول آنها يكي از حروف شش گانه I L K J /
Mيا Nا باشد صحيح و در غير آن صورت اعشاري (Floating Point) (كه حقيقي نيز
ناميده ميشوند) ميباشند . ولي اين تقسيم بندي داراي دو اشكال است . اول آنكه
در علوم مهندسي حروف معيني براي نشان دادن مقادير خاصي بكار ميرود و بعنوان
مثال ، اغلب براي نشان دادن شدت جريان الكتريكي كه يك كميت حقيقي (يعني اعشاري )
است حرف I بكار ميرود ، حال آنكه طبق قرارداد فوق حرف I معرف يك كميت صحيح
است و چنانچه برنامه نويس بخواهد براي سهولت كار خود و آنهائيكه برنامه نوشته
شده را مطالعه ميكنند حرف I را براي نشان دادن شدت جريان بكار ببرد دچار اشكال
خواهد شد . دوم آنكه اينگونه تقسيم بندي تنها دو نوع متغير را در بر ميگيرد و
حال آنكه انواع ديگر متغيرها نيز در فرترن وجود دارد .
براي رفع اشكالات بالا ميتوان نوع متغيرها را بكمك دستورهاي تعيين Type)
(Statements مشخص نمود . دستورهاي تعيين نوع دستورهاي غير قابل اجرا هستند و
در اغلب موارد لازم است كه درابتدائ برنامه قبل از اولين دستور قابل اجرا نوشته
شوند .
دستور تعيين نوع صحيح و اعشاري صورت كلي دستور تعيين نوع صحيح و اعشاري
بترتيب بشكل :

INTEGER a1 / a2 / a3 /....
REAL n1 / n2 / n3 /....

ميباشد . متغيرهاي a3 / a2 / a1 كه در دستور INTEGER نوشته شده اند متغيرهاي
صحيح و N3 / n2 / n1 كه در دستور REAL ذكر شده اند متغيرهاي حقيقي منظور خواهند
گشت . البته چنانچه نام متغيري در دستور تعيين نوع ذكر نشوند ، نوع آن بر اساس
حرف اول نام آن مشخص خواهد گرديد .
مثال 1- در برنامه زير MAXو Aو بصورت متغيرهاي اعشاري بكار رفته اند :

REAL MAX
READ( 1 / 20 )MAX / A
20 FORMAT( 2F10.2)
A = SQRT( MAX )+ SQRT( A)

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

INTEGER A
DIMENSION A( 5 / 5)

ميتوان دستور تعيين نوع زير را نوشت :

INTEGER A(5/ 5)

دستور تعيين نوع دقت مضاعف - چون تعداد ارقام كميتهاي اعشاري نگهداري شده
در حافظه كامپيوتر محدود است و بعنوان مثال در كامپيوترآي بي ام سيستم 370 در
حدود 7يا 8ا رقم اعشاري ميباشد و چون دقت اين تعداد رقمهاي ذخيره شده ممكن است
براي انجام بعضي محاسبات كافي نباشد ، ازاينرو لازم است كه دربعضي موارد محاسبات
را با دقت بيشتري انجام داد .
دقت محاسبات را ميتوان با افزايش تعداد ارقام كميت هاي ذخيره شده بالا برد .
براي اين منظور بايد محاسبات را در مود دقت مضاعف (Double Precision) انجام
داد ، كه در آن صورت براي ذخيره كردن هر كميت از دو محل حافظه استفاده ميگردد
و در نتيجه تعداد ارقام ذخيره شده در مود دقت مضاعف كمي بيش از دو برابر تعداد
ارقام ذخيره شده در مود دقت ساده است . در اينجا بايد ياد آوري نمود كه اصولا"
در تبديل كميت هاي سيستم اعشاري به سيستم دوگاني همواره مقداري تقريب وجود
دارد و بديهي است كه در مود دقت مضاعف خطاي حاصل از اين تقريب كمتر خواهد بود.
در مود دقت مضاعف نيز كميتهاي ثابت يا متغير هستند . ثابتها با دقت مضاعف
بصورت ثابت هاي نمائي فرترن نمايش داده ميشود جز آن كه بجاي حرف E حرف D بكار
ميرود. بعنوان مثال 5D3.َ12 نمايشگر ثابت اعشاري (3 به توان 5 x 10.َ12) ميباشد.
مقدار حداكثر و حداقل توان كميتها در مود دقت مضاعف مانند مقادير مود دقت ساده
است .
متغيرها بادقت مضاعف را بايد با دستور تعيين نوع دقت مضاعف كه صورت كلي آن
شكل :

DOUBLE PRECISION a1 / a2 / a3....

ميباشد معرفي نمود كه در آن a3 / a2 / a1 نشان دهنده نام متغيرهاي با دقت
مضاعف است . ميتوان در محاسبات ازمخلوط مودهاي اعشاري ساده ودقت مضاعف استفاده
نمود و در چنين مواردي مقاديراعشاري ساده به دقت مضاعف تبديل و محاسبات در مود
دقت مضاعف انجام خواهد شد . بعنوان مثال DSIN سبب ميشود كه محاسبات لازم براي
تعيين سينوس زاويه مورد نظر در مود دقت مضاعف انجام شود .
داده هاي ورودي و خروجي بكمك ميدان D كه مشابه ميدان E است منتقل ميگيرند .
صورت كلي اين ميدان بشكل Dw.d

ميباشد كه مانند صورت كلي ميدان E است جز آنكه بجاي حرف E حرف D بكار رفته و
البته متغير مربوط به اين ميدان نيز بايد در مود دقت مضاعف باشد .
مثال 2- دربرنامه زير ريشه دوم عدد 10 درمود دقت مضاعف محاسبه و چاپ ميشود.

DOUBLE PRECISION A
A = DSQRT( 1.0D1)
WRITE( 3/12 )A
12 FORMAT( D30.17)

چنانچه برنامه فوق بكمك ماشين IBM 370 اجرا گردد ريشه دوم عدد 10 با دقت 17
رقم محاسبه و چاپ ميشود ، حال آنكه با دقت ساده بيش از 7 رقم دقت وجود نخواهد
داشت .
مثال 3- دستورهاي زير را در نظر بگيريد :

DOUBLE PRECISION A / B / C
F = B + C ** 2.32D - 1 - 4.2/X
A =( X + Y )* W

در دستور محاسباتي اول با آنكه 4.2و Xو در مود اعشاري ساده هستند ، عبارت
سمت راست علامت جايگزيني در مود دقت مضاعف انجام و بعلت آنكه F در مود اعشاري
ساده است نتيجه بصورت دقت ساده ذخيره ميشود . در دستور محاسباتي دوم عبارت سمت
راست علامت جايگزيني در مود اعشاري ساده محاسبه و نتيجه بصورت دقت مضاعف ذخيره
ميگردد .
دستور تعيين نوع مختلط - در زبان فرترن ، ميتوان محاسبات مربوط به كميت هاي
مختلط را انجام داد . در اين گونه موارد بايد ثابتها و متغيرهاي لازم را در مود
معرفي نمود . ثابت هاي مختلط بصورت دو عدد حقيقي در داخل يك جفت پرانتز قرار
ميگيرند و بكمك كاما از يكديگر جدا ميشوند . عدد اول نشان دهنده جزئ حقيقي
(Real Part) و عدد دوم نمايشگر جزئ انگاري (Imaginary Part) ميباشد . به اين
ترتيب ثابت (4/6 / 2.3) نماينده عدد مختلط 4/6 + 2.3i خواهد بود .
متغيرهاي مختلط را بايد با دستور تعيين نوع مختلط كه صورت كلي آن بشكل :

COMPLEX a1 / a2 / a3 /...

ميباشد معرفي نمود كه در آن a3 / a2 / a1 نشان دهنده نام متغير مختلط است .
براي هر متغير مختلط دو محل (كلمه ) در حافظه كامپيوتر منظور ميگردد و هر محل
حاوي يك مقدار حقيقي ميباشد .
چنانچه درجلوي توابع كتابخانه ئي حرف C افزوده شود سبب ميشود محاسبات مربوطه
در مود مختلط انجام گيرد . بعنوان مثال CSIN سبب ميشود كه محاسبات لازم براي
محاسبه سينوس زاويه مختلطي در مود مختلط انجام شود .
در محاسبات ميتوان از مخلوط مودهاي اعشاري و مختلط استفاده نمود كه در چنين
مواردي مقادير اعشاري بصورت اعداد حقيقي خالص تلقي ميشوند ونتيجه محاسبه هميشه
يك مقدار مختلط خواهد بود .
مثال 4- برنامه زير كسينوس مجموع دو زاويه مختلط را محاسبه و چاپ ميكند :

COMPLEX A / B / N
READ( 1 / 10 )A / B
10 FORMAT( 4F10.0)
N = CCOS( A + B)
WRITE( 3/20 )N
20 FORMAT( 17 H COMPLEX COSINE = / 2F10.5)
STOP
END

توجه شود كه در فرمت هاي فوق براي انتقال هر مقدار مختلط دو ميدان منظور
گرديده است .
يادآوري - براي معرفي يك كميت مختلط بصورت دو عدد حقيقي در داخل يك جفت
پرانتز ، نميتوان از متغيرهاي حقيقي استفاده نمود . بعنوان مثال معرفي كميت
مختلط 8.6 + 6.2i بكمك دستورهاي زير مجاز نمياشد :

A = 8.6
B = 6.2
C =( A / B)

ايش داد :

کيفيت مقاله :
عالی خوب متوسط ضعيف


ميدان A ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۲۷ مراجعه امروز
۴۷۴۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ميدان A
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۱۴ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

ميدان A

ميدانهاي Fو Iوو Eو صرفا" ميتوانند براي انتقال داده هاي عددي مورد استفاده
قرار گيرند ، ليكن گاه لازم است عمليات روي داده هاي غير عددي مانند نام افراد و
علامت هاي خاص انجام گيرد . براي اين منظور ميتوان از ميدان A استفاده نمود .
صورت كلي ميدان A بشكل : Aw

ميباشد كه درآن w تعداد كاراكترها ( يعني حروف يا اعداد يا علاماتي ) است كه به
كمك ميدان A منتقل ميگردند . نحوه استفاده ازميدان A بستگي به تعداد كاراكترهائي
دارد كه ميتوان داخل يك كلمه در حافظه كامپيوتر ذخيره كرد . در سيستم آي بي ام 370
هر كلمه داراي 4 بايت است و براي ذخيره كردن هر كاراكتر يك بايت لازم
ميباشد .
بنابراين در اين سيستم در هر كلمه ميتوان تعداد 4 كاراكتر ذخيره نمود . اين
تعداد را در اينجا براي سهولت بحث c خواهيم ناميد .
براي ذخيره كردن داده ها ، اگر w برابر c باشد ، كاراكترهاي مورد نظر در يك
كلمه ذخيره ميشوند . اگر w بزرگتر از c باشد . كاراكتر مورد نظردر سمت چپ كلمه
قرار ميگيرند وبقيه خانه هاي كلمه خالي ميمانند و بالاخره اگر w كوچكتر c باشد ،
بيش از يك كلمه براي ذخيره كردن كاراكترها لازم خواهد بود .
مثال 1- نام شخصي روي يك كارت منگنه شده است و ميخواهيم اين نام را وارد
حافظه كامپيوتر كنيم . اگر نام شخص REZA و براي كامپيوتر مورد استفاده c برابر 4
باشد در اين صورت براي ذخيره كردن كاراكترهاي نام مورد نظر يك كلمه لازم
است . دستور ورودي لازم را ميتوان بصورت زير نوشت :

READ( 1 / 5 )B
5 FORMAT( A4)

بكمك دستورهاي فوق نام مورد نظر كه بايد در 4 ستون اول كارت داده هاي ورودي
منگنه شده باشد در محلي درحافظه بنام B ذخيره ميشود در مورد چاپ نام ذخيره شده
بصورت فوق ميتوان دستورهاي خروجي زير را بكار برد :

WRITE( 3 / 2 )B
2 FORMAT( 5X / A4)

اين دستورها سبب خواهد شد كه REZA در ستونهاي 6تا 9ا كاغذ چاپ شود . در
مثال فوق اگر بجاي REZA منظور انتقال كلمه ALL بود ميتوانستيم براي خواندن و
نوشتن آن يا از ميدان A3 استفاده كنيم و يا چون جاهاي خالي نيز عينا" مانند
كاراكترها با ميدان انتقال داده ميشوند از ميدان A4 استفاده نمائيم .
مثال 2- ميخواهيم نام زير را انتقال دهيم :

HAFEZ - SHIRAZI

چون ذخيره كردن 13 كاراكتر در يك جمله ممكن نيست بايد اين نام را حداقل در
چهار كلمه ذخيره نمود . دستورهاي ورودي لازم براي خواندن اين نام را ميتوان به
صورت زير نوشت :

READ( 1 / 3 )W / X / Y / Z
3 FORMAT( 4 A 4)

بكمك دستور فوق 16 كاراكتر (13 كاراكتر براي نام مورد نظر باضافه 3 جاي
خالي ) انتقال داده ميشود . اگر نام مورد نظر در ستونهاي 1 تا 13 يك كارت منگنه
شود در اين صورت محتوي متغيرهاي W Z Y X به صورت زير خواهند بود :

| H | A | F | E | Z | - | S | H | I | R | A | Z | I | | | |

W X Y Z

در مورد انتقال كاراكترهائي كه تعداد آنها بيش از c است معمولا" براي ذخيره
كردن كاراكترها از عناصر يك رشته استفاده ميشود . به عنوان مثال 16 كاراكتر
بالا را ميتوان در يك رشته 4 عنصري بصورت زير قرار نمود :

DIMENSION S( 4)
READ( 1 / 5( )S(I )/ I = 1 / 4
5 FORMAT( 4 A 4)

مثال 3- چنانچه بخواهيم تمام محتويات يك كارت را منگنه شده رابخوانيم و چاپ
كنيم ، ميتوان برنامه ئي مشابه با برنامه زير نوشت :

DIMENSION TITLE( 20)
READ( 1 / 5( )TITLE( I )/ I = 1 / 20)
5 FORMAT( 20 A 4)
WRITE( 3 / 6( )TITLE( I )/ I = 1 / 20)
6 FORMAT( 10 X 20 A 4)
CALL EXIT
END

در مثالهاي فوق ميتوانستيم محتويات كارت را بصورت 40 ميدان 2 ستوني و يا 80
ميدان يك ستوني نيزبخوانيم كه درآن صورت لازم ميبود بعداTITLE " وميدان فرمتهاي

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور GO TO محاسبه شده ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۳۰ مراجعه امروز
۴۷۴۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور GO TO محاسبه شده
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۷ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور GO TO محاسبه شده

انتقال كنترل بصورت نامشروط بكمك دستور GO TO و بصورت مشروط بكمك دستور IF
محاسباتي انجام مي شود . يكي ديگر از شكل هاي انتقال مشروط در زبان فرترن چهار
دستور GO TO محاسبه شده (Computed GO TO statement) است كه صورت كلي آن بشكل :

GO TO( n1 / n2 .... / nm )/ i

ميباشد كه درآن / n2 / n1....nm . شماره دستورهاي قابل اجرا و i يك متغير صحيح
بدون زير نويس و بي علامت است كه مقدار آن بين 1تا mا تغيير ميكند . اگر i برابر 1
يا 2ا ... يا m باشد ، كنترل بترتيب به دستورهاي شماره n1يا n2ا يا ... nm
انتقال مييابد . لازم بتذكر است كه مقدار i بايد عموما" ميان 1و mو باشد و گرنه
در مورد سيستم آي بي ام 370 كنترل به دستور GO TO محاسبه شده منتقل ميگردد .
در مورد اكثر سيستمهاي ديگر چنين دستوري نادرست تلقي ميشود .
مثال - دستور زير را در نظر بگيريد :

GO TO( 10 / 25 / 17 / 9 )/ MP

اگر MP برابر 1 باشد كنترل به دستور شماره 10 منتقل ميشود و اگر MP بترتيب
برابر 4 / 3 / 2 باشد كنترل به ترتيب به دستورهاي شماره / 25 َ9 / 17 منتقل .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور IF منطقي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۹۳۳ مراجعه امروز
۴۷۴۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور IF منطقي
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۳۹۴ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور IF منطقي

از انواع ديگر دستورهاي انتقال كنترل مشروط در زبان فرترن ، دستور IF منطقي
(Logical IF Statement) است كه مشابه بايك انتقال دو شاخه ميباشد . اين انتقال
براساس آنكه مقدار آرگومان اين دستور ، بعداز ارزيابي ، درست (True) يا نادرست
(False) باشد انجام ميگيرد . صورت كلي دستور IF منطقي بشكل :

IF( a )s

ميباشد كه در آن a يك عبارت منطقي و s يك دستورفرترن قابل اجرا غير از دستور DO
يا دستور IF منطقي ديگر است . منظور از عبارت منطفي عبارتي است كه مقدار آن
فقط ميتواند درست يا نادرست باشد . دستور s اجرا ميشود و در اين حالت اگر s
دستور انتقال كنترل نباشد كنترل پس از دستور s به دستوري كه بلافاصله بعد از
دستور IF منطقي قرار دارد منتقل ميشود . چنانچه a نادرست باشد ، دستور s اجرا
نميشود و كنترل مستقيما" به دستور بعد از دستور IF منطقي انتقال مييابد .
عبارتهاي منطقي را ميتوان بكمك اپراتورهاي رابطه ائي (Relational Operators)
زير نوشت :
اپراتور رابطه ائي علامت رياضي معادل معني
EQ

. = برابر با NE

. # نابرابر با LT

كوچكتر از <. LE

<. \ كوچكتر از يا برابر با Gt

بزرگتر از >. GE

. / بزرگتر از يا برابر با >
اگر اپراتورهاي رابطه ائي فوق رابا R نشان دهيم و E2 / E1 دو دستور محاسباتي
باشند E1 R E2 يك عبارت منطقي خواهد بود مانند عبارت منطقي زير :

MAX . LE. 20

در عبارت فوق اگر AMX كوچكتر ازيا برابربا 20 باشد مقدار عبارت درست و گرنه
مقدار آن نادرست خواهد بود . لازم است كه E1 و E2و هر دو در مود صحيح يا هر دو
در مود اعشاري باشند .
مثال 1- دستور زير را در نظر بگيريد :

IF( X . GT . Y )GO TO 22

اگر X بزرگتر از Y باشد . مقدار آرگومان (يعني مقدار عبارت منطقي ) درست است
و كنترل به دستور شماره 22 منتقل ميشود و اگر X بزرگتر از Y نباشد ، مقدار
آرگومان نادرست است و كنترل مستقيما" بدستور بعد از دستور IF منطقي منتقل
ميگردد .
مثال 2- دستور زير را در نظر بگيريد :

IF( ABS( X - X1 . )LE . 1 . 0 E - 4 )B = X + 1 . 0

اگر قدر مطلق X1 X-X كوچكتريا برابر با4 - 10 باشد ابتدا دستور B = X + 1.0
اجرا ميشود و سپس كنترل به دستور بعدي منتقل ميشود ولي در غير اينصورت كنترل
بدون اجرا دستور B = X + 1.0 بلافاصله به دستور بعد از دستور IF منطقي منتقل
ميگردد .
ميتوان با استفاده ازاپراتورهاي زير كه اپراتورهاي منطقي يا اپراتورهاي بول
(Boolean Operators) ناميده ميشوند عبارت منطقي پيچيده تري ساخت :
اپراتور منطقي معني
AND
. و
OR
. يا
NOT
. نه
مثال 2-
الف )

STOP(B(. GT. X.G. AND. A.A. EQ. X.E) IF

اگر X برابر با A و همچنين بزرگتراز B باشد اجرا برنامه متوقف ميشود و گرنه
دستور قابل اجرا بعدي اجرا ميگردد .
ب )

GO TO 20(5(. LT. OR.N/N . 0.. NE. T.N) IF

اگر T برابر باصفر نباشد و يا كوچكتراز 5 باشد دستور GO TO 20 اجرا ميشود .
دقت كنيد كه T و صفر هر دو اعشاري و Nو 5و هر دو صحيح هستند .
در ضمن توجه نمائيد كه در مورد .AND. درست بودن مقدار عبارت منطقي فقط در
صورتي است كه هر دو شرايط طرفين .AND. درست باشد . حال آنكه در مورد .OR. كافي
است كه تنها يكي از دو شرايط طرفين .OR. صادق باشد .
پ )

P = X + 2.0((0(.َLT.1.10 X.L) . NOT) IF)N

در اين دستور اپراتور منطقي .NOT. شرط درستي عبارت منطقي را نفي ميكند ،
يعني دستور P = X + 2.0 موقعي انجام ميگردد كه مقدار 0.َLT.1.10 X.L نادرست
باشد و بنابراين دستور بالا معادل دستور زير است :

IF( X . GE . 10.0 )P = X + 2.0

اپراتور منطقي .NOT. همواره به عبارتي كه در سمت راست آن داخل يك جفت پرانتز

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور EQUIVALENCE ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۳۶ مراجعه امروز
۴۷۵۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور EQUIVALENCE
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۳۸۹ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور EQUIVALENCE

در زبان فرترن براي اختصاص دادن محله هاي حافظه به بيش از يك متغير از دستور EQUIVALENCE
(بمعناي هم ارزي ) استفاده ميشود و بدين ترتيب در استفاده از حافظه
كامپيوتر نيز صرفه جوئي به عمل ميايد . صورت كلي اين دستور بشكل :

EQUIVALENCE( a1 / a2 / ).... /( b1 / b2)....

ميباشد . اين به معناي آن است كه متغيرهاي / a2 / a1... داراي يك محل در حافظه
خواهند بود و بهمين ترتيب متغيرهاي / b2 / b1.... نيز يك محل مشترك در حافظه
اشغال خواهند كرد .
مثال 1- دستور زير را در نظر بگيريد :

EQUIVALENCE( A / B / C )/( M / N)

اين دستور سبب ميشود كه Aو Bوو Cو در يك محل حافظه ذخيره شوند ( و بنابراين
همواره مقدار آنها يكي خواهد بود) و همچنين Mو Nو نيز داراي يك محل حافظه
خواهند بود .
مثال 2- دستور زير را در نظر بگيريد :

DIMENSION R(1000 )/ S( 2000)
EQUIVALENCE( R( 1 )/ S(1))

و اين بسب ميشود كه عناصر (1) Rو (1() S در يك محل ، عناصر (2) Rو (2() S در
يك محل ديگر و همينطور (1000) R و (1000) S در يك محل در حافظه قرار گيرند .
باين ترتيب ميتوان مشاهده نمود كه در اين مثال تعداد 1000 محل حافظه صرفه جوئي
شده است ، بديهي است تغيير دادن هر يك از عناصر هم ارز سبب تغيير نمودن مقدار
عنصر هم ارز مربوطه ميشود .
دستور EQUIVALENCE دستور غير قابل اجرا است و در اغلب موارد لازم است كه در امه قبل از اولين دستور قابل اجرا قيد گردد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور COMMON ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۳۹ مراجعه امروز
۴۷۵۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور COMMON
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۲۸ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور COMMON

معمولا" هر برنامه فرعي يك واحد مجزا است و متغيري مانند X دريك برنامه فرعي
داراي محل جداگانه اي از متغير X ديگري در برنامه اصلي يا در برنامه فرعي ديگر
است . ممكن است برنامه نويس بخواهد كميتي را كه در چند برنامه فرعي با يك يا
چند نام مختلف بكار رفته است در يك محل حافظه ذخيره كند كه در اين صورت تغيير
دادن مقدار كميت مورد نظر در هر يك از برنامه هاي فرعي يا اصلي سبب تغيير اين
كميت در تمام برنامه ها ميشود .
اين عمل را ميتوان با معرفي كردن كميت مورد نظر بعنوان آرگومان دستور CALL
انجام داد . روش ديگري براي انجام دادن اين منظور وجود داردكه بويژه در مواردي
كه تعداد متغيرهاي مشترك زياد است از آن استفاده ميشود . اين روش ، استفاده از
دستور COMMON (بمعناي مشترك ) است كه صورت كلي آن بشكل :

COMMON a1 / a2...

ميباشد . چنين دستوري سبب ميشود كه براي نگهداري هر يك از متغيرهاي مشترك a1 و a2
و غيره محلي در حافظه اختصاص داده شود و تمام برنامه هاي فرعي كه دستور فوق
درآنها تكرار ميشود (و ممكن است a1و a2و و غيره درآنها نام ديگري داشته باشند)
مشتركا" از اين محل استفاده خواهند كرد .
مثال - اگر در يك برنامه اصلي دستورهاي زير :

DIMENSION A( 10 / 5)
COMMON X / Y / A

و در برنامه فرعي دستورهاي

DIMENSION B( 10 / 5)
COMMON X / C / B

نوشته شده باشد ، متغير X در يك محل ومتغيرهاي Yو Cو در يك محل ديگر و تمام
عناصر رشته هاي Aو Bو در 50 محل ديگر بطور مشترك بين برنامه هاي اصلي و فرعي
ذخيره خواهد شد .
براي معرفي كردن متغيرهاي زيرنويس دار ميتوان بجاي دستورDIMENSION مستقيما"
از دستور COMMON استفاده نمود . بعنوان مثال بجاي دو دستور برنامه اصلي فوق
ميتوان دستور زير را نوشت :

COMMON X / Y /

کيفيت مقاله :
عالی خوب متوسط ضعيف


دستور DATA ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۴۲ مراجعه امروز
۴۷۵۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دستور DATA
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۱۸ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

دستور DATA

در بعضي موارد ممكن است برنامه نويس از نظر سهولت بخواهد بجاي آنكه مقدار
متغيرهارا هنگام اجرا برنامه بخواند ، قبلا" در موقع ترجمه برنامه تعيين نمايد.
اين منظور بكمك دستور DATA كه صورت كلي آن بشكل :

DATA list1 / a1 / a2 /.../ / list2 / b1 / b2 / ... / /...

است انجام ميگيرد كه در آن list1 شامل ليست متغيرهائي است كه مقدار آنها به
ترتيب a2و a1و و... ميباشد list2 شامل ليست متعيرهائي است كه مقدار آنها بترتيب b1
و b2و و... ميباشد .
برنامه نويس ميتواند در ضمن اجرا برنامه مقادير متغيرهاي بكار رفته دستور DATA
را تغيير دهد كه البته اين كار سبب از بين رفتن مقادير اوليه اين متعيرها
كه در دستور DATA مشخص شده اند خواهد بود .
مثال 1- دستور زير را در نظر بگيريد :

DATA R / X(1 )/ M / 2.5 / 0 ./- 2 / / A / B / 2*1.0 /

اين دستور معادل با دستورهاي زير ميباشد :

R = 2.5
X(1 )= 0.
M = - 2
A = 1.0
B = 1.0

مثال 2- دستور زير را در نظر بگيريد :

DATA( S(I )/ I = 1 / 3 )/ 1.0 / 2.0 / 3.0

اين دستور سبب ميشود كه مقدار (1)/ S(2()/ S(3()S بترتيب 1.0. 3.0 / 2.0.
باشد .
چنانچه مقدار متغيرهاي ليست دستور DATA كميت غير عددي باشند لازم است مقدار
آنها در داخل ميدان H ( و يا داخل يك جفت علامت نقل ) قرار گيرند .
مثال 3- دستور

DATA NAME1 / 3 H ALI / / NAME2 / 'REZA' /

سبب ميشود كه كلمه ALI در محل حافظه بنام NAME1 و كلمه REZA در محل حافظه بنام NAME2
ذخيره شود .
دستور DATA دستور غير قابل اجرا است و دراغلب موارد لازم ميباشد كه درابتدائ مه قبل از اولين دستور قابل اجرا قيد گردد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


ترتيب قرار دادن دستورهاي غير قابل اجرا ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۴۵ مراجعه امروز
۴۷۶۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ترتيب قرار دادن دستورهاي غير قابل اجرا
نويسنده : مديريت سايت
موضوع : FORTRAN [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۱ اين مقاله ۴۳۴ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

ترتيب قرار دادن دستورهاي غير قابل اجرا

اغلب كامپيوترها محدوديت هائي براي ترتيب نوشتن دستورهاي غير قابل اجرا
قائل ميشوند . راهنماي زير براي اغلب مترجم ها قابل قبول است :
| Type Statement |

ترتيب دستورهاي غير قابل | | DIMENSION
اجرا در صورتيكه وجودداشته باشند . | | MMON ابتدائ برنامه | EQUIVALENCE |
| DATA |
| FORMAT |

|
تمام دستورهاي قابل اجرا | متن برنامه
END
در راهنمائي فوق دستور FORMAT در مورد پيروي از ترتيب نشان داده شده مستثني
است و ميتواند در هر جاي برنامه قبل از دستور END و حتي بعد از دستور STOP ر گيرد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


طريقه استفاده از Microsoft Agent در دلفی ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۸۴۸ مراجعه امروز
۴۴۴۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
طريقه استفاده از Microsoft Agent در دلفی
نويسنده : صادق علوی زاده
موضوع : Delphi [image] نسخه قابل چاپ [image] فايل نمونه
تاريخ نشر : ۲۶/۱۰/۱۳۸۱ اين مقاله ۵۵۷۷ بار مطالعه شده است
۸۱ نفر تا به حال به اين مقاله رای داده اند.
با سلام

Microsoft Agent يكي از سرگرم كننده ترين فن آوريهاي Microsoft مي باشد كه تا كنون توانسته بسيار مورد علاقه كاربران قرار بگيرد. Agentها به برنامه هاي شما جذابيت زيادي مي دهند و امكان ارتباط بهتر و جالبتري را با كاربر ايجاد ميكنند. در اينجا من مي خواهم شما را با Microsoft Agent و طريقه بكار گيري آن در برنامه هاي خودتان را آموزش بدهم كه اميدوارم مفيد باشد. از آنجايي كه من اين امكان را در دلفي استفاده كرده ام براي شما هم مثالهاي دلفي آورده ام ...

اولين باري كه از اين تكنولوژي استفاده شد در برنامه Office 97 بود كه خيلي مورد علاقه كاربران قرار گرفت. من اون موقع خيلي گشتم تا بتونم از اين امكان استفاده كنم ولي خوب نتونستم ): اما بعد ها با پيشرفت كردن علم برنامه نويسي و همچنين با پيشرفت كردن عقل Microsoft (كه از نظر من بزرگترين كلاه بردار قرن هست) اين تكنولوژي در اختيار ديگران هم قرار گرفت... براي همين در اوايل فقط در Office بود كه از اين امكان استفاده مي شد.

حالا اينا رو گفتم اما ببينيم اصلاً Agent چي هست؟؟!!!

شما اگه از Office استفاده ميكنيد حالا هر كدوم از برنامه هاش كه باشه (Word,Excel,FrontPage,...) يك شكلكي رو ميبينيد كه هميشه نسبت به كارهايي كه انجام ميدين يك سري حركات از خودش نشون ميده كه هم سرگرم كننده هست هم آموزنده. حالا حتماً متوجه شدين كه در مورد چي صحبت ميكنيم (هر چند كه ميدونم ميدونستيد (; ) خوب حالا مي خواهيم ببينيم كه چطور ميشه از اين امكان تو برنامه هاي خودمون استفاده كنيم مثلاً وقتي برنامه داره كار ميكنه يه شكلكي بياد براي كاربر ادا در بياره تا طرف نفهمه كه برنامه چيكار ميكنه (: يا مثلا موقع ذخيره كردن و بازيابي كردن و يا جستجو و ... يك سري حركات مربوط به آن عمل انجام بده...

اينكار خيلي ساده است و فقط كافي هست شما يك Agent رو انتخاب كنيد و در برنامتون تعريفش كنيد و بعد هر كاري كه خواستين رو بهش دستور بدين تا براتون انجام بده . ضمنا شما لازم نيست اصلاً غصه درست كار كردن اون رو بخورين چون خود Windows اونو كنترل ميكنه كه يه وقت كار بدي نكنه ((:

شما نميتونيد كه Agent رو داخل يك جعبه مكالمه (Dialog Box) قرار بدين و فقط ميتونيد جاي اوليه اون رو انتخاب كنيد بعد نمايش بدين و كاربر ميتونه اونو به دلخواه خود تغيير مكان بده با Drag كردن اينكار رو انجام ميده. خوب حالا براي شروع كار به يك سري Agent نياز داريم كه البته همراه ويندوز هميشه يك سري همراه هستند بهترين اونها كه ميتونه كارهاي زيادي انجام بده (منظور حالتهاي زيادي براش تعريف شده) Merlin هست كه يك جادوگر پير مي باشد. براي Download كردن اينها ميتونيد به سايتهايي كه معرفي ميكنم يك سري بزنيد. ضمناً شما خودتون هم ميتونيد يك Agent طراحي بكنيد كه براي اينكار بايد از يك سري نرم افزار استفاده كنيد.

براي اينكه كاربر بتونه از Agent برنامه شما استفاده كنه بايد حتماً Microsoft Agent Server‌ رو نصب كنه. كه البته من تا حالا تو هر ويندوزي كه برنامم رو اجرا كردم نصب شده بوده فكر كنم اين برنامه همراه خود ويندوز هست (; ولي اگه نبود شما ميتونيد يك سري به آدرس زير بزنيد اونجا چيزهاي جالبي در اين مورد داره كه يك مطالعه كنيد بد نيست.

http://msdn.microsoft.com/workshop/imedia/agent/defualt.asp

در اين آدرس اخرين باري كه رفتم مطالب زير بود حالا اگه تا حالا بيلي جون حوصله اش از اونا سر نرفته باشه و عوض نكرده باشد بايد باشه:

- The Agent Server

- The Characters/Agents

- A Text-to-Speech pices

- A Voice command (input) pices

اين مطالب تحت عنوان Microsoft Agent Software Development Kit هست كه در اونجا شما همچنين ميتونيد نرم افزار Microsoft Agent Character Editor رو براي درست كردن Agent دريافت كنيد. در اين مقاله ما در مورد Voice Command‌ (فرمان هاي صوتي) و طراحي Agent صحبت نميكنيم و فقط طرز استفاده از اين امكان رو شرح ميدم كه خودتون بعداً ميتونيد در موردش بيشتر جستجو كنيد. ما براي كارمون فقط احتياج به Agent Server و يك كاراكتر داريم كه اگه روي ويندوزتون ندارين ميتونيد از اينجا Download بكنيد.

خوب حالا ميريم سر اصل مطلب:

بعد از اينكه مطمئن شدين روي ويندوزتون AgentServer رو دارين دلفي رو اجرا كنيد و مراحل زير رو مو به مو انجام بدين:

1- Component|Import ActiveX Control رو انتخاب كنيد.

2- Microsoft Agent Control رو از تو ليست پيدا كنيد و رو ي دكمه Install كليك كنيد.

3- خوب حالا بايد تو قسمت ActiveX يك آيكوني شبيه به MenInBlack داشته باشيد.

خوب تا يادم نرفته اينو بگم كه براي پيدا كردن يك كاراكتر روي ويندوزتون بايد براي acs.* جستجو كنيد كه البته به طور عادي اگر Agent Server نصب باشه توي شاخه Windows يك msagent بايد وجود داشته باشه و داخل اون هم يك شاخه ديگه به نام Char هم هست كه توش يك يا چند كاراكتر وجود داره كه اگر از XP استفاده ميكنيد حتماً يكيش Merlin.acs هست (كه من خيلي بهش علاقه دارم (: ) براي همين ما بايد تو برنامه مون چك كنيم كه آيا اين شاخه وجود داره يا نه اگه وجود داشت ميدونيم كه Agent Server روي ويندوز كاربر نصب هست و ما مي تونيم از Agent استفاده كنيم .

خوب براي اينكار بايد اول ActiveX رو به روي فرم منتقل كنيم با اينكار يك type با نام TAgent به تعاريف فرم اضافه ميشه . بعد بايد يك متغيير تعريف كنيم كه از نوع Boolean باشه تا با اون چك كنيم كه آيا Agent Server نصب هست يا نه براي اينكار ميشه از Code زير استفاده كرد:

TYourObject
   private
     AgentInstalled: Boolean;
     function AgentIsInstalled: Boolean;
     procedure CreateAndLoadAgentIfInstalled;
     function GetColorDepth: Word;
     function GetWinDir: String;
     procedure SetFormColor;
     function AgentWasClicked

شما ميتونيد روي ويندوز كاربر به دنبال اون شاخه و كاراكتري كه مي خواهيد از او استفاد هكنيد بگرديد و اگه بود كار رو باهاش شروع كنيد اگه هم نبود خوب ديگه كاربر بايد محيط خشك برنامتون رو تحمل كنه (;

حالا مثلاً ما مي خواهيم از Merlin استفاده كنيم :

{-----------------------------------------------}

function TYourObject.AgentIsInstalled: Boolean;

begin

Result := (FileSearch('Merlin.acs',

Format('%s\MSAGENT\CHARS', [GetWinDir]))<>'');

end;

{-----------------------------------------------}

function TYourObject.GetWinDir : string;

var

WinDirZ : array[0..256] of Char;

begin

GetWindowsDirectory(WinDirZ, SizeOf(WinDirZ));

Result := StrPas(WinDirZ);

end;

نكته : در بالا براي بدست آوردن نام شاخه اي كه ويندوز در آن نصب هست از API استفاده شده كه مسير كامل ويندوز را به ما ميدهد.

حال كه فهميديم كاربر امكان استفاده از Agent رو داره مي تونيم كار رو شروع كنيم. در ادامه بايد يك Object براي Agent خودمون بسازيم تا از اين به بعد از اون استفاده كنيم و مجبور نباشيم از ActiveX استفاده كنيم. براي اينكار از كد زير ميشه استفاده كرد:

implementation

 uses
   AgentDemoConsts,
   Registry,
   OLECtrls, AgentObjects_TLB;

 {-----------------------------------------------}
 procedure
   TYourObject.CreateAndLoadAgentIfInstalled;
 const
   RightBias = 80;
   TopBias   = 70;
 var
   tp: TPoint;
 begin
   if (AgentInstalled) and
     not (Assigned(RobotAgent)) then begin
     RobotAgent := TAgent.Create(Application);
     RobotAgent.Characters.Load('Merlin','Merlin.acs');
     { Move the Agent to the center of the screen }
     tp.x := (Screen.Width div 2)-(Width div 2);
     tp.y := (Screen.Height div 2)-(Height div 2);
     with RobotAgent.Characters.Item['Merlin'] do begin
       MoveTo(tp.x+RightBias, tp.y+TopBias, 0);
       Show(0);
       Play('Greet');
       Play('Explain');
       Speak(SDemoIntro, '');
       Play('Pleased');
       Play('RestPose');
       Speak(SWhisper, '');
       Speak(SMonotone, '');
       Speak(SMap, '');
     end;
   end;
 end;

چند خط اول كه مشخص هست چه كار ميكنه . اما بعد از اينكه كاراكتر تعريف شد (RobotAgent) اونو به Merlin نسبت ميديم وبعد هم اونو به وسط صفحه نمايش منتقل ميكنيم و حالا ميرسيم به مهمترين قسمت كار كه دستور دهي به Merlin هست.

با استفاده از Play شما ميتونيد به Agent دستور بدين اما براي هر Agnet دستورات متفاوت هست يعني ممكن هست كه دستوارتي كه براي Merlin كار ميكنه براي Robby (كه يكي ديگر از Agent ها هست) كار نكنه. شما اگه كاراكترتون رو خودتون درست ميكنيد خوب پس ليست دستوراتش رو داريد اما اگه اونو از جايي Download ميكنيد حتما ليست دستوارتش هم همراش هست مثلا شما ميتونيد در مورد Merlinو يا Robby و يا چند Agent ديگه از تو همون آدرسي كه در بالا دادم ليست دستوارتش رو بگيريد.

حالا در كد بالا ميبينيد كه در ابتدا از دستور Show استفاده شده اين دستور براي به نمايش در آوردن Agent هست و در تمامي آنها كار ميكنه . بعد با استفاده از Play كارهاي مورد نظرمون رو به Agent‌ ميگيم. مثلاً من در ابتدا با استفاده از دستور Greet از Agent خواستم كه سلام كنه و بعد هم با استفاده از Explain خواستم كه شروع كنه به گفتن يك سري مطالب كه با دستور Speak اونها رو كه در متغيير SDemoIntro قرار داده ام به صورت يك بالون كه بالاي سرش باز ميشه ميگه. شما براي اينكه بگين مطالب رو با چه حالتهايي بخونه مي تونيد از دستواراتي كه در جدول زير آوردم استفاده كنيد:

Addition | Resulting capability
\Chr="Whisper"\ | The Agent will whisper the following text.
\Pau=N\ | The Agent will pause for the designated number of milliseconds.
\Emp\ | The Agent will give special emphasis to the following phrase.
\Chr="Montone"\ | The Agent will emphasize nothing at all.
\Map= | The Agent will say one thing, and = "think" another.

خوب حالا براي اينكه بيشتر متوجه بشين در زير يك سري مثال آوردم كه ميتونيد اونها رو در برنامه استفاده كنيد و نقش هر كدوم از دستوارت رو ببينيد:

SFuzzyWuzzy = 'Fuzzy wuzzy was a bear;\Pau=500\ ' +

'fuzzy wuzzy had no hair;\Pau=500\ ' +

'fuzzy wuzzy wasn't very \Emp\fuzzy, \Emp\was he?';

SWhisper = '\Chr="Whisper"\Now I will whisper: ' +

'Whisper whisper whisper.';

SMonotone = '\Chr="Monotone"\Now I will speak in a ' +

'monotone. Pat Paulsen for President.';

SMap = '\Map="I will now continue to speak in ' +

'English, but you will see my words ' +

'translated into German in the balloon above ' +

'my head. How are you today? I am just ' +

'\Emp\dandy!"="Jetzt werde ich zwar immer ' +

'noch in Englisch reden, sie werden ' +

'aber meine Woerte im Balloon obenauf ins ' +

'Deutsch uebersetzt sehen. Wie geht es ' +

'Ihnen heute? Mir geht es ganz gut!"\';

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

ضمنا شما ميتونيد از Event ها هم در Agent استفاده كنيد و مثلا براي رويداد OnClick روي Agent‌ يك چيزي تعريف كنيد.

خوب در آخر از شما كه تا اينجا آمديد متشكرم و يك سري نكات رو هم بايد ذكر كنم :

1- اين مطالب حاصل تجربه خودم و همچنين برگرفته از يك سري مقالاتي بوده كه در اين مورد مطالعه كردم.

2- در مورد استفاده از اين كدهايي كه در اين مقاله آورده ام و همچنين در پايان اين مقاله ضميمه كرده ام هيچ گونه مسئوليتي بعهده من نخواهد بود كه درست كار كنه يا بزنه كامپيوتر شما رو بسوزونه !!!!!

3- استفاده از اين مقاله به شرط ذكرنام و آدرس اصلي مقاله در سايتها و جاهاي ديگر آزاد است .

4- اگه در اين مورد نظري دارين يا حتماً براي من ايميل كنيد خوشحال خواهم شد بشنوم.

موفق باشيد

صادق علوي زاده

کيفيت مقاله :
عالی خوب متوسط ضعيف


رموز Windows ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۳۲ مراجعه امروز
۴۸۴۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
رموز Windows
نويسنده : مجله رايانه
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۳۰۶۸ بار مطالعه شده است
۴۹ نفر تا به حال به اين مقاله رای داده اند.

رموز Windows

نازيلا دنيائي

با استفاده از ViceVersa تفاوت را در دايركتوري كپي شده مشاهده خواهيد نمود. از ابزار MS Backup در CD ويندوز مي‌توانيد ويندوز خود را سريعتر مجدد نصب نماييد.

مقايسه Folderها

زماني كه دايركتوري حجيمي را به مكان ديگر منتقل مي‌نماييد مي‌خواهيد از backup خود بابت انتقال صحيح اطمينان حاصل نماييد. بهترين راه مقايسه هر دو دايركتوري با استفاده از ViceVersa مي‌باشد. ViceVersa به شما تفاوت بين دايركتوري اصلي را با آنكه back-up است نشان مي‌دهد. همچنين با استفاده از اين ابزار اطمينان حاصل خواهيد نمود كه فقط آخرين نسخه فايلها در هر دو مكان مشخص وجود دارد. يكي از مفيدترين خصوصيات اين ابزار در Preview آن مي‌باشد كه به اين طريق نشان مي‌دهد كه چه تغييري رخ خواهد داد. استفاده از آن بسيار ساده است: فقط دايركتوريهاي Source و target (هدف) را مشخص نماييد. اگر دايركتوري شما فولدرهاي زيادي را شامل مي‌شود Setting و Include Sub Folders را قبل از زدن دكمه Compare انتخاب نماييد.

اگر مي‌خواهيد دايركتوري‌ها را از نظر error مقايسه نماييد Comparison method ،Settings و سپس Both را انتخاب كنيد. عمل به كندي صورت مي‌گيرد ولي نتيجه مطبوع است.

نصب مجدد سريع

هيچ backup و يا نصب مجدد سيستم نياز به نرم افزار ديگري ندارد. كاربران با دقت ويندوز 95 قبلاً Sysrec foder را در داخل دايركتوري مربوط به CD ويندوز مشاهده نموده‌اند. در اين قسمت سه فايل كه شامل يك Msbatch.inf و نيز يك فايل سودمند بنام Perestor.bat مي‌شود وجود دارد.

اين فايل در ارتباط با ابزار Backup مايكروسافت براي نگهداشتن PC شما از شرايط كاري عمل مي‌نمايد. قبل از نصب هر نرم‌افزار با اهميت بر روي PC، MS Backup را اجرا نموده و يك backup كامل از درايو C خود بگيريد. سپس محتوي فولدر Sysrec را در فلاپي Start-up خود كپي نماييد. سپس Pcrestor.bat كه باعث آوردن Setup ويندوز مي‌شود را اجرا نموده ويندوز را مجدداً نصب و آخرين backup خود را نگهداريد.

ايجاد مجدد آيكون Show Desktop

يك فايل متني كه خطوط زير در آن نوشته شده باشد ايجاد نماييد.

[Shell]
Command=2
IconFile=explorer.exe,j
[Taskbar]
Command=ToggleDesktop

فايل مذكور را با نام Show Desktop.scf در مسير C:\windows\system ذخيره نماييد. حال محيط text eitor خود را بسته و C:\windows\system را مرور نماييد تا از نداشتن پسوند .txt آن اطمينان حاصل نماييد. سپس روي آن right-click كرده و Create shortcut را انتخاب كنيد.

حال اين Shortcut را به روي Taskbar خود برده و يا آنرا در مسير زير C:\Windows\ApplicationData\Microsoft\InternetExplorer\QuickLaunch كپي نماييد. بر روي آيكون مورد نظر در Taskbar، Right-Click كرده و Rename را انتخاب و كلمه Desktop را بعنوان نام جديد وارد نماييد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


DataSnap, WebSnap ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۸۵۱ مراجعه امروز
۴۴۴۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
DataSnap, WebSnap
نويسنده : مجله رايانه
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۲۸۲۸ بار مطالعه شده است
۲۱ نفر تا به حال به اين مقاله رای داده اند.

DataSnap, WebSnap

ساسان نيكوكار DelphiNavigator@yahoo.com

پس از اينكه بورلند تكنولوژي MIDAS را در جهت انجام برنامه‌هاي چند لايه و تحت Web ارائه كرد در ويرايش جديد دلفي تكنولوژي را مطرح كرده كه مي‌توان گفت تاثير زيادي بر دنياي برنامه‌نويسي Web خواهد داشت. تكنولوژي Websnap در واقع پايه ويرايش WebBroker در دلفي 5 مطرح كرده است كه ويژگيهاي بسيار زيادي همراه آن مي‌باشد:

- Multiple Modules
- New wizards
- Server side scripting
- New component
- Surface design

Multiple Modules :

يك برنامه منفي Websnap مي‌تواند از چند مدل وب پشتيباني كند، در اين حالت چندين پياده‌ساز توانايي كاربردهاي يك يا چند پروژه مشابه را دارند بطوري كه كمترين تداخل بين آنها صورت گيرد براي اين منظور يك Wizard جهت ايجاد Websnap ايجاد شده است كه شما براحتي مي‌توانيد، انواع مدلها از قبيل Webappage، WebAppData، Webpage و WebData را ايجاد كنيد. مدل WebData همانند يك ظرف براي اجزاء كه شما بين برنامه Web خود به اشتراك مي‌گذاريد مي‌باشد.

مدل Webpage براي شما يك صفحه Web را در برنامه مورد نظر شما ايجاد مي‌كند كه داراي فرمت و تواناييهاي HTML مي‌باشد و شما توسط Websnap surface designer توانايي نمايش Scriptهاي خاصي خود را داريد.

Server-side scripting :

Websnap داراي اسكريپت نويسي سرويس دهنده مي‌باشد يك زبان ساده جهت طراحي و برنامه‌نويسي يك صفحه Web كه شامل:

- يك اسكريپت كه توانايي دسترسي به Componentهاي دلفي را دارد.

- از زبانهاي Script همانند VB يا JavaScript حمايت مي‌كند.

- ولي مي‌تواند تركيبي در اسكريپت و HTML باشد.

DataSnap :

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


Interface ويندوز را به دلخواه تغيير دهيد ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۳۵ مراجعه امروز
۴۸۵۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Interface ويندوز را به دلخواه تغيير دهيد
نويسنده : مجله رايانه
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۵۷۰ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

Interface ويندوز را به دلخواه تغيير دهيد

نازيلا دنيائي

با برنامه‌هايي چون Litestep ، Talisma، NextStart مي‌توانيد interface ويندوز خود را تغيير دهيد.

وقتي Explorer را با يك Shell جديد جايگزين مي‌كنيد يك interface جديد براي كار با ويندوز ايجاد نموديد. Shellهاي متنوع صورتهاي جالبي بهDesktop شما مي‌دهند. منظور از shell همان interface ويندوز مي‌باشد. Listestep محيط سيستم شما را به صورت Linux درمي‌آورد (و البته بدون نصب سيستم عامل).

با NextSTART مي‌توانيد منوهاي دلخواه خود را بسازيد (www.winstep.net/wsmain.html) پس از نصب هريك از نرم افزارهاي مذكور مستندات آنرا مطالعه نماييد تا بدانيد چگونه آنرا از ويندوز خود حذف نماييد.

اين برنامه‌ها Shell پيش فرض را براي خود اختصاص مي‌دهند و اين عمل با تغيير خطي در system.ini انجام مي‌گيرد. دقت كنيد كه قبل از Uninstall نمودن اين برنامه‌ها shell پيش فرض ويندوز را انتخاب كرده باشيد چرا كه پيغام خطايي مبني بر نصب نمودن مجدد ويندوز برايتان ظاهر مي‌شود. و اين بخاطر آنست كه ويندوز شما به دنبال shell قديمي خود مي‌گردد و آنرا نمي‌يابد. بايد ديسك Start-up را گذاشته و سه مرحله زير را اجرا نماييد.

- ابتدا از ديسك Start-up دستگاه را بوت نمايد وگزينه Start computer without CD-ROM Support را انتخاب نموده و منتظر شويد تا خط فرمان A:> ظاهر شود.

- edit C:\windows\system.ini را تايپ نموده و Enter را بزنيد. محيط edit براي System.ini باز شده خطي را كه با shell=’ ‘ شروع مي‌شود بيابيد.

- اين خط را به Shells explorer.exe تغيير دهيد. File و سپس Save را انتخاب و به دنبال آن File سپس Exit را برگزينيد. ويندوز خود را restart نماييد.

Serenade يك shell فشرده جايگزين براي ويندوز است. اين نرم افزار با محيط كاملاً جديدي جايگزين desktop ويندوز مي‌شود و در ضمن منابع كمتري را از نظر حافظه، پروسسور، و فضاي هارد نسبت به ويندوز استفاده مي‌كند.

با دوبار كليك بر روي S5 (كه البته پس از Unzip نمودن فايل S5 alpha3 آيكون آنرا خواهيد ديد) اين برنامه اجرا مي‌شود. Wallpaper background مثل ويندوز بوده و برنامه‌هاي كاربردي در سمت چپ بالاي صفحه قرار دارند. تمامي فولدرها و applicationها در آن باز هستند. نام فولدرها نمايش داده نمي‌شود. مي‌توانيد برنامه را با راست كليك و انتخاب Close ببنديد. عملكرد Serenade بصورت زير مي‌باشد.

وقتي Serenade اجرا شد اين گزارش را طبق شكل نشان مي‌دهد. نيازي نيست به آن توجه كنيد بهتر است آنرا ببنديد. براي گذر بين فولدرها و applicationها بر روي عنصري كه مدنظرتان است در قسمت چپ در بالاي ويندوز كليك نماييد.

مي‌توانيد با راست كليك بر روي آنها و انتخاب از منوي drop-down سرعت نمايش را در قسمت راست بالاي ويندوز تنظيم نماييد.

براي Uninstall نمودن اين نرم افزار بر روي هر قسمتي از desktop راست كليك كرده و Quit و سپس Ok را انتخاب نماييد. براي Uninstall نمودن فقط كافي است دايركتوري Sirenade را انتخاب نموده و آنرا حذف نماييد.

در كنار اين application ساعتي وجود دارد كه مي‌توانيد با راست كليك بر روي آن و انتخاب Fast، Normal، Slow سرعت آنرا تغيير دهيد.

اگر در هر نقطه‌اي از desktop سمت چپ ماوس را كليك نماييد منوي اصلي برنامه را مشاهده خواهيد نمود و با راست كليك ماوس منوي Shut-down ظاهر مي‌شود.

براي اجراي برنامه سمت چپ ماوس را كليك كرده و از منوي Strat به منوي Programs رفته و آن برنامه را انتخاب نماييد.

برنامه‌هاي ديگري وجود دارند كه مي‌توانيد از interface ويندوز به آنها Switch نماييد در حالي كه هنوز از منوهاي ويندوز استفاده مي‌كنيد، به عبارت ديگر Explorer shell را تغيير نمي‌دهيد بلكه ظاهر آنرا تغيير مي‌دهيد. از جمله اين برنامه‌ها EFX، Chroma و WindowsBlinds مي‌باشد.

EFX يك برنامه كوچك با حجم 90k براي download مي‌باشد و سازگار با NT و 98 و Windows 95 است كه با پنج سطح متفاوت وجود دارد و مي‌توانيد از http://skinz.org صورتهاي مختلف را download نماييد. با وجود نسخه beta بودن يسيار آسان براي كاركردن با آن مي‌باشد.

Chroma داراي skinهاي متفاوتي است كه برخي از آنها بسيار خوب هستند. جدا از NT بر روي تمامي نسخه‌هاي ويندوز اجرا مي‌شود.

WindowBlinds كه با 2000 و Me و 98 و Windows95 كار مي‌كند Skinهاي نسبتاً خوبي دارد و در صورتي كه سرعت پنتيوم شما كند باشد سريعاً اجرا مي‌شود. در ضمن داراي كاربري آسان نيز مي‌باشد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


حذف email در Server با C++ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۰۲ مراجعه امروز
۴۵۱۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
حذف email در Server با C++
نويسنده : نازيلا دنيائي
موضوع : Visual C++ [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۷۸۶ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

با استفاده از Indy يك برنامه براي email مي‌خواهيم بسازيم. وقتي email جديدي وجود داشته باشد برنامه مشخص مي‌كند كه از كجاست و موضوع آن چيست و نيز چه موقع فرستاده شده است. در ضمن اندازه هر پيغام را نشان مي‌دهد در نتيجه اگر حجم زياد باشد مي‌توانيد بدون download نمودن آنرا از Server حذف نماييد.

Indy را مي‌توانيد از سايت www.nevrona.com/Indy بگيريد. اين برنامه Sniffer ليستي از پيغامهاي موجود در POP3 Server را نشان مي‌دهد. هر پيام نشانگر زمان فرستادن و اندازه مي‌باشد.

هر دقيقه يكبار Sniffer از POP3 Server مي‌پرسد كه چه تعداد پيام منتظر هستند و اگر جواب بيش از آخرين دفعه باشد (يعني اگر mail جديدي آمده باشد) برنامه ليست را refresh مي‌كند. هر زمان مي‌توانيد بر روي پيام كليك كرده و دكمه Delete this message at server را كه در انتهاي پنجره وجود دارد كليك كنيد. اين عمل باعث حذف پيام بدون download كردن آن مي‌شود. گاهي اوقات Outlook Express در هنگام download نمودن يك پيام Crash نموده و email پس از هر Crash بر روي Server باقي مانده و شما مانع از آنها شده‌ايد تا آنكه حذف شدند. اما قبل از اجراي اين برنامه بايد برخي از جزئيات را درباره emailaccount خود بدانيد. POP3 را كه بكار مي‌بريم سه چيز نياز دارد: آدرس POP3 server، Username و كلمه‌رمز آن account. وقتي Sniffer براي اولين بار شروع به كار مي‌كند يك جعبه گفتگو براي وارد كردن جزئيات email باز مي‌كند.

سپس اين اطلاعات در Account.ini نوشته مي‌شوند كه البته در همان دايركتوري خود برنامه وجود دارد. بنابراين هر زمان كه برنامه شروع مي‌شود ديگر نيازي به واردكردن اطلاعات نيست بلكه فقط بايد كلمه Ok را بزنيد. حال ببينيم كه كد برنامه چگونه كار مي‌كند. در هنگام اجرا ي برنامه FormCreate يك نمونه از فرم براي Account Details ايجاد كرده و آنرا براي بازيابي اطلاعات email از كاربر بكار مي‌برد. ديگر وقت را براي آنكه مشاهده نماييم اين فرم چگونه در فايل INI مي‌نويسد و يا از آن مي‌خواند

به هدر نمي‌دهيم زيرا خود آن يك عنصر استاندارد مي‌باشد.

void_fastcall TfrmMain::Timer1Timer(TObject Sender)
{
// Disallow nested calls to this routine
if (Lock) return; Lock++;

++NoStatusChange;
POP3->KeepAlive(); //keep the server interested...
--NoStatusChange;

if (TickCount++ % 6 != 0) return; // only do real check once per minute...

// Time to re-check emails status
try
{
// Get number of messages waiting
int MessageCount = POP3->CheckMessage();
if (MessageCount > LastMessageCount) {
MessageBeep (-1);
StatusBar->SimpleText=IntToStr(MessageCount)+ "messages were found";
RetrieveMessageHeaders (MessageCount);
LastMessageCount = MessageCount;
}
}
_finally
{
Lock--;
StatusBar->SimpleText = "Waiting...";
}
}

وقتي اطلاعات بازيابي شد و كاربر آنراCancel نكرد ارتباط با POP3 Server برقرار مي‌شود، اين عمل ارتباط شما با اينترنت را برقرار نمي‌كند چرا كه برنامه فرض كرده كه قبلاً از طريق dial-up به آن وصل شده‌ايد. اگر ارتباط dial-up برقرار نشده باشد برنامه پايان يافته و يك error مي‌دهد. اگر همه موارد درست بود زير برنامه Timer =timer كه فعال كننده timer است فراخوانده مي‌شود. اين زير برنامه يك دستور ‘do-nothing’ را به server مي‌فرستد كه هدف آن آگاه نمودن Server از برقراري ارتباط ما مي‌باشد. هر ده دقيقه KeepAlive صدا زده مي‌شود.

از هر شش بار فراخواندن Timer/Timer (يكبار در دقيقه) checkmessages فراخوانده مي‌شود تا به ما نشان دهد چند پيام در Server منتظر باقي ماندند. نكته مهم استفاده از متغير Lock مي‌باشد. با افزايش اين متغير در Timer/Timer و كاهش آن در هنگام خروج ما مانع از تيك زمان در موقع اجراي تيك قبلي مي‌شود. نكته مهم در اينجاست كه پيام حذف شده تا زمان قطع كامل Server از نظر فيزيكي حذف نمي‌شود. اين مشابه فرمان ‘Commit’ در email هنگام كار با database مي‌باشد. درهنگام حذف email كد متغير LastMessageCount و TickCount را براي كنترل مشاهده ليست تنظيم مي‌نمايد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


بكاربردن XML در نرم‌افزارهاي بانك‌اطلاعاتي دلفي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۸۵۴ مراجعه امروز
۴۴۴۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بكاربردن XML در نرم‌افزارهاي بانك‌اطلاعاتي دلفي
نويسنده : احمد عدالت
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۳۱۵۱ بار مطالعه شده است
۲۴ نفر تا به حال به اين مقاله رای داده اند.

درصورتيكه بخواهيد به سرويس‌دهنده‌هاي بانك‌اطلاعاتي وصل شويد ، دلفي امكان كاركردن با XML Documentها ، اگر آنها بصورت سرويس‌دهنده‌هاي بانك‌اطلاعاتي باشند را به شما ميدهد .

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

Dave Boss
dboss@MyCo.com

Joe Engineer
jengineer@MyCo.com

Robin Smith/name>
rsmith@MyCo.com

Leonard Devon
ldevon@MyCo.com(/address>

XML components

Joe,
Attached is the specification for the new XML component support in Delphi.
This looks like a good solution to our business-to-business application!
Also attached, please find the project schedule. Do you think its reasonable?
Dave.

دلفي براي كار كردن با XML Documentها در برنامه‌هاي بانك‌اطلاعاتي خود ، از مجموعه كامپوننتهائي كه بسته‌هاي داده‌اي را ميتواند به XML Document تبديل كرده ( خصوصيت Dataي يك client dataset)و همچنين بصورت معكوس ، XML Documentها را به بسته‌هاي داده‌هاي تبديل كنند ، استفاده ميكند . براي استفاده از اين كامپوننتها ، ابتدا شما بايد نحوه تبديل‌ داده‌هايتان را بين XML Document و بسته داده‌اي مشخص كنيد . هربار كه ميخواهيد نحوه تبديل داده‌ها را مشخص كنيد ، ميتوانيد از كامپوننتهاي مشخص شده براي موارد زير استفاده كنيد :

Attachfile | Name | Address
XMLSpec.txt | Joe Engineer | jengineer@MyCo.Com
Schedule.txt |  |

  • تبديل كردن XML Document به بسته داده‌اي .
  • فراهم كردن و به‌روز كردن داده به/از يك XML Document .
  • بكاربردن يك XML Document بصورت سرويس‌گيرنده (Client ) از يك فراهم‌كننده ( Provider ) .

تعريف كردن نوع تبديلات

قبل از اينكه بتوانيد بسته‌هاي داده‌اي و XML Documentها را به يكديگر تبديل كنيد ، ابتدا مي‌بايست ارتباط بين metadataها در يك بسته داده‌اي و گره‌هاي متناظر آن در XML Documentها را تعريف كنيد . يك تشريح از اين ارتباط ، در يك XML Document ويژه‌اي كه فايل transformation ناميده مي‌شود ، ذخيره شده است.

هر فايل transformation شامل دو چيز مي‌باشد : ترسيم كردن ( Mapping ) ارتباطات بين گره‌ها در يك الگوي XML و فيلدهاي يك بسته داده‌اي ، و اسكلت XML Document كه نتايچ ساختار داده‌اش را در فايل transformation نمايش ميدهد.

يك فايل transformation به دو روش Map مي‌شود : از يك الگوي XML يا Document به يك بسته داده‌اي يا از metadataي موجود در يك بسته داده‌اي به يك الگوي XML . غالباً فايلهاي transformation را بايد بصورت دوتائي ( جفتي ) ايجاد كنيد : يك فايل براي Map كردن انتقال XML به بسته داده‌اي و ديگري براي Map كردن انتقال بسته داده‌اي به XML .

Name | Address
Robin Smith | rsmith@MyCo.COM
Leonard Devon | ldevon@MyCo.COM

براي اينكه فايل‌هاي transformation را براي Map كردن ايجاد كنيد ، از ابزارهاي XML Mapper كه در شاخه bin دلفي وجود دارد استفاده كنيد .

Map كردن ارتباط گره‌هاي XML و فيلدهاي بسته داده‌اي با يكديگر

XML يك روشي بر پايه فايل‌هاي متني را براي ذخيره كردن يا تشريح داده‌هاي ساخت‌يافته فراهم مي‌كند . Datasetها راه ديگري براي ذخيره كردن و تشريح داده‌هاي ساخت‌يافته فراهم ميكنند . براي تبديل يك XML Document به يك dataset ، ميبايست تناظرهاي بين گره‌هاي موجود در يك XML Document و فيلدهاي آن dataset را مشخص كنيد. بعنوان مثال XML Documentي كه يك مجموعه از پيغامهاي email را نمايش مي‌دهد . مثال زير ، نمونه‌اي است براي نمايش يك پيغام :

SenderName | SenderAddress | To | CC | Subject | Content | Attach
Dave Boss | dboss@MyCo.COM | (DataSet) | (DataSet) | XML components | (MEMO) | (DataSet)

يك Map كردن طبيعي بين Document و يك dataset ، هر پيغام email به يك ركورد را Map خواهد كرد . اين ركورد از نام و آدرس فرستنده فيلدهائي خواهد داشت . چون يك پيغام email ميتواند چندين گيرنده داشته باشد ، در نتيجه اين گيرنده ( ) به يك dataset داخلي Map خواهد شد . بطور مشابه ، cc ليست Mapها به يك dataset داخلي است . خط subject مي‌بايست به يك فيلد رشته‌اي تازمانيكه پيغامش يك memo فيلد باشد ، Map خواهد شد . چون يك پيغام مي‌تواند چندين اسم فايل الحاق شده داشته باشد ، درنتيجه اسامي فايلهاي الحاق شده بايد به يك dataset داخلي Map شود . بنابراين email مذكور به يك dataset ، تا اندازه‌اي شبيه به زير ، Map خواهد شد.

در اينجا dataset داخلي در فيلد ميباشد

dataset داخلي در فيلد “CC” مي‌باشد

و dataset داخلي در فيلد “Attach” مي‌باشد

اينچنين تعريف كردن ، يك نوع Map كردن از گره‌هاي XML Documentي را مشخص مي‌كند كه مي‌توانند تكرار و به datasetهاي داخلي Map شوند . عناصر دستورئي كه مقدار داشته و فقط يكبار نمايش داده ميشوند ( شبيه به .. ) به فيلدهاي نوع داده‌اي ( datatype ) از داده‌اي كه ميتواند بصورت مقدار نمايش داده شود ، Map ميشوند .

خصوصيات اين دستورات ( شبيه به خصوصيت AttachFile از دستور Attachment ) بصورت Map كردن به فيلدهاست. توجه كنيد كه همه دستورات موجود در XML Document در datasetهاي متناظرشان ظاهر نمي‌شوند . بعنوان مثال ، عنصر .. ، عنصر متناظر در datasetي كه از آن نتيجه مي‌شود ، ندارد . بعنوان نمونه ميتوان از عناصري كه مقدار دارند ، عناصري كه ميتوانند تكرار شوند و يا خصوصيات يك دستور را به فيلدهائي از يك dataset (شامل فيلدهاي dataset داخلي) Map ميكنند ، نام برد . در اين حالت استثنا نيز وجود دارد و آن زمانيست كه يك گره پدر در XML Document به يك فيلدي كه داراي مقدار است Map شده و آن فيلد از مقادير گره‌هاي بچه تشكيل شده است . بعنوان مثال ، يك XML Document ممكن است شامل مجموعه‌اي از دستورات بصورت زير باشد :

Mr.
John
Smith

كه در اين حالت ميتواند به يك فيلد dataset با مقدار Mr. John Smith ، Map شود .

استفاده از XMLMapper

ابزار XMLMapper كه همان xmlmmaper.exe مي‌باشد ، به سه روش امكان Map كردن را در اختيار شما قرار مي‌دهد :

  • از يك الگوي XML موجود ( يا document ) به يك datasetي كه شما تعريف كرده‌ايد . اين روش زماني مفيد خواهد بود كه شما قصد داشته باشيد يك برنامه بانك اطلاعاتي ايجاد كنيد تا با داده‌هائي كه در يك الگوي آماده XML داريد ، كار كنيد.
  • از يك بسته داده‌اي موجود به يك الگوي جديد XML كه توسط شما تعريف شده است .اين روش زماني مفيد خواهد بود كه قصد داشته باشيد تا اطلاعات موجود در بانك اطلاعاتي يك XML را نمايش دهيد ، بعنوان مثال براي ايجاد كردن يك سيستم جديد ارتباطي تجاري به تجاري.
  • بين يك الگوي موجود XML و يك بسته داده‌اي موجود . اين روش هم زماني مفيد واقع خواهد شد كه شما يك الگوي XML و يك بانك اطلاعاتي داشته باشيد ، كه هردو را بصورت اطلاعات و به همان روشي كه ميخواهيد با آنها كار بكنيد ، تشريح كند .

زمانيكه Map كردن را تعريف ميكنيد ، ميتوانيد فايلهاي transformation را كه براي تبديل XML Documentها به بسته‌هاي داده‌اي و براي تبديل بسته‌هاي داده‌اي به XML Documentها بكار مي‌روند را توليد كنيد . فقط متوجه اين قضيه باشيد كه فايل transformation بصورت directional مي‌باشد : يك Mapكننده ميتواند براي توليد هردو فايل transformation ، از XML به بسته داده‌اي و بالعكس ، استفاده شود .

توجه: Map كننده XML با موجود بودن دو فايل قابل اعتماد است : DLLهاي ( midas.dll و msxml.dll ) كه بطو مستقيم ميتوان با آنها كار كرد . از داشتن هردوي اين فايلها مطمئن شويد . قبل از اينكه بخواهيد از xmlmapper.exe استفاده كنيد بايد DLLها را نصب كنيد . در نهايت msxml.dll ميبايست بصورت يك سرويس‌دهنده COM رجيستر شده باشد . شما ميتوانيد با استفاده از Regsrv32.exe آن را رجيستر كنيد .

بارگذاري ( Load ) كردن يك الگوي XML يا بسته داده‌اي

قبل از اينكه بتوانيد يك Mapكننده را تعريف و يك فايل transformation توليد كنيد ، ابتدا مي‌بايست توصيفات XML Document و بسته داده‌اي را كه شما map كرده‌ايد ، load كنيد .

شما ميتوانيد فايل يك XML Document يا يك يك الگوي XML را با انتخاب كردن منوي File/Open و سپس انتخاب نوع فايل Document يا Schema در ديالوگ مربوطه ، Load كنيد . در همين پنجره با انتخاب نوع فايل بسته داده‌اي ميتوانيد يك فايل بسته داده‌اي را Load كنيد .

تعريف كردن Map كننده‌ها

Map كننده بين يك XML Document و يك بسته داده‌اي ، احتياج به همه فيلدهاي موجود در بسته داده‌اي و يا همه عناصر دستوري موجود در XML Document را ندارند . بنابراين شما بايد ابتدا عناصري را كه قرار است Map شوند را مشخص كنيد . براي مشخص كردن اين عناصر ، صفحه Mapping را در اين ديالوگ انتخاب كنيد .

براي مشخص كردن عناصر يك Dcoment يا يك الگوي XML كه به فيلدهاي موجود در يك بسته داده‌اي Map شده‌اند ، صغحه Sample يا Structure را از قسمت XML Document انتخاب كرده و بر روي گره‌هاي عناصري كه به فيلدهاي بسته داده‌اي Map شده‌اند ، دوبار كليك كنيد .

براي مشخص كردن فيلدهاي بسته داده‌اي كه به عناصر دستوري يا خصوصيات موجود در XML Document ، Map شده‌اند ، بر روي گره‌هاي مربوط به اين فيلدها در قسمت Datapacket دوبار كليك كنيد .

اگر شما فقط يك قسمت از Map كننده را بخواهيد Load كنيد (Xml Document يا بسته داده‌اي ) ، ميتوانيد طرف ديگر را بعد از انتخاب گره‌هاي ديگر كه Map شده‌اند ، توليد كنيد .

توليد كردن فايلهاي transformation

براي توليد كردن فايل transformation ، مراحل زير را اجرا كنيد :

  1. ابتدا Radio buttonي كه مشخص ميكند چه فايل transformationي بايد ايجاد كنيد را انتخاب كنيد.
    • اگر ميخواهيد از بسته داده‌اي به XML Document ،Map كنيد ، كليد Datapacket to XML را انتخاب كنيد.
    • اگر ميخواهيد از XML Document به بسته داده‌اي Map كنيد ، كليد XML to Datapacket را انتخاب كنيد .
  2. اگر قصد داريد كه يك بسته داده‌اي توليد كنيد ، شما بايد از كليدهاي راديوئي موجود در بخش Create Datapacket As استفاده كنيد . اين كليدها امكان مشخص كردن اينكه چگونه ميخواهيد از datapacketها استفاده كنيد را به شما خواهند داد .
  3. كليدهاي Create و Test Transformation را براي توليد كردن يك نسخه از فايل transformation در حافظه ، كليك كنيد . Map كننده XML ، XML Documentهائي را كه بايد براي بسته داده‌اي موجود در قسمت datapacket توليد شوند و يا بسته داده‌اي كه بايد براي XML Documentي كه در قسمت XML Document توليد شوند را نمايش مي‌دهد .
  4. و در آخر اينكه ، گزينه File/Save/Transformation را براي ذخيره كردن فايل transformation انتخاب كنيد . فايل transformation يك فايل ويژه XML ( با پسوند .xtr ) است كه تبديلهائي را كه شما تعريف كرده‌ايد را تشريح ميكند .

تبديل كردن XML Documentها به بسته‌هاي داده‌اي

هر بار كه مي‌خواهيد يك فايل transformationي را ايجاد كنيد كه نشان ميدهد ، چگونه يك XML Document را به يك بسته داده‌اي تبديل كنيد ، ميتوانيد بسته داده‌اي را براي هر XML Document كه با الگوي بكاربرده شده در فايل transformation مطابقت دارد ، ايجاد كنيد . سپس اين بسته داده‌اي ميتواند به يك dataset سرويس‌گيرنده و به يك فايل كه از فايل پايه‌اي بانك اطلاعاتي برنامه گرفته شده ، وصل شود . كامپوننت TXMLTransform يك XML Document را به يك بسته داده‌اي تبديل كرده كه اين بسته داده‌اي براي Map شدن در يك فايل transformation آماده مي‌باشد .

توجه: شما ميتوانيد از كامپوننت TXMLTransform براي تبديل يك بسته داده‌اي كه بصورت XML نمايش داده شده ، به شكل مورد نظر در يك XML Document دلخواه ، استفاده كنيد .

مشخص كردن منبع (XML Document ، (Source

سه روش براي مشخص كردن منبع XML Document وجود دارد :

  • اگر منبع Document ، يك فايل .xml بر روي ديسك باشد،ميتوانيد از خصوصيت SourceXmlFile استفاده كنيد.
  • اگر منبع Document يك رشته‌اي‌از XML موجود در‌حافظه باشد،ميتوانيد از‌خصوصيت SourceXml استفاده‌كنيد .
  • اگر يك واسط (IDOMDocument ،(Interface براي منبع Document داريد ، ميتوانيد از خصوصيت SourceXmlDocument استفاده كنيد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


چگونه بينندگان Web Site خود را افزايش دهيد؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۳۸ مراجعه امروز
۴۸۵۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چگونه بينندگان Web Site خود را افزايش دهيد؟
نويسنده : نازيلا دنيائي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۴۹۲ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

اگر افراد در سايت شما سرگردان شوند به URL ديگري رفته و ديگر به سايت شما بازنمي‌گردند. به اين دليل است كه navigation خوب، linkهاي ساده، بخشهاي مشخص و سلسله مراتب واضح ضروري بنظر مي‌رسند.

اولين مسئله براي طراحان وب navigation مي‌باشد. اكثر بازديدكنندگان عادت نموده‌اند تا linkها را بصورت آبي يا بنفش ببينند و يا عكسها را در هنگام اشاره بصورت دست بنگرند.

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

سپس هر بخش home page كوچك خود را به همراه منو خواهد داشت بنابراين بازديدكنندگان در زمان برگشت به بخش ديگر سايت به جزئيات بيشتري توسط شما معرفي مي‌شوند. اگر محتوي بين دو بخش قرار گيرد به آساني مي‌توانيد به محتوي مشابه از دو منو link بزنيد يا آنكه به اطلاعات مرتبط آن بخش وسط را link كنيد. در ضمن مي‌ توانيد يك صفحه طولاني را با link زدن به قسمتهاي مختلف آن راحتتر گردانيد. مي‌توانيد سرفصلها را خلاصه كرده و اجازه دهيد بازديدكنندگان تنها با يك كليك در headline به قسمت موردنظر خود بروند. راه ديگر براي آسان نمودن navigate استفاده از <a name ="top"></a> در بالاي صفحه HTML body است و سپس استفاده يك link بصورت <a href="#top">Jump back to the top for the navbar</a> در پايين براي كمك به خوانندگان مي‌باشد.

Navbar كنترل پنل (Control panel) مربوط به وب سايت است و مي‌تواند درهر Form ظاهر شده linkهاي Text، فرمها و buttonهاي گرافيكي را شامل شود. هرچقدر پيچيده‌تر باشد از تعداد بينندگان خود مي‌كاهد. ساده‌ترين راه براي ايجاد navigation bar ساختن ليستي از linkها و بكاربردن يك ليست نامنظم (<ul>) براي فرمت نمودن آنها مي‌باشد. اگر مي‌خواهيد linkهاي شما شمرده شوند بجاي آن از <OL> استفاده نماييد. يك narbar ساده را كه به موارد موردنظر link مي‌خورد بيان مي‌كنيم:

<Strong>Bands We Link:</Strong>
<UL>
<LI><a href = "radiohead.htm">Radiohead</a>
<LI><a href = "kylie.htm">Kylie</a>
<LI><a href = "floyd.htm">Floyd</a>
</UL>

براي سلسله مراتب عميقتر ميتوانيد Listها را داخل يکديگر قرار دهيد. براي انجام اين عمل يک list را با <ul> قبل از بستن بعدي با </ul> آغاز کنيد. اين کار خصوصا در ايجاد site map ها موثر است.

کيفيت مقاله :
عالی خوب متوسط ضعيف


آسيب‌پذيري Login ID در SQL Server 7.0 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۹۸ مراجعه امروز
۵۲۱۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آسيب‌پذيري Login ID در SQL Server 7.0
نويسنده : رامين حيدري
موضوع : SQL [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۳۰۷۲ بار مطالعه شده است
۳۷ نفر تا به حال به اين مقاله رای داده اند.

يك نقص امنيتي در الگوريتم پنهان سازي مورد استفاده در پنهان كردن اسم رمز و Login ID در Microsoft Enterprise Manager for SQL Server 7.0 وجود دارد. اين مشكل زماني رخ مي‌دهد كه بخواهيد SQL Server جديدي را در Enterprise Manager نصب ‌كنيد يا SQL server نصب شده‌اي را ويرايش ‌كنيد (منظور زماني است كه برخي مشخصه‌هاي آن تغيير مي‌دهيد). اگر SQL Server ، Login name به جاي يك Domain ، User name ويندوز بكار رود و checkbox عنوان "Alway prompt for login name and password" ست نشده باشد،‌ LoginID و اسم رمز به صورتي ضعيف پنهان شده و در رجيستري ذخيره مي‌شود.

هنگامي كه يك (database Administrator)DBA به داخل يك workstation با يك log ، Profile مي‌شود LoginID و اسم رمز، هر دو در كليد رجيستري ذخيره مي‌شوند، اين اطلاعات به عنوان يك فايل با نام NTUSER.DAT (در ويندوز NT) يا USER.DAT (در ويندوز 95 يا ويندوز 98) زماني كه كاربر logoff مي‌كند ذخيره مي‌شود. فرد متخاصم مي‌تواند اين فايل را در يك ويرايشگر متن باز كرده و DBA ، loginID و اسم رمز پنهان شده را ببينيد. فرد متخاصم مي‌تواند اسم رمز و login ID رمز شده پنهان شده را برگردانده و loginID و اسم رمز را بدست آورد. وجود اين مشكل امنيتي به متخاصمين محلي و راه دور اين اجازه را مي‌دهد كه اسم رمز Administrator سيستم را بدست آورده و كنترل كاملي روي پايگاه داده روي سرور داشته باشند. اين مشكل امنيتي در Microsoft Enterprise Manager for SQL server 7.0 وجود دارد. سيستم پنهان سازي كه براي پنهان كردن اسم رمز و SQL server ، LoginID نصب شده بكار مي‌رود، قابل كشف است. روش پنهان سازي از جانشيني الفبايي استفاده مي‌كند و هركدام از كاراكترهاي Unicode در اسم رمز با دو بايت متناسب با موقعيتشان در رشته، XOR شده‌اند. اگر checkbox با عنوان “Always prompt for login name and password” هنگامي كه SQL server نصب مي‌شود ست نشده باشد، LoginID و اسم رمز به صورت ضعيفي در رجيستري در قسمت :

--------------------------------------

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\MSSQLServer\SQLEW\Registered Server X]

--------------------------------------

ذخيره مي‌شود. اطلاعات ذخيره شده در HKEY_CURRENT_USER زماني در دسترس است كه كاربر در حال حاضر log شده باشد در اين حال زماني كه كاربر ويندوز NT به سيستم log مي‌شود يك كپي متفاوت از HKEY_URRENT_USER لود مي‌شود و هنگامي كه كاربر Logoff مي‌كند محتويات HKEY_URRENT_USER در فايل NTUSER.DAT يا USER.DAT ذخيره مي‌شود و اين فايل‌ها را مي‌توان در Notepad ويندوز باز كرد و loginID و اسم رمز را براحتي در آن ديد اگر DBA از يك workstation ديگري، به سيستم log كند، فايل NTUSER.DAT روي همان workstation كه كاربر از طريق آن به سيستم log شده است ذخيره مي‌شود.

براي حل اين مشكل امنيتي و استفاده مطمئن از SQL server، مايكروسافت پيشنهاد كرده كه از Windows Integrated security استفاده شود زيرا در مد Integrated security (امنيت يكپارچه)، اسم رمزها هيچگاه ذخيره نمي‌شوند.

اگر SQL server ، LoginID براي Logging به يك سرور در Enterprise Manager تعيين شده باشد، مايكرسافت پيشنهاد مي‌كند كه از انتخاب “Always Prompt for Login name and password" براي جلوگيري ذخيره اسم رمزها در رجيستري استفاده كنيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقايسه ADO و ADO.NET ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۰۷ مراجعه امروز
۵۲۲۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقايسه ADO و ADO.NET
نويسنده : حسن الله مراد
موضوع : ADO [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۲۷۸۶ بار مطالعه شده است
۳۶ نفر تا به حال به اين مقاله رای داده اند.

شركت مايكروسافت در ويژوال بيسيك ورژن 3 كه در سال 1993 ارائه داد از Jet كه هسته اصلي MS Access بود براي ايجاد ارتباط با بانكهاي اطلاعاتي استفاده نمود البته براي استفاده بهتر برنامه نويسان ، Jet را در غالب مجموعه Object هائي تحت عنوان (Data Access Object ) آورد. در نسخه 4 و 5 ويژوال بيسك ، ماكروسافت روشي ديگر براي ارتباط با بانكهاي اطلاعاتي تحت عنوان (Remote Data Object ) RDO را مطرح ساخت اين روش براي برنامه نويسي Client / Server روش مناسبي بود.

در دوم سپتامبر سال 1998 وقتي ماكروسافت ويژوال بيسيك ورژن 6 را ارائه داد روش جديدي تحت عنوان ( Activex Data Object ) ADO را مطرح ساخت در اين روش كه پايه و اساس آن OLEDB بود ماكروسافت بر خلاف DAO و RDO كه ساختاري پيچيده و سلسله مراتبي داشتند، از ساختاري ساده و مجزا ( غير سلسله مراتبي ) استفاده كرد و در واقع ADO هم شامل Object هائي است كه برنامه نويس بتواند از آنها براي ايجاد ارتباط با بانكهاي اطلاعاتي و انجام عمليات روي آنها استفاده كند و در تاريخ 13 February سال 2002 كه ماكروسافت نسخه نهائي Visual Basic.Net را ارائه داده روشي جديد براي كار با بانكهاي اطلاعاتي تحت عنوان ADO.Net را آورده است. اين نسخه از ويژوال بيسيك برخلاف نسخه‎هاي قبل بطور كامل مباحث OOP را پشتيباني مي‎كند ( FULL OOP ) در واقع ADO.Net هم مانند ADO و RDO و ADO شامل ساختاري براي ارتباط و انجام عمليات روي بانكهاي اطلاعاتي است. ADO.net همانند RDO و DAO و برخلاف ADO داراي ساختار سلسله مراتبي مي‎باشد. در اين مقاله مي‎خواهيم به مقايسه ADO و ADO.net بپردازيم. ADO در ورژنهاي مختلفي در اين چند سال اخير به بازار آمده است با آمدن SQL Server 2000 ورژن جديد ADO يعني ورژن 2.6 از اين محصول ارائه شد و اكنون هم ADO 2.6 در سايت ماكروسافت قابل Download مي‎باشد.

آخرين ورژن ADO شامل 9 تا Object است كه عبارتند از :

Connection
Command
Recordset
Parameter
Field
Error
Property
Record
Stream

آبجكت Connection امكان ارتباط با Data Source كه شامل بانك اطلاعاتي است را فراهم مي‎سازد. بعنوان مثال اگر بخواهيم از آبجكت Recordset براي اضافه و يا حذف و يا تغيير در محتواي ركوردي استفاده كنيم اين آبجكت از Connection براي ايجاد ارتباط با بانك اطلاعاتي مثلاً SQL Server استفاده مي‎كند اما همانطور كه گفته شد و در شكل ملاحظه مي‎شود ساختار آبجكتهاي ADO بصورت سلسله مراتبي نيست و مي‎‎توان مثلا Recordset اي ايجاد نمود كه مستقل از آبجكت Connection بتواند با بانك اطلاعاتي ارتباط برقرار نمايد.

در ADO علاوه بر آبجكتها، چهار Collection هم ديده مي‎شود كه عبارتند از :

Parameters
Fields
Properties
Errors

كه هركدام از آنها شامل آبجكتهائي از همان نوع هستند بعنوان مثال ساختاري كه براي Recordset كشيده شده بيان كننده آن است كه اين آبجكت شامل Collection هاي Fields و Properties بوده و مثلاً Collection مربوط به Fields شامل آبجكتهاي فيلد است.

آبجكت فيلد اطلاعاتي را راجع به يك ستون از Recordset در خود نگه داشته است.

در ADO آبجكت Command هم وجود دارد كه از آن مي‎توان براي اجراي يك فرمان SQL استفاده نمود البته بهترين روش براي اجراي Stored Procedure نيز استفاده از متد Execute مربوط به همين آبجكت است .

بعنوان مثال :

Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset

cn.Open " Provider = sqloledb ; Data Source=serverName
              ; Initial Catalog = northwind ", "sa" , "password"
cmd.ActiveConnection = cn
cmd.CommandText = "sp_who"
cmd.CommandType = adCmdStoredProc

Set rs = cmd.Execute
Debug.Print rs(0)
rs.Close

از آبجكت Parameter هم براي مشخص كردن مقادير پارامترهاي ورودي يك ‌ Stored Procedure استفاده مي‎كنيم.

آبجكت Property براي استفاده از Dynamic Property استفاده مي‎شود كه Property هايي هستند كه وابسته به Provider بوده و استاندارد نيستند .

از Record براي دسترسي به يك سطر از Recordset و ويژگيهاي مربوط به آن سطر استفاده مي‎كنيم .و آبجكت Stream هم به منظور ذخيره و بازيابي اطلاعات بصورت باينري در يك فيلد از Record در نظر گرفته شده است.

تا اينجا باساختار ADO آشنا شديم حال به تشريح ADO.net مي‎پردازيم .

ADO.Net مجموعه‎اي از Class هاي Interface ها و دستوراتي جهت مديريت و كار با بانكهاي اطلاعاتي است. در بحث Net . مجموعه‎اي از Class هاي مربوط به هم در يك غالب تحت عنوان ‌ Name Space ارائه شده است Net. شامل تعدادي Name Space است كه در غالب .Net Framework قرار دارد. تمام ساختار ‌ ADO.net در چهار NameSpace قرار دارد كه عبارتند از :

System.Data.SqlClient.
System.Data.OleDb.
System.Data.Odbc.
System.Data.

اگر بخواهيم از بانكهاي SQL Server استفاده كنيم System.Data.SqlClient بهترين انتخاب است در اين NameSpace امكاناتي فراهم شده تا بتوانيم Application هاي بنوسيم و در آنها با SQL Server ارتباط برقرار نمائيم بطوريكه برنامه‎ها از Performance بالائي برخوردار باشند.

در صورتي كه كاربر بخواهد از بانكهاي رابطه ‎اي ديگر نظير Oracle استفاده كند ميتواند از System.Data.OleDb بهره گيرد.

System.Data.Odbc براي ارتباط با بانكهاي اطلاعاتي از طريق ODBC ميباشد System.Data هم شامل Provider هاي خاص نظير DataSet و DataTable است. ADO.net نيز شامل Object ها و Collection هائي است كه از مهمترين آنها مي‎توان موارد ذيل را شمرد:

OleDBConnection
OleDBCommand
OledbDataReader
OleDBDataAdapter
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
DataTable
DataRelation

OleDBConnection آبجكتي است شبيه به آبجكت Connection در ‌ ADO ، كه امكان ايجاد ارتباط با بانك را فراهم مي‎سازد اين آبجكت متدهايي براي اجراي فرامين SQL نيز داراست .OleDBCommand هم مشابه آبجكت Command در ‌ ADO مي‎باشد.

از اين آبجكت نيز براي اجراي Stored Procedure و اجراي فرامين SQL استفاده مي‎شود. آبجكت بعد OledbDataReader است كه براي گرفتن اطلاعات از ‌Database استفاده مي‎شود. البته لازم به ذكر است Resultset اي كه با اين روش ساخته مي‎شود بصورت ReadOnly و Forwardonly مي‎باشد. OleDBDataAdapter آبجكت جديدي در Ado.net است كه خود شامل چهار آبجكت براي انجام فرامين SQL مي‎باشد كه عبارتند از :

SelectCommand
InsertCommand
UpdateCommand
DeleteCommand

كه به ترتيب براي واكشي اطلاعات، اضافه نمودن اطلاعات جديد به داخل بانك ، به هنگام سازي اطلاعات و حذف اطلاعات استفاده مي‎شود. اين آبجكت به همراه آبجكت Dataset استفاده مي‎شود و براي پركردن Recordset موجود در Dataset بكار مي‎رود.

آبجكت بعدي Dataset است كه مهمترين آبجكت در Ado.net مي‎باشد اين آبجكت شامل دو Collection به نام هاي ‌ DataTables و DataRelations است. همانطور كه مي‎دانيد در ADO هم آبجكت Recordset داشتيم اينجا مجموعه‎اي از Recordset ها در داخل يك DataTables نگه داشته مي‎شود و مي‎توان بين DataTable هاي مختلف رابطه نيز ايجاد نمود كه اين روابط هم داخل يك مجموعه‎اي با نام DataRelations نگه داشته مي‎شود. در واقع DataTable در ADO.net معادل همان RecordSet در ADO مي‎باشد.

مراجع :

1. VB.NET for Developers , Keith Franklin , SAMS Visual
2. Basic Developer's Guide to SQL Server , Dianne Siebold , SYBEX
3. MSDN

کيفيت مقاله :
عالی خوب متوسط ضعيف


مالتي بوت كردن PC ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۴۱ مراجعه امروز
۴۸۵۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مالتي بوت كردن PC
نويسنده : مجله رايانه
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۴۰۵۰ بار مطالعه شده است
۶۳ نفر تا به حال به اين مقاله رای داده اند.

در اين مقاله مي‌خواهيم به شما بياموزيم كه چگونه PC خود را قادر به بوت شدن به چندين سيستم عامل كنيد.

بسياري از كاربران،‌دنياي ديجيتالي را تنها از يك جهت، از طريق ويندوز Me، ويندوز XP، ويندوز 2000 يا ديگر محصولات مايكروسافت مورد كنكاش قرار مي‌دهند. تنها كاربران با دل و جرات هستند كه مايلند با ديگر سيستم عاملها هم سروكله بزنند.

اينكه بتوانيد PC خود را قادر به بوت شدن به سيستم عاملهاي مختلف ويندوز، لينوكس و يونيكس بكنيد كاري بسيار ساده است ولي احتياج به دقت دارد. براي اينكار كافيست اين مقاله رايانه را با دقت بخوانيد.

چرا يك سيستم مالتي بوت برايتان خوب است؟

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

شروع كنيد

تبديل يك PC با سيستم عامل ويندوز به يك سيستم مالتي بوت احتياج به داشتن تخصص زيادي ندارد. براي اينكار احتياجي نداريد كه درب جعبه سيستم خود را باز كنيد ولي بايد اطلاعاتي در مورد منابع سيستمي و وضعيت هاردديسك خود و مقدار فضاي خالي آن داشته باشيد.

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

براي اينكه يك سيستم مالتي بوت داشته باشيد، احتياج به يك هارد تقريباً حجيم داريد، مثلاً بايد بدانيد كه اگر مايليد با 7 گيگابايت هارد خود 4 سيستم عامل را روي سيستم خود نگه داريد سخت در اشتباهيد ولي همين هارد براي 2 سيستم عامل مناسب است.

مطلب بعدي در ساخت يك سيستم مالتي بوت اين است كه تعيين كنيد به چه سيستم عاملهايي احتياج داريد. اغلب ماشينهاي مالتي بوت حداقل يك نسخه از ويندوز را روي خود دارند. همانطور كه مي‌دانيد ويندوز در نسخه‌هاي مختلفي عرضه شده است. مهمترين آنها ويندوز 95، 98، Me، XP، NT و 2000 مي‌باشند. اينكه كدام نسخه يا نسخه‌هايي را مايليد روي سيستم خود نصب كنيد بستگي به نياز خودتان دارد. نصب يك نسخه از داس هم روي سيستمتان گاهي كمكتان خواهد كرد زيرا بعضي از ابزارها در DOS وجود دارد كه معادل ويندوزي ندارند.

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

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

در يك سيستم مالتي بوت حتي مي‌توانيد چند نوع لينوكس داشته باشيد. ويندوز، داس و لينوكس تنها سيستم عاملهايي نيستند كه در بازار وجود دارند و سازگار با PC هستند. سيستم عاملهاي ديگري مثل OS/2 يا FreeBSD هم در اين راستا وجود دارند.

Fdisk و پارتيشنها

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

مي‌توانيد براي تصور راحتتر از يك هاردديسك با پارتيشنهاي آن يك كيك تولدي را مجسم كنيد كه روي آن برشهايي (پارتيشنهايي) براي هر يك از ميهمانها مي‌دهيد. كيك تولد با چاقو برش مي‌خورد و هاردديسك با يك برنامه به نام Fdisk.

Fdisk به همراه ويندوز شما مي‌آيد و كاركردن با آن كمي مشكل است چون كاربر بايد از قبل يك چيزهايي در باره هاردديسكها و پارتيشنهاي آن بداند.

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

قبل از استفاده از Fdisk بايد بدانيد كه آيا كامپيوترتان از نرم افزار Drive Overlay براي پشتيباني از پارتيشنهاي بزرگ استفاده مي‌كند يا خير. اگر نمي‌دانيد كه هاردديسكتان از اين برنامه استفاده مي‌كند يا خير به سايت مايكروسافت برويد و مقاله Q186057 كه عنوان آن “How to Tell If Drive Overlay Program Is Installed” است را بخوانيد.

بطور خلاصه در اين مقاله مي‌خوانيد كه Fdisk را نمي‌توانيد در سيستمهايي كه از اين نرم افزار (Overlay) استفاده مي‌كنند،‌بكار گيريد. اين نرم افزار به روي سيستمهايي كه داراي يك مادربرد با يك BIOSاي هستند كه قادر به پشتيباني از درايوهاي بالاي 528 مگابايت نيست، بكار مي‌رود. اين نرم‌افزار در برخي از سيستمها كه داراي نوع خاصي از هارددرايو هستند هم استفاده مي‌شود. Fdisk تمام داده‌هاي روي هاردديسكتان را از بيخ و بن برمي‌دارد و از جمله نرم افزار Drive Overlay.

پارتيشنها در دو نوع عرضه مي‌شوند: Primary و Extended. تحت ويندوز 95 و 98 و ME تنها پارتيشنهاي Primary مي‌توانند Bootable باشند و اين بدان معني است كه سيستم عامل در اين پارتيشنها فايلهاي Startup خود را مي‌گذارد.

يك پارتيشن Extended مي‌تواند شامل هر نوع داده‌اي باشد اما معمولاً براي سيستم عامل استفاده نمي‌شود. يك پارتيشن Extended معمولاً به قسمتهاي كوچكتري به نام پارتيشنهاي منطقي (Logical Partitions) تقسيم مي‌شود.

يك هارددرايو مي‌تواند حداكثر 4 پارتيشن Primary داشته باشد يا سه پارتيشن Primary بعلاوه يك Extended . به يك پارتيشن Bootable گاهي پارتيشن Active هم مي‌گويند.

FAT

براي اينكه نحوه ساخت يك سيستم مولتي بوت را بدانيم بايد كمي درباره سيستم فايل هم بخوانيم، سيستم فايل بطور ساده يعني نحوه ذخيره فايلها روي هاردديسك. (File Allocation Table)FAT يك سيستم فايل قديمي جهت استفاده داس و ويندوز بود. FAT16، FAT استفاده شده در آخرين نسخه‌هاي داس بود و توسط نسخه‌هاي اوليه ويندوز 95 هم استفاده شد. FAT32 سيستم فايل معروف ويندوز 98 است كه در Me هم استفاده شد. البته FAT32 در ويندوز 98 نسخه OEM، ويندوز 2000 و XP هم قابل استفاده است.

سيستم عاملهاي ديگر، گاهي سيستم فايلهاي ديگري هم دارند. مثلاً ويندوز NT از (NT File System)NTFS پشتيباني مي‌كند. چون يك سيستم عامل مي‌تواند تعداد محدودي از سيستم فايلها را پشتيباني كند لذا بايد قبل از استفاده از Fdisk مطمئن شويم كه سيستم فايل انتخابي قابل خواندن توسط سيستم عامل است.

يك سيستم فايل، حداكثر اندازه يك پارتيشن را هم مشخص مي‌كند مثلاً FAT16 پارتيشنها را به يك قسمت 2GB محدود مي‌كند. FAT32 و NTFS اجازه مي‌دهند كه پارتيشنها تا 1000GB هم بزرگ شوند.

طرز استفاده از Fdisk

قبل از تلاش در تغيير دادن به ساختار هاردديسكتان، بطور كامل از درايو خود پشتيبان بگيريد. تنها وقتي نسبت به اين كار مطمئن شديد از Fdisk استفاده كنيد.

براي ‎آغاز پارتيشن بندي، از يك ديسكت Startup استفاده كنيد (ويندوز در زمان نصب خود از شما مي‌خواهد كه آنرا بسازيد). اگر يك ديسك بوت در اختيار نداريد به مستندات ويندوز خود مراجعه كنيد كه چگونه مي‌توانيد آنرا بسازيد (البته ما معتقديم كه خوانندگان مجله رايانه همگي حداقل اين را مي‌دانند). با ديسك Startup خود در درايو A:، كامپيوتر خود را روشن كنيد و منتظر ظاهر شدن منويي شويد. در منوي ظاهر شده، گزينه Startp Computer Without CD-Rom را انتخاب كنيد. حال در اعلان فرمان تايپ كنيد Fdisk و Enter را بزنيد.

Fdisk منويي با گزينه‌هاي زير را به شما نشان خواهد داد:

1. Create Dos Partion of Logical Dos Drive
2. Set Active Partition
3. Delete Partition or Logical Dos Drive
4. Display Partition In Formation
5. Change Current Fixed Drive

گزينه 5 فقط وقتي مهم مي‌شود كه شمايك هاردديسك دوم يا سومي را روي PC خود اخيراً نصب كرده باشيد. در غير اين صورت 1 را انتخاب كنيد تا منوي زير ظاهر شود:

1. Create Primary Dos Partition
2. Create Extended Dos Partition
3. Create Logical Dos Drive (S) In Extended Dos Partition
4. Create Non-Dos Partition

1 را فشار دهيد و Enter را بزنيد. سپس از شما پرسيده مي‌شود كه مي‌خواهيد از حداكثر فضاي موجود براي پارتيشن اوليه داس استفاده كنيد؟ پاسخ No بدهيد، زيرا در غير اين صورت كل هاردديسكتان بصورت يك درايو فرمت خواهد شد و ديگر فضايي براي پارتيشنهاي اضافي جهت قرارگرفتن سيستم عاملهاي ديگر نخواهيد داشت. پس N را بزنيد و بعد Enter.

سپس Fdisk از شما مي‌پرسد كه اندازه پارتيشن Primary را برحسب مگابايت يا درصد فضاي درايو مشخص كنيد. بهتر است كه براي جلوگيري از سردرگمي برحسب مگابايت انتخاب كنيد.

اينكه دقيقاً چه قدر فضا مي‌خواهيد بستگي به كاربردهاي شخصي شما و اندازه هاردديسكتان دارد.

هرچند كه احتمال دارد به 500 مگابايت هم قانع شويد ولي ما به شما پيشنهاد مي‌كنيم كه در هر حال كمتر از 1 گيگابايت را وارد ننمائيد. يادتان باشد كه OSهاي جديد، فضاي زيادي را مصرف مي‌كنند.

دوبار ESC را بزنيد تا به اعلان داس برگرديد. Fdisk از شما مي‌خواهد كه Reboot كنيد. براي استفاده از پارتيشنهاي Extended حداقل بايد يك پارتيشن Logical در آن بسازيد تا قابل استفاده شود. پس از ساخت پارتيشنهاي Extended و Primary و Logical نوبت به فرمت كردن آنها مي‌رسد. اين كار را هم مي‌توانيد از طريق ديسكت Startup يا از طريق OSهايي مثل ويندوز يا لينوكس در زمان نصب انجام دهيد.

اما حال نوبت نصب سيستم عاملها مي‌رسد. مايكروسافت خودش ترتيب نصب OSها را به صورت: داس، ويندوز 95، ويندوز 98 يا Me، ويندوز NT، ويندوز 2000 و ويندوز XP ، بيان نكرده است. مثلاً اگر شما ابتدا ويندوز XP را نصب كنيد و بعد ويندوز 98، بسياري از فايلهاي XP، رونويسي خواهند شد و ديگر XP بالا نخواهد آمد. علاوه بر آن، تركيب همزمان برخي سيستم عاملها مثل ويندوز 95 و 98 در حالت عادي امكانپذير نيست مگر اينكه از مدير پارتيشنهاي جانبي غير از Fdisk استفاده كنيد.

بعد از نصب همه OSها، كاربران ويندوز XP، NT و 2000، مي‌توانند با Control Panel سيستم عامل ارجح خود را انتخاب كنند. براي اينكار روي آيكن System كليك مي‌كنند و در System Properties گزينه Advanced را انتخاب مي‌نمايند. و بعد در قسمت Startup and Recovery روي Settings كليك مي‌كنند. سپس System Startup را انتخاب و در ليست Default Operating system سيستم عاملي را كه مي‌خواهيد از آن بصورت Default استفاده كنيد برمي‌گزينيد. مي‌توانيد مدت زماني را كه منتظر انتخاب شما مي‌ماند را هم برحسب تاييد تنظيم كنيد.

يوتيليتي‌هاي پارتيشن‌بندي

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

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

برنامه Partition Magic 7 براي پارتيشن بندي هاردديسكهايي به بزرگي حداكثر گيگابايت طراحي شده است. كاربران مي‌توانند پارتيشنها را بسازند، تغيير اندازه دهند،‌ قطعه قطعه كنند، ادغام كنند، پاك كنند، Undelete كنند و تبديل كنند و همه اينها بدون تخريب داده‌ها انجام خواهد شد. با استفاده از ويزاردهايي، اين كارها قدم به قدم انجام خواهد شد. اين برنامه به همراه برنامه Boot Magic مي‌آيد كه يك يوتيليتي است كه به كاربران امكان انتخاب يك سيستم عامل خاص را در زمان Start مي‌دهد. هر زماني كه PC شروع به كار مي‌كند يا restart مي‌شود، Boot Magic ليستي از OSها را به شما نشان خواهد داد.

Partition Magic به كاربران امكان سازماندهي سيستمتان را مي‌دهد. ساخت يك پارتيشن جديد گاهي باعث سردرگمي سيستم عاملتان مي‌شود. تغيير نام درايوها هم گاهي مشكل ساز است. پارتيشن اوليه (اكتيو يا فعال) هميشه پارتيشن C: بوده اما بيائيد فرض كنيد كه شما علاوه بر C: يك درايو سي‌دي‌رام هم داشتيد كه D: بوده و حالا شما قصد ساخت يك پارتيشن جديد را داريد.

پارتيشن جديد بطور اتوماتيك D: خواهد شد و درايو D: قديمي شما كه سي ‌دي رام بوده به E: تبديل مي‌شود. اين مسئله باعث مي‌شود كه بسياري از برنامه‌هاي شما ديگر اجرا نشوند، برنامه‌هايي كه قبلاً نصب شده‌اند و به سي‌دي‌رام شما لينك بوده‌اند حالا ديگر كار نخواهند كرد. اما برنامه Drive Mapper در نرم افزار Partition Magic برنامه‌اي است كه ارجاعات مربوط به درايوها را بروز مي‌رساند و اين مشكل را برايتان حل مي‌كند.

اما از طرف ديگر برنامه System Cammander 7.0 ادعا كرده كه مي‌تواند هر نوع سيستم عامل سازگار با PC را پشتيباني كند. اين نرم افزار به كاربران امكان ساخت، تغيير اندازه، جابجايي، كپي و تبديل پارتيشنها را مي‌دهد. يك ويزارد OS بهترين پيكربندي را براي يك OS جديد تعيين مي‌كند و سيستم را براي نصب آن آماده مي‌كند. يك ويزارد Backup هم به كاربران امكان Undo كردن پارتيشن بندي را مي‌دهد.System Cammander امكان مديريت بيش از 100 سيستم عامل مختلف را مي‌دهد، چه در پارتيشن primary و چه در پارتيشن Logical. در حقيقت اين نرم افزار مي‌تواند با 32 سيستم عامل سازگار با FAT را در يك پارتيشن مديريت كند، حتي نسخه‌هاي مختلف داس، ويندوز 95، 98، ME، NT، 2000، XP و OS/2. هيچ پارتيشن‌بندي براي اينكار لازم نيست! مثل Partition Magic،‌برنامه System Cammander هم شامل يك بوت (Boot Manager) است كه به كاربران اجازه انتخاب سيستم عامل موردنظرشان را در زمان راه‌اندازي سيستم مي‌دهد. اين برنامه داراي يك اسكنر ضدويروس در بوت سكتور بصورت ذاتي مي باشد. در ضمن يك اينترفيس گرافيكي خوشگل هم كه قابل تغيير است براي شما مهيا مي‌كند.

رفع اشكالات سيستم مالتي بوت

هرچند كه ساخت يك سيستم مالتي – بوت خيلي هم وقت گير نيست و اگر از يوتيليتي‌هاي جانبي هم استفاده كنيد خيلي كار سختي نيست ولي گاهاً بعد از انجام اينكار متوجه بروز مشكلاتي خواهيم شد كه باعث مي‌شود سيستم شما اصلاً بالا نيايد يا راندمان PC شما كاهش يابد. خب يكي از مشكلاتي كه خيلي واضح است با آن مواجه شويد اين است كه سيستمتان ديگر بوت نمي‌شود. دلايل زيادي وجود دارد كه چرا اين مشكل بوجود مي‌آيد. گاهي كاربران فراموش مي‌كنند. كه يكي از پارتيشنها را بعنوان يك پارتيشن Active انتخاب كنند. بايد اين مسئله را در داخل برنامه پارتيشن بندي خود چك كنيد. استفاده از يك يوتيلتي فشرده‌سازي ديسك مي‌تواند باعث بروز مشكلات بوت شود. گاهي ديده مي‌شود كه برخي از سيستم عاملهاي يك سيستم مالتي بوت رفتارهاي عجيب و غريبي از خود نشان مي‌دهند كه اين مسئله مي‌تواند دلايل مختلفي مثل مشكل در زمان پارتيشن بندي مثلاً فيزيكي هاردديسك و احياناً ناسازگاري OS با سيستم داشته باشد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


RAID چيست؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۴۴ مراجعه امروز
۴۸۶۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
RAID چيست؟
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۶۰۶ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

گذرگاه IDE در طبقه بندي گذرگاههاي سيستم ، جزء گذرگاههاي خارجي محسوب مي شود و در سيستم از آن به منظور ارتباط قطعاتي مانند Rewriter ، CD-ROM ، HDD و ... استفاده مي شود . در سيستمهاي امروزي به طور معمول دو كانكتور IDE براي برقراري ارتباط بين 4 وسيله جانبي وجود دارد ولي در پاره اي سيستم ها تعداد اين كانكتورها 4 مورد مي باشد ، دو كانكتور به عنوان IDE ، و دو كانكتور اضافي براي استفاده تحت عنوان RAID يا ATA 133,ATA 100 .

همانطور كه مي دانيم با استفاده از كانكتورهاي IDE ي موجود روي مادر برد امكان استفاده از حداكثر دو دستگاه بر روي هر كانكتور وجود دارد .RAID تكنولوژي است كه امكاناتي نظير افزايش سرعت , Back up گيري همزمان روي يك يا چند درايو و … در اختيار كاربر قرار مي دهد . براي هر كدام از آرايشهاي ممكن هنگام استفاده از دو يا چند هارديسك , نسخه هاي متفاوت RAID مطرح مي شود به عنوان مثال : RAID1 , RAID0 و….

در اين مقاله سعي داريم كه به نسخه هاي متفاوت RAID نگاهي نزديكتر و دقيق تر بيا ندازيم .

RAID0 : ذخيره سازي روي چند ديسك بدون كنترل خطا

مزايا و مشخصات :

- داده ها به بلوكهايي تبديل مي شوند و هر بلوك در هارد ديسك مجزا ذخيره مي شود.

- باعث بالا رفتن كارايي سيستم I/O مي گردد چرا كه بار ترافيكي نقل و انتقالات بين چندين كانال مجزا تقسيم مي شود.

- بالارفتن كارايي بدليل وجود كنترلرهاي مختلفي كه عمل كنترل ترافيك را به عهده مي گيرند (افزايش سرعت)

- طراحي بسيار ساده ( زيرا مدار محاسبه Parity وجود ندارد )

- عدم پرداختن به محاسبات مربوطه به Parity وكنترل خطا (افزايش سرعت به دليل عدم پرداختن به محاسبات مربوط به Parity )

معايب :

- عدم استفاده از Parity .(هيچ گونه كد تشخيص و تصحيح خطا در اين نوع RAID وجود ندارد ).

- از كار افتادن يك درايو باعث از دست رفتن كليه اطلاعات خواهد شد.

- عدم كارايي در محيطهاي حساس به حفظ داده ها

موارد استفاده :

- ميكس و پردازش تصاوير ويديويي (ميكس و مونتاژ ).

- واژه پردازي (نرم افزارهاي تايپ و... )

- كارهايي كه نياز به سرعت بالا دارد.

Backup : RAID1 گيري همزمان داده ها به منظور Mirroring و Duplexing

Mirroning : كپي برداري هم زمان روي دو درايو

Duplexing : زماني است كه يكي از درايوها دچار مشكل شود و درايو سالمي را جايگزين نماييم سپس داده ها را روي درايو سالم كپي كنيم .

مزايا و مشخصات :

-هنگام سيكل نوشتن , گويي اطلاعات روي يك ديسك نوشته مي شود (در صورتيكه عملأ بر روي دو ديسك نوشته مي شود . مانند RAID0 ) ولي عمل خواندن , ازهر دوديسك انجام مي شود ( كاهش ترافيك گذرگاه - نوشتن بر روي هر دو ديسك ولي خواندن مجزا )

- قابليت برگرداندن %100 داده ها هنگام بروز مشكل براي يك ديسك .

- در نرخ انتقالات داده تغيير محسوسي نداريم. (يعني وجود دو ديسك تفاوتي با يك ديسك ندارد ) .

- در شرايط خاص RAID1, توانايي تحمل خرابي بيش از يك ديسك را نيز دارد .

- ساده ترين طراحي در تكنولوژي RAID (مدار مربوط به Parity وجود ندارد )

معايب :

- بيشترين تعداد هارد ديسك در ميان انواع RAID (بسته به انتخاب User )

- هزينه بالا

RAID2 : داراي خاصيت ECC با استفاده از كد همينگ

مزايا و مشخصات :

- تصحيح خطاي بسيار سريع

- مناسب براي انتقال اطلاعات

معايب :

- طراحي بسيار يچيده كه با صدمه ديدن يك ديسك دچار مشكل مي شود .

- نامناسب در ديد تجاري (تعداد زياد درايوها )

كد همينگ :

يكي از روشهاي محاسبه و كنترل خطا در سيستمهاي ديجيتال مي باشد . انواع روشها براي كنترل ترافيك داده هاي ديجيتال وجود دارد به عنوان مثال Parity haming code ,… كه مجموعه اين روشها را ECC مي نامند . (Error Checking and Correcting)

RAID3 : انتقال موازي با استفاده از خاصيت Parity

مزايا و مشخصات :

- سيكل خواندن و نوشتن بسيار سريع .

معايب :

- طراحي بسيار پيچيده كه با صدمه ديدن يك ديسك مجموعه دچار مشكل مي شود .

كاربرد :

- ميكس و مونتاژ تصوير

- ويرايش تصوير مانند RAID0

RAID4 : ديسك هاي داده مجزا ديسك مربوط به Parity مشترك

مزايا و مشخصات :

- سيكل خواندن بسيار سريع ( ترافيك كمتر در گذرگاه)

معايب :

- پيچيدگي بسيار بالا در طراحي مدار كنترلي مشكل در برگرداندن داده ها هنگام بروز اشكال در يك ديسك ( چرا كه داده ها روي ديسكها توزيع شده است )

RAID5 : ديسك هاي داده مجزا و Parity توزيع شده در ديسكهاي Data

مزايا و مشخصات :

- در اين نوع به حداقل 3 درايو ديسك سخت نياز داريم .

- تك تك بلوك هاي داده روي ديسك ها نوشته مي شوند و Parity مربوط به هر بلوك نيز داخل هارد مربوط ذخيره مي گردد.

- سيكل خواندن بسيار سريع (ترافيك كمتر در گذرگاه )

- سيكل نوشتن متوسط (محاسبات مربوط به Parity )

- قابليت و اطمينان بالا (وجود ECC )

معايب :

- خرابي در يك ديسك در خروجي تاثير ندارد.

- طراحي پيچيده مدار كنترلي

- مشكل در برگرداندن داده ها هنگام بروز اشكال

كاربرد :

- در سيستمهاي Server و بانكهاي اطلاعاتي ISPها

RAID6 : ديسكهاي داده ها مجزا با دو Parity توزيع شده مجزا

مزايا و مشخصات :

- RAID6 در واقع نسخه پيشرفته RAID5 مي باشد كه تصحيح و كنترل خطا را بهبود مي بخشد . اين ويرايش RAID اطمينان و توانايي بالا در زمينه data storage فراهم مي كند .

- بهترين انتخاب براي كاربردهاي بحراني و حساس

معايب :

- طراحي مدار كنترلي بسيار پيشرفته و پيچيده .

- سيكل نوشتن بسيار كند ( دوبار محاسبه مربوط به Parity )

- نياز به N+2 درايو ديسك سخت . بدليل دارا بودن حالت Parity دو بعدي . ( N تعداد ديسكهاي سخت در حالت معمولي )

- ادغام اطمينان بالا با قابليت بالا

RAID7 : نقل وانتقال بهينه شده غير همزمان به منظوردستيابي به نرخ انتقال بسيار سريع

مزايا و مشخصات :

- نقل و انتقال غير همزمان و داراي كنترلگرهاي مستقل.

- درايو مجزا براي ذخيره كردن اطلاعات مربوط بهParity

- برخورداري از سيستم Open System و استفاده از گذرگاهSCSI

- گذرگاه Cache داخلي با سرعت بالا (X-bus )

- ديسك هاي خواندن و نوشتن از امكان Choching استفاده ميكنند.

- تكنولوژي مدار توليد Parity تا حدودي با ساير انواع Raid تفاوت دارد .

-امكان Hot Swaping

Open system :

به سيستمي اطلاق مي شود كه قابليت سازگاري با سخت افزارها و نرم افزارهاي مختلف را داشته باشد و امكان كاركردن در سيستمهاي مختلف را به راحتي داشته باشد .

RAID10 : اين Raid حداقل به 4 دستگاه هارديسك نياز دارد

مزايا و مشخصات :

- عمل تكه تكه كردن بلوكهاي داده همانند Raid1 انجام مي پذيرد .

- تصحيح و كنترل خطا نيز مانند Raid2 مي باشد .

- نرخ انتقال بالا

- در شرايط معين , امكان تحمل خرابي چند ديسك در اين نوع RAID وجود دارد .

معايب :

- بسيار گران قيمت

- منبع تغذيه حتمأ بايد متصل به ups باشد .

- جابجايي درايوها بايد به صورت موازي انجام گيرد .

- سيستمهاي Server و بانكهاي اطلاعاتي .

RAID53 : نرخ انتقال بالا همراه با قابليت انتقال مناسب

مشخصات و مزايا :

-اين آرايه RAID حداقل به 5 دستگاه ديسك سخت نياز دارد .

- RAID53 در واقع بايد RAID03 نلميده شود زيرا عمل Striping آن همانند RAID0 بوده و Segment بندي آن نيز مانند RAID3 مي باشد.

- تحمل خطاي آن مانند RAID3 مي باشد.

- نسبت به RAID3 داراي نرخ انتقال بسيار بهتري مي باشد.

معايب :

- قيمت بالا

- همه ديسك ها بايد با همديگر سنكرون شوند كه انتخاب نوع و مدل درايو را محدود مي سازد .

- Stripe كردن در سطح بايتها نهايتأ در محاسبه ظرفيت فرمت شده تأثير منفي مي گذارد .

RAID 0+1 : نرخ انتقال داده بهينه

مزايا و مشخصات :

- حداقل به 4 دستگاه هارديسك نياز دارد .

- RAID 0+1 به عنوان آرايه آينه اي نيز معروف است با اين تفاوت كه قطعات داده ها يا Segment ها طبق استراتژي RAID0 ايجاد شده اند .

- تحمل خطاي اين نوع آرايه مانند RAID5 مي باشد .

- نرخ انتقال بالا .

- بهترين انتخاب براي سيستمهايي كه به كارايي بالا بدون توجه به حداكثر اطمينان نياز داشته باشند .

معايب :

- RAID 0+1 نبايد با RAID10 اشتباه گرفته شود . كوچكترين مشكل در عملكرد يك درايو , آرايه را به مدل RAID0 تبديل خواهد كرد .

- قيمت بسيار بالا

- جابجايي درايوها بايد به صورت موازي انجام گيرد .

كاربرد :

- پردازشهاي تصويري و fileserever هاي عمومي .

نتيجه گيري :

همانطور كه مشخص شد ، استفاده ازRAID براي مقاصد معين مي باشد و در كاربردهاي عادي و روزمره كارايي چشمگيري را به سيستم PC اضافه نمي كند . به عنوان مثال امكان استفاده از CD-ROM و Rewriter روي اين كانكتورها وجود ندارد .بنابراين هنگام استفاده از RAID ابتدا هدف و مورد استفاده خود را مشخص كنيد سپس RAID مناسب را انتخاب نماييد.

(با تشكر از واحد R&D شركت آواژنگ)

کيفيت مقاله :
عالی خوب متوسط ضعيف


شاخصها و پيوندها در SQL Server ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۰۱ مراجعه امروز
۵۲۱۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
شاخصها و پيوندها در SQL Server
نويسنده : مهسا قنبري
موضوع : SQL [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۳۵۲۳ بار مطالعه شده است
۳۷ نفر تا به حال به اين مقاله رای داده اند.

شاخصهاي يك جدول مي‌توانند به شما در دسترسي به يك يا چند سطر از داده‌ها كمك كنند. داشتن يك شاخص خوب براي پرس و جوي (query) شما يكي از بهترين راههاي بهبود بخشيدن به عملكرد است. هنگامي كه پرس و جوي شما سعي دريافتن تنها تعداد محدودي سطر از يك جدول بزرگ دارد،‌وجود يا عدم وجود يك شاخص خوب و مفيد مي‌تواند تاثير چشمگيري در تفاوت عملكرد داشته باشد. هنگام تنظيم پرس و جوهايي كه جداول گوناگوني دارند (مانند پيوند)، شاخصها مي‌توانند بطور موثري به سرويس‌دهنده SQL دريافتن سطرهاي موردنظر از بين جدولها كمك كنند.

بهينه ساز پرس و جوي سرويس دهنده SQL مي‌تواند براي اجراي پيوندها از ميان 3 استراتژي يكي را انتخاب كند: پيوند حلقه‌اي تودرتو (nested-loop)، پيوند ادغامي (merge) و پيوند hash، در اين مقاله به شرح دو استراتژي اول يعني حلقه‌اي تودرتو و ادغامي مي‌پردازيم. در هر روش، جدولهايي را كه مي‌خواهيد پيوند دهيد (يا زير مجموعه‌هايي از آنها كه با شرط WHERE محدود كرده‌ايد) ورودي‌هاي پيوند هستند. اگر پرس و جوي شما علاوه بر پيوند، شرط WHERE را نيز شامل شود، سرويس دهنده SQL ممكن است قبل از يافتن سطرهاي موردنظر در دومين جدول شرط WHERE را بكار ببرد. بعنوان مثال پرس و جوي 1 از بانك اطلاعاتي Northwind را در نظر بگيريد.

-- Query 1:
SELECT LastName, FirstName, OrderID, OrderDate
FROM Employees e JOIN Orders o
ON e.EmployeeID = o.EmployeeID

اين پيوند تمام سفارشات را از جدول سفارشها باز مي‌گرداند و همچنين براي هر يك از آنها، FirstName، LastName كارمندي را كه به آن OrderID و OrderDate مربوط مي‌شود را نيز باز مي‌گرداند.

در پرس و جوي 1 سرويس دهنده SQL تمام سطرها را در جدول كارمندان و سفارشات امتحان مي‌كند و ورودي‌هاي پيوند تمام سطرهاي جدولها هستند. بهرحال، طبق آنچه كه پرس و جوي 2 نشان مي‌دهد، اگر شما عبارت SELECT را با دو شرط WHERE تعريف كنيد، وروديهاي پيوند ديگر تمام سطرهاي جدولها نيستند.

-- Query 2:
SELECT LastName, FirstName, OrderID, OrderDate
FROM Employees e JOIN Orders o
ON e.EmployeeID = o.EmployeeID
WHERE OrderDate < '1996-12-01' AND LastName < 'D'

وروديهاي پيوند در پرس و جوي 2، بسيار كوچكتر از پرس و جوي 1 هستند. به جاي پيوند 9 سطر از جدول كارمندان با 830 سطر از جدول سفارشات، سرويس دهنده SQL بايد تنها 2 سطر از جدول كارمندان را با 121 سطر از جدول سفارشات پيوند دهد. بهينه ساز پرس و جو با وجود تعداد محدودي از سطرهاي ورودي غالباً استراتژي پيوند متفاوتي را در مقايسه با زماني كه وروديهاي پيوند بيشتر هستند برمي‌گزيند و همچنين ممكن است جدولها را به سبك متفاوتي پيوند دهد. به همان اندازه كه تصميمات استراتژي بهينه ساز مهم هستند اندازه جدولها نيز حائز اهميت است.

حلقه‌هاي تودرتو

حتي اگر پرس وجوي شما بيش از 2 جدول را پيوند دهد، سرويس دهنده SQL عمل پيوند را از طريق پيوند تنها دو ورودي در يك زمان اجرا مي‌كند و هر پيوند در يك پرس و جو ممكن است از استراتژي پيوند متفاوتي استفاده كند. آسانترين نوع پيوند – و نوعي از پيوند كه اكثر افراد هنگام عمليات پيوند بدان فكر مي‌كنند – پيوند حلقه تودرتوست مي‌توانيد تصور كنيد كه سرويس دهنده SQL روي دو ورودي عمل مي‌كند حتي اگر آنها آرايه‌هايي در يك زبان پيشرفته مانند C يا Basic باشند. سرويس دهنده SQL هر سطر يك ورودي را با تمام سطرهاي ورودي ديگر مقايسه مي‌كند تا تطابق بين سطرها را بيابد.

پرس و جوي 1 سعي دريافتن سطرهايي دارد كه با ستون EmployeeID تطبيق داشته باشد. بنابراين با استراتژي پيوند حلقه تودرتو، سرويس دهنده SQL بايد تمام مقادير EmployeeID در يك جدول را با تمام مقادير EmployeeID در جدول ديگر مقايسه كند.

بدترين قسمت سناريو براي يك پيوند حلقه تودرتو زماني است كه هيچ شاخصي نتواند به سرويس دهنده SQL دريافتن سطرهاي منطبق در بين وروديها و همچنين يافتن سطرهايي كه در هر شرط WHERE صدق مي‌كند، كمك نمايد. در ين حالت، وروديها كل سطرهاي جدولها هستند. بهينه ساز پرس و جو جدولي را بعنوان جدول خارجي انتخاب مي‌كند و در ابتدا به سطرهاي آن دستيابي مي‌يابد. بياييد فرض كنيم كه جدول خارجي داراي P1 صفحه و R1 سطر باشد. دومين جدول كه جدول داخلي است P2 صفحه دارد. سرويس دهنده SQL بايد تمام صفحات را از جدول خارجي بخواند؛ و براي هر سطر تعريف شده در هر صفحه بايد تمام صفحات را از جدول داخلي بخواند. براي يافتن تعداد صفحاتي كه سرويس دهنده SQL براي خواندن و ارائه نتيجه نياز دارد، مي‌توانيد از فرمول زير استفاده كنيد:

P1 + R1 * P2

حتي اگر جدولها نسبتاً كوچك باشند، عدد حاصله از صفحات خوانده شده به سرعت بزرگ مي‌شود. در مورد يك جدول خارجي با تنها 200 صفحه و 4000 سطر (براي مثال 20 سطر براي هر صفحه) و يك جدول داخلي با 100 صفحه، نتيجه رقمي كاملاً بزرگ است. جدولهايي با 100 يا 200 صفحه جدولهايي نيستند كه بطور غيرمعمول بزرگ باشند، اما براي پردازش پيوند در صورتي كه جدولها شاخصهاي مفيدي نداشته باشند، سرويس دهنده SQL نياز به دستيابي به بيش از 400,000 صفحه خواهد داشت.

شاخصها مي‌توانند در بهبود عملكرد يك پيوند حلقه تودرتو به طرق مختلف نقش داشته باشند. بزرگترين حسن اين شاخصها اغلب زماني است كه شما يك شاخص كلاستري روي ستون پيوند يكي از جدولها داشته باشيد. وجود يك شاخص كلاستري روي ستون پيوند غالباً مشخص مي‌كند كه سرويس دهنده SQL چه جدولي را بعنوان جدول داخلي انتخاب مي‌كند. اگر جدول داخلي داراي شاخص كلاستري باشد، سرويس دهنده SQL نياز به جستجو در ميان كل سطرهاي آن جدول را ندارد. شاخص كلاستري، سرويس دهنده SQL را مستقيماً به سوي سطرهايي در جدول داخلي هدايت مي‌كند كه داراي مقدار ستون پيوند بوده كه سطرهاي جاري در جدول خارجي را تطبيق مي‌دهد. بنابراين در آن فرمول، به جاي عبارت R1 ´ P2 كه نشان مي‌دهد سرويس دهنده SQL به تمام P2 صفحه دستيابي پيدا مي‌كند، مي‌توانيد P2 را با دستيابي 2 يا 3 صفحه‌اي جايگزين كنيد بسته به اينكه شاخص كلاستري چند Level دارد. بنابراين در مورد مثالي با 200 صفحه و 400 سطر در جدول خارجي و 100 صفحه در جدول داخلي نتيجه 3*4000+200 يا 200،12 صفحه خوانده شده است – يك پيشرفت بزرگ بالاي 400,000 صفحه مي‌باشد.

هنوز هم آن 4000 سطر در محاسبه نتيجه را بزرگتر از حد انتظار خواهد كرد. در اين حالت، تمامي 4000 سطر در جدول خارجي بخشي از نتيجه هستند كه موجب 4000 بار رجوع به جدول داخلي مي‌شود. يك راه ديگر براي كاهش تعداد صفحات بدست آمده كاهش اندازه وروديهاي خارجي است. علاوه بر كنترل شاخص كلاستري روي ستون پيوند، ابتدا بهينه ساز سعي مي‌كند جدولها را با وروديهاي كوچكتر پيوند دهد. در پرس و جوي 1، جدول كارمندان داراي يك شاخص كلاستري روي ستون پيوند يعني EmployeeID هستند اما اين جدول نيز بطور نمايشي كوچكتر از جدول سفارشات است. جدول كارمندان تنها 9 سطر دارد و جدول سفارشات 830 سطر. در پرس و جوي 1، اگر بهينه ساز يك پيوند حلقه تودرتو را انتخاب كند، از جدول كوچكتر كارمندان به عنوان ورودي خارجي استفاده مي‌كند بگونه‌اي كه تنها 9 بار به جدول سفارشات رجوع خواهد داشت.

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

-- Query 3:
SELECT LastName, FirstName, OrderID, OrderDate
FROM Employees e JOIN Orders o
ON e.EmployeeID = o.EmployeeID
WHERE OrderDate < '1996-12-01'

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

FIGURE 1: Query plan for Query 3
|..Nested Loops(Inner Join, OUTER REFERENCES:([o].[EmployeeID]))
|..Clustered Index Scan(OBJECT:([northwind].[dbo].[Orders].[PK_Orders]
AS [o]),
WHERE:([o].[OrderDate] < 'Dec 1 1996 12:00AM'))
|..Clusterd Index
Seek(OBJECT:([northwind].[dbo].[Employees].[PK_Employees] AS [e]),
SEEK:([e].[EmployeeID]=[o].[EmployeeID]) ORDERED FORWARD)

شكل 1 طرح پرس و جو را در مورد پرس و جوي 3 نشان مي‌دهد. اولين خط اين طرح نوع پيوند (حلقه تودرتو) را نشان مي‌دهد و مشخص مي‌كند كه جدول خارجي ستون EmployeeID را ارجاع خواهد داد.

اسكن شاخص كلاستري در جدول خارجي شبيه اسكن يك جدول است زيرا هيچيك از شاخصهاي موجود نمي‌تواند دستيابي به جدول خارجي را سرعت ببخشد. شرط WHERE در ستون OrdrerDate تعداد سطرهاي برگردانده شده و تعداد دفعاتي كه سرويس دهنده SQL بايد به جدول داخلي دستيابي داشته باشد تا تعيين كند كداميك مقدار
OrderDate قابل قبولي دارند. در نهايت، طرح پرس و جو نشان مي‌دهد كه سرويس دهنده SQL از يك شاخص كلاستري براي جستجوي جدول داخلي استفاده مي‌كند زيرا اين شاخص روي ستوني است كه سرويس دهنده SQL براي يافتن سطرهاي منطبق استفاده مي‌كند.

چنانچه قبلاً ذكر شد شاخص در ستون OrderDate چيز خوبي است اما عملكرد پرس و جو را تقريباً به يك شاخص كلاستري روي ستون پيوند بهبود نخواهد بخشيد. يك شاخص مفيد در پارامتر جستجو در جدول خارجي بدين معناست كه سرويس دهنده SQL نبايد به تمام صفحات جدول خارجي رجوع نمايد، بنابراين،‌ مقدار P1 كاهش مي‌يابد. باتوجه به اينكه مقدار P1 نسبت به مقدار دومين عبارت،‌ P2 R1، كوچكتر است، بنابراين كاهش مقدار P1 فقط موجب بهبودي كمتر عملكرد مي‌گردد. شاخص جدول خارجي تعداد دفعاتي كه سرويس دهنده SQL بايد به جدول داخلي رجوع كند را كاهش نمي‌دهد زيرا سرويس دهنده SQL هنوز بايد بازاي هر سطر تعريف شده در جدول خارجي به جدول داخلي رجوع كند. شما مي‌توانيد انتخاب بهينه‌ساز از پيوند حلقه تودرتو را اينگونه تعميم دهيد: در صورتي كه يكي از وروديهاي پيوند بسيار كوچكتر از ديگري و ورودي بزرگتر داراي يك شاخص كلاستري روي ستون پيوند باشد، بهينه ساز اغلب پيوند حلقه تودرتو را برمي‌گزيند.

ادغام

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

GET one Orders row and one Employees row
DO (until one input is empty);
IF EmployeeID values are equal
Return values from both rows
GET next Orders row
ELSE IF Orders.EmployeeID <> Employees.EmployeeID
GET next Employees row
ELSE GET next Orders row

بهينه ساز پرس و جو معمولاً استراتژي پيوند ادغامي را زماني انتخاب مي كند كه هر دو وروديها قبلاً در ستون پيوند مرتب شده باشند. اگر هر دو ورودي قبلاً مرتب شده باشند، در صورتي كه پيوند يك به چند باشد استفاده از I/O كمتري براي پردازش پيوند ادغامي ضروريست. پيوند ادغامي چند به چند (M:N) به جاي كنار گذاشتن سطرها كه معمولاً انجام مي‌دهد، آنها را در يك جدول موقتي ذخيره مي‌كند. اگر داده‌ها شامل مقادير تكراري از هر دو ورودي باشند، هنگامي كه سرويس دهنده SQL هر مقدار تكراري را از اولين ورودي پردازش مي‌كند، دومين ورودي بايد به ابتداي مقادير تكراري در جدول موقت بازگردد. بهرحال، در اكثر موارد، سرويس دهنده SQL از پيوند ادغامي استفاده نخواهد كرد مگر اينكه حداقل يكي از ستونهاي پيوند Unique باشد.در اينجا مثالي از پيوند دو جدول يكي با شاخص و ديگري بدون شاخص Unique آورده شده است.

LISTING 1: Joins Two Tables With and Without Unique Index

-- Copy the two tables
SELECT * INTO o1 FROM orders
SELECT * INTO od1 FROM [order details]

-- Create the indexes.
CREATE CLUSTERED INDEX orders_index
ON o1(orderID)
CREATE CLUSTERED INDEX OD_index
ON od1(orderID)

-- Look at the query plan for the query.
SELECT * FROM o1 JOIN od1
ON o1.orderID = od1.orderID

-- Now recreate the clustered index on o1 as unique.
CREATE UNIQUE CLUSTERED INDEX orders_index ON o1(orderID)
WITH DROP_EXISTING

-- Now Look at the query plan for the query.
SELECT * FROM o1 JOIN od1 ON o1.orderID = od1.orderID

LISTING 2: Modified Listing 1

SELECT * INTO o2 FROM orders

SELECT * INTO od2 FROM [order details]

CREATE UNIQUE CLUSTERED INDEX orders_index ON o2(orderID)
CREATE INDEX OD_index ON od2(orderID)

-- Check the query plan to see the sort operation before
-- the merge join:
SELECT * FROM o2 JOIN od2
ON o2.orderID = od2.orderID

ليست 1 كپي‌هايي از جدول سفارشات و جدول جزئيات سفارشات در بانك اطلاعاتي Northwind ايجاد مي‌كند و يك شاخص كلاستري در OrderID هر دو جدول مي‌سازد. زماني كه شما ابتداً اين جدولها را پيوند مي‌دهيد و طرح پرس و جو را به نمايش مي‌گذاريد، خواهيد ديد كه سرويس دهنده SQL پيوند حلقه تودرتو را انتخاب مي‌كند. اگرچه ستون OrderID در جدول سفارشات Unique است، اما در صورتي كه Unique بودن را در تعريف شاخص مشخص نكنيد، بهينه ساز متوجه نخواهد شد كه مقادير كليدي Unique هستند. بنابراين هنگامي كه مجدداً شاخص كلاستري را در جدول سفارشات مي‌سازيد و مشخص كنيد كه آن شاخص بايد Unique باشد، طرح پرس و جوي اصلاح شده نشان مي‌دهد كه سرويس دهنده SQL از يك پيوند ادغامي استفاده مي‌كند. در برخي از حالتها، بهينه ساز سرويس دهنده SQL ممكن است به دليل به صرفه بودن تصميم بگيرد يكي از وروديها را قبل از پيوند مرتب كند و بعد پيوند ادغامي را اجرا نمايد. اگر ليست 1 را كمي تغيير دهيد به گونه‌اي كه شاخص اوليه كه در جدول جزئيات سفارشات ساخته مي‌شود كلاستري نباشد، طبق آنچه كه ليست 2 نمايش مي‌دهد، طرح پرس و جو عمل مرتب سازي را قبل از پيوند ادغامي نشان مي‌دهد.

جدولهايتان را بشناسيد

معمولاً، بهينه ساز پرس و جو تعيين مي‌كند كه سرويس دهنده SQL چه نوع پيوندي را استفاده خواهد كرد. شما مي‌توانيد پرس و جوي پيوند خود را نوشته و انتخاب استراتژي را به عهده SQL بگذاريد. بهرحال، دانستن نحوه اجراي پيوندها در سرويس دهنده SQL مي‌تواند انتخاب شما در مورد شاخصهاي مفيدتر كمك كند. بهينه ساز معمولاً در صورتي كه يكي از وروديهاي پيوند در مقايسه با ورودي ديگري كوچكتر و ورودي بزرگتر داراي يك شاخص كلاستري روي ستون پيوند باشد، از پيوند حلقه تودرتو استفاده مي‌كند. اگر هر دو ورودي در ستون پيوند مرتب شده باشند و بخصوص يكي از وروديها داراي شاخص كلاستري unique باشد نوع پيوند به احتمال زياد ادغامي خواهد بود.

هر دو پيوند ادغامي و حلقه تودرتو نياز به شاخصهاي مناسب در جدولها دارند. بهرحال، اگر برنامه كاربردي شما باعث شود كه كاربرها پرس و جوهاي ويژه بسازند، ممكن است در ابتدا ندانيد كه بهترين ستون براي شاخصها كدام است. سومين نوع پيوند، پيوند hash است كه باعث مي‌شود سرويس دهنده SQL به يك عملكرد پيوند بسيار خوب دست بيابد حتي زماني كه جداول شما از شاخصهاي مفيدي برخوردار نباشند.

کيفيت مقاله :
عالی خوب متوسط ضعيف


آموزش كاربردي زبان SQL قدم به قدم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۰۴ مراجعه امروز
۵۲۲۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آموزش كاربردي زبان SQL قدم به قدم
نويسنده : پويا عبادالهي واحد
موضوع : SQL [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۱۱۵۹۰ بار مطالعه شده است
۳۲۳ نفر تا به حال به اين مقاله رای داده اند.

زبان SQL تنها زبان استاندارد و جامع پياده‌سازي، مديريت، نگهداري و كار با بانكهاي اطلاعاتي مي‌باشد كه تقريباً توسط تمام بانكهاي اطلاعاتي كوچك و بزرگ مانند Access، SQL Server، Oracle و DB2 پشتيباني مي‌شود. طراحان و افرادي كه بنوعي با بانكهاي اطلاعاتي سروكار دارند و همچنين برنامه نويساني كه از اين بانكها استفاده مي‌كنند هركدام بايد تا اندازه‌‌اي با اين زبان آشنايي داشته باشند. اين مقاله كه در سه قسمت تهيه شده است مي‌كوشد تا مفاهيم زبان SQL را در قالب يك مثال كاربردي بيان كند. هرچند كه مفاهيم بكار رفته در اين مقاله در تمامي بانكهاي اطلاعاتي قابل پياده‌سازي مي‌باشند ولي مثالهاي ارائه شده در 2000 SQL Server مورد تست قرار گرفته‌اند.

بانك اطلاعاتي كه در اين مقاله بعنوان مثال مورد استفاده قرار گرفته است بانك اطلاعاتي يك آموزشگاه مي‌باشد كه شامل دو جدول بنامهاي teachers و students مي‌باشد. جدول اول اطلاعات اساتيد و جدول دوم اطلاعات دانشجويان را در خود نگه مي‌دارد. جدول اول داراي چهار فيلد زير مي‌باشد: name يا نام از نوع text، family يا فاميل از نوع text، age يا سن از نوع عدد، salary يا حقوق از نوع عدد.

جدول دانشجويان نيز شامل چهار فيلد مي‌باشد، سه فيلد اول آن مشابه سه فيلد اول جدول اساتيد مي‌باشد و فيلد چهارم آن عبارتست از GPA يا معدل كه يك فيلد عددي است.

زبان SQL داراي دستورات متنوع و نسبتاً زيادي مي‌باشد. به اين دستورات Clause نيز گفته مي‌شود. در اين مقاله و قسمتهاي بعدي آن تعدادي از مهمترين Clauseهاي زبان SQL مورد بررسي قرار مي‌گيرند.

1 – دستورهاي SELECT و FROM :

هدف نهايي از دادن انبوه اطلاعات به كامپيوتر، جستجو و يافتن اطلاعات مفيد مي‌باشد. به اين عمل يعني جستجوي اطلاعات در بانك اطلاعاتي Query نيز گفته مي‌شود. اكثر دستورات زبان SQL نيز در همين راستا مورد استفاده قرار مي‌گيرند. در اين بين مهمترين و پركاربردترين دستور را مي‌توان دستور SELECT قلمداد كرد.

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

بعنوان مثال اگر در بانك اطلاعاتي فرضي خودمان بخواهيم اسم و فاميل تمام دانشجويان را مشاهده كنيم بايد برنامه‌اي به شكل زير بنويسيم:

SELECT name, family
FROM students

در اين برنامه كه به زبان SQL استاندارد نوشته شده است از دو دستور SELECT و FROM استفاده شده است. دستور SELECT مشخص مي‌كند كه چه فيلدهايي از جدول بايد نمايش داده شوند و دستور FROM نيز مشخص كننده جدولي است كه قرار است اطلاعات از داخل آن استخراج شوند. حال اگر بخواهيم نام و فاميل تمام اساتيد را ببينيم برنامه بالا را بايد بصورت زير تغيير دهيم:

SELECT name, family
FROM teachers

همان طوري كه از مثال‌هاي بالا نيز مشخص است جلوي دستور SELECT نام فيلدهايي نوشته مي‌شوند كه قرار است نمايش داده شوند و بعنوان جداكننده نيز بايد از كاراكتر كاما استفاده كرد. در صورتي كه بخواهيم تمام فيلدهاي يك جدول را ببينيم مي‌توانيم بجاي نوشتن اسم تمام فيلدها فقط از يك كاراكتر ستاره استفاده كنيم. كاراكتر ستاره بمعني تمام فيلدهاي يك جدول مي‌باشد. مثلاً دو دستور زير با هم معادلند:

SELECT *
SELECT name, family, age, gpa

2 – دستور WHERE :

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

SELECT *
FROM teachers
WHERE age > 40

در اين برنامه شرط age > 40 با استفاده از دستور WHERE به Query اضافه شده و باعث شده است تا فقط مشخصات اساتيدي نمايش داده شوند كه در اين شرط صدق مي‌كنند يعني بيش از چهل سال سن دارند.

حال اگر بخواهيم مشخصات دانشجوياني را كه نام آنها علي مي‌باشد و سن آنها نيز كمتر از پانزده سال است را ببينيم بايد Query زير را اجرا كنيم:

SELECT *
FROM students
WHERE age < 15 AND name = 'ali'

در مثال بالا دو مطلب جديد وجود دارد نخست آنكه در زبان SQL رشته متني را بايد داخل كوتيشن (‘) قرارداد. بنابراين براي معرفي كلمه‌اي بنام علي بايد آنرا بصورت ‘ali’ نوشت، زيرا در اين حالت اين كلمه يك ثابت رشته‌اي (متني) بحساب مي‌آيد. نكته ديگر آنكه مي‌توان شرطهاي مختلف را توسط AND، OR و NOT با همديگر ادغام كرده و شرطهاي پيچيده‌تري را بدست آورد. AND، OR و NOT هر سه از كلمات كليدي زبان SQL مي‌باشند. بعنوان يك مثال ديگر فرض كنيد مي‌خواهيم مشخصات تمام دانشجوياني را كه نام آنها، علي يا رضا نباشند را پيدا كنيم، برنامه‌اي كه اين Query را انجام مي‌دهد بصورت زير مي‌باشد:

SELECT *
FROM students
WHERE name NOT IN ('ali', 'reza')

در صورتي كه NOT را از برنامه بالا حذف كنيم مشخصات تمام دانشجوياني كه نام آنها علي يا رضا مي‌باشند نمايش داده خواهد شد.

در اين برنامه نيز يك كلمه كليدي جديد وجود دارد: IN كه براي تست عضويت در يك مجموعه بكار مي‌رود. مجموعه‌اي كه بادستور IN بكار مي‌رود مي‌تواند دهها عضو داشته باشد و نوع اعضا نيز مي‌تواند رشته‌اي، عددي يا ... باشد. البته واضح است كه تمام اعضا بايد هم نوع باشند.

حال بعنوان يك مثال پيشرفته‌تر مي‌خواهيم مشخصات دانشجوياني را ببينيم كه اسم فاميل آنها به ‘ زاده’ ختم مي‌شود مانند عليزاده، محمد زاده و ... براي اين منظور بايد Query زير را نوشته و اجرا كنيم:

SELECT *
FROM family LIKE '% zadeh'

كاربراني كه با Access كار مي‌كنند بايد سطر آخر را به صورت زير تغيير دهند:

WHERE family LIKE '*zadeh'

در اين مثال از Wildcardها استفاده شده است كه قبلاً با مفهوم آن در DOS و Windows يا حتي Unix آشنا شده‌ايم (ls a*) . در Wildcard ،SQL هايي به شرح زير وجود دارند:

% (در Access از * استفاده كنيد): اين Wild card نشانگر هر تعدادي از كاراكترها (هر كاراكتري) مي‌باشد.

- (در Access از ? استفاده كنيد): اين Wildcard نشانگر يك كاراكتر مي‌باشد كه اين كاراكتر مي‌تواند هر كدام از كاراكترهاي مجاز كامپيوتر باشد.

جهت جستجو كردن فيلدهايي كه داراي يك الگوي (Pattern) خاصي هستند بايد از دستور LIKE و Wildcardها استفاده كرد. در مثال زير نام و سن تمام اساتيدي كه اسم آنها با Pe شروع مي‌شود، نمايش داده خواهد شد.

SELECT name, age
FROM teachers
WHERE name LIKE 'Pe%'

بنابراين مشخصات افرادي كه نام آنها مثلاً پدرام يا پيمان باشد در خروجي ليست خواهد شد.

3 – دستور ORDERBY :

دستور ORDERBY جهت Sort كردن ركوردهاي نمايش داده شده مورد استفاده قرار مي‌گيرد. با اين دستور مي‌توان مشخص كرد كه ركوردهايي كه قرار است نمايش داده شوند برحسب كدام فيلد بايد مرتب شوند. بعنوان مثال براي مشاهده كردن مشخصات اساتيدي كه سن آنها بيشتر از 29 سال مي‌باشد و در ضمن ليست خروجي بترتيب اسم فاميل نيز مرتب شده باشد بايد Query زير را اجرا كرد.

SELECT *
FROM teachers
ORDERBY family

در اين حالت افراد بترتيب اسم فاميل خود ليست خواهند شد. (از A تا Z) در صورتي كه بخواهيم ترتيب Sort شدن برعكس شود (از Z تا A) مي‌توان پس از دستور ORDERBY از كلمه كليدي DESC استفاده كرد، مانند مثال زير

SELECT *
FROM teachers
ORDERBY DESC name

در اين مثال Sort شدن بترتيب اسم و نه بترتيب فاميل انجام مي‌گيرد.

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

بعنوان مثال در Query زير نام اساتيدي كه بيش از 30 سال دارند برحسب فاميل آنها مرتب مي‌شود در صورتي كه چند استاد داراي اسم فاميل يكساني باشند ملاك مرتب شدن، اسم كوچك آنها خواهد بود.

SELECT *
FROM teachers
WHERE age > 30
ORDERBY family, name

4 – استفاده از توابع:

در دستور SELECT علاوه بر تعريف فيلدها مي‌توان از عبارتهاي رياضي و يا توابع استاندارد SQL نيز استفاده كرد.

بعنوان مثال اگر ماليات بردرآمد پنج درصد باشد Query زير نام اساتيد و مالياتي را كه هر كدام مي‌پردازند را مشخص مي‌كند.

SELECT family, name, salary*5/100
FROM teachers

علاوه بر عبارتهاي رياضي مي‌توان از توابع استاندارد SQL نيز استفاده كرد، تعدادي از اين توابع عبارتند از:

تابع COUNT : تعداد فيلدها را برمي‌گرداند.

تابع SUM : مجموع يك فيلد عددي را برمي‌گرداند.

تابع AVG : ميانگين يك فيلد عددي را برمي‌گرداند.

تابع MIN : مينيمم يك فيلد عددي را برمي‌گرداند.

تابع MAX : ماكزيمم يك فيلد عددي را برمي‌گرداند.

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

SELECT COUNT (name), SUM (Salary)
FROM teachers

5 – Queryهاي چند جدولي:

تمام Queryهايي كه تاكنون مشاهده كرديد، Queryهاي تك جدولي بودند بدين معني كه در هر Query فقط اطلاعات يك جدول مورد جستجو قرار مي‌گرفت. در SQL امكان نوشتن Queryهاي چند جدولي نيز وجود دارد. در اين حالت اطلاعات چند جدول بطور همزمان مورد جستجو قرار مي‌گيرد و حتي امكان مقايسه فيلدهايي از يك جدول با فيلدهايي از جدول ديگر نيز وجود دارد. اگر در بين جداولي كه در Query شركت داده مي‌شوند فيلدهاي هم نام وجود داشته باشد بايد نام آن فيلدها را Fully qualified كرد بدين معني كه ابتدا اسم جدول و سپس اسم فيلد را ذكر كرد. بين اسم جدول و اسم فيلد نيز بايد از يك كاراكتر نقطه (‘.’) استفاده كرد.

بعنوان مثال اگر بخواهيم ليست اساتيد و دانشجوياني كه داراي ارتباط فاميلي هستند را ببينيم مي‌توانيم از Query زير استفاده بكنيم:

SELECT *
FROM students, teachers
WHERE students.family = teachers. Family

و يا اگر بخواهيم ليست اساتيدي را مشاهده كنيم كه سن آنها از سن برخي از دانشجويان كمتر است، مي‌توانيم Query زير را اجرا كنيم:

SELECT teachers.family, teachers.name
FROM students, teachers
WHERE teachers.age < students.age

6 – كلام آخر:

كلام آخر اينكه زبان SQL برخلاف زبانهايي مانند C يا C++ يك زبان Case Sensitive نيست بدين معني كه به بزرگ يا كوچك بودن حروف حساس نمي‌باشد. بنابراين به راحتي مي‌‌توان دستورات و كلمات كليدي آنرا در هر برنامه‌اي با حروف كوچك يا بزرگ تايپ كرد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


دلفي 7 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۸۵۷ مراجعه امروز
۴۴۴۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دلفي 7
نويسنده : ساسان نيكوكار
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۷۳۹۷ بار مطالعه شده است
۱۵۳ نفر تا به حال به اين مقاله رای داده اند.

پس از گذشت 10 ماه ويرايش جديد دلفي 7 به بازار آمد، اين ويرايش همانند سابق در سه نسخه به بازار نرم افزار عرضه شده است كه شامل نسخه Standard، Professional و Enterprise مي‌باشد.

در ويرايش دلفي 7، شركت بورلند تغييراتي را در ساختار داخلي دلفي داده است كه مهمترين آن حمايت و توانايي برنامه‌نويسي بر اساس تكنولوژي .NET مي‌باشد. اين بدين معنااست كه برنامه‌نويسان دلفي مي‌توانند از هم اكنون به محيط .Net framework سوئيچ كنند و از مزاياي برنامه‌نويسي در آن كه مي‌توان به داشتن كلاسهاي برنامه‌نويسي فراوان، امنيت بالاي برنامه‌نويسي و وابسته نبودن به محيط برنامه‌نويسي و محيط اجراي برنامه را نام برد.

ويرايش جديد دلفي 7 در دو CD ارائه شده است كه CD اول كامپايلر دلفي بوده و CD دوم شامل نسخه Preview از .Net framework جهت اجراي برنامه‌هاي نوشته شده توسط دلفي 7 مي‌باشد. لازم به ذكر است كه كاربران بايد حتماً .Net را بر روي سيستم خود نصب كنند تا بتوانند در محيط دلفي 7 برنامه‌نويسي كنند.

حداقل سيستمي كه جهت كار با دلفي 7 پيشنهاد مي‌شود بايد داراي مشخصات زير باشد:

- Intel Pentium II/233MHz يا بالاتر

- MS Windows 98, 2000, XP

- RAM 64MB (البته 128MB پيشنهاد مي‌شود)

- 520MB فضاي خالي روي ديسك سخت

- درايو CD-ROM

- كارت گرافيكي SVGA يا بالاتر

امكانات جديد درون دلفي 7 شامل چندين بخش مي‌باشد :

- افزودن ابزار Model Driven Architecture (MDA) به دلفي، اين يكي از محصولات معروف شركت نرم افزاري بورلند مي‌باشد كه امكان مي‌دهد تا شما بتوانيد بهتر و قويتر معماري برنامه خود را كنترل و پشتيباني كنيد اين محصول براساس UML بوده و مدلهاي Rose را نيز حمايت مي‌كند.

- طراحي و مدلسازي برنامه‌ها با UML : يكي از ويژگيهاي ويرايش 7 دلفي حركت به سمت برنامه نويسي و طراحي شيءگرا با ابزار UML مي‌باشد. محصول Mode Maker از معروفترين اين ابزارها مي‌باشد كه جهت طراحي پروژه با UML در محيط دلفي توسط شركتي به همين نام نوشته شده است. در اين محصول شما امكان طراحي كلاسها و دياگرامهاي UML را داريد كه سورس دلفي آنها نيز بطور خودكار براي شما نوشته مي‌شود.

- ايجاد برنامه‌هاي C-business : در ويرايش جديد شما مي‌توانيد به راحتي به توليد برنامه‌هاي مبتني بر Web اقدام كنيد Websnap و bizsnap در ويرايش جديد كامل شده‌اند و تكنولوژي .Net را نيز همراه خود دارند، اين قابليت بزرگي مي‌باشد زيرا شما با كمترين زمان ممكن مي‌توانيد به توليد محصولات تحت وب بپردازيد و فروشگاههاي تجاري خود را ايجاد كنيد.

- ايجاد برنامه‌هاي كاربردي با ويندوز XP : از ديگر قابليتهاي جديد دلفي 7 افزودن حالات و شكل و قيافه ويندوز XP با VCLهاي دلفي مي‌باشد. اين امكان به شما اجازه مي‌دهد تا برنامه‌هاي قويتري را در محيط ويندوز پياده‌سازي كنيد.

- افزايش قدرت دلفي 7 در تهيه گزارشات و حمايت از محيط‌هاي كاري باعث شده است تا بتوان روي اين محصول بعنوان يكي از كامپايلرهاي قوي در محيط .Net سرمايه گذاري كرد، حمايت از Kylix3 در ويرايش جديد و توانايي برنامه نويسي تحت Linux از ديگر تواناييهاي دلفي ويرايش 7 مي‌باشد.

- امكان ايجاد سيستمهاي چند لايه (3-tier) براساس ساختار DCOM، COM+ و CORBA بر پايه تكنولوژي Datasnap و حمايت از تمامي بانكهاي اطلاعاتي معروف دنيا از قبيل DBZ ،Oracle ،MySQL ،SQL Server و ... كه در ويرايش 6 دلفي نيز وجود داشت ولي در ويرايش جديد اين امكانات بهتر، سريعتر و قويتر شده است.

کيفيت مقاله :
عالی خوب متوسط ضعيف


نكات ريز و درشت در دلفي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۸۶۰ مراجعه امروز
۴۴۵۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نكات ريز و درشت در دلفي
نويسنده : ساسان نيكوكار
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۱/۱۳۸۱ اين مقاله ۵۷۷۴ بار مطالعه شده است
۴۰ نفر تا به حال به اين مقاله رای داده اند.

چگونه تمامي رويدادهاي يك شيء را در زمان اجرا به Nil تنظيم ‌كنيم؟

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

 unit uNilEvent;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
                  StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

uses
Typlnfo;

procedure NilEvents(lnstance: TObject);
var
Typelnfo: PTypelnfo;
I, Count: Integer;
PropList: PPropList;
Proplnfo: PProplnfo;
Method: TMethod;
begin
Typelnfo := Instance.Classlnfo;
Method.Code := nil;
Method.Data := nil;
Count := GetPropList(Typelnfo, [tkMethod], nil);
GetMem(PropList, Count * SizeOf(Pointer));
try
GetPropList(Typelnfo, [tkMethod], PropList);
for I := 0 to Count -1 do
begin
Proplnfo := PropList^[I];
SetMethodProp(lnstance, Proplnfo, Method);
end;
finally
FreeMem(PropList);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
sText = 'The 2nd time you click Button1 the event will not fire';
begin
NilEvents(Button1);
ShowMessage(sText);
end;

end.

چگونه رويداد مربوط به تمامي اجزاء درون برنامه خود را تغيير دهيم؟

گاهي لازم مي‌شود تا ما فراميني را براي يكي از رويدادهاي برنامه خود به تمامي اشياء استفاده شده در برنامه نسبت دهيم اينكار مي‌تواند با استفاده از RTTI دلفي صورت گيرد شما مثالي را مي‌بينيد كه اين كار را شبيه‌سازي كرده است.

uses
Typlnfo;

procedure TFrmRTTIOnChange.Button1Click(Sender: TObject);
var
proplnfo: PProplnfo;
thisEvent: TNotifyEvent;
begin
proplnfo := GetProplnfo(Memo1.Classlnfo, 'OnChange');
if proplnfo <> nil then
begin
thisEvent := Memo1AltChange;
SetOrdProp(Memo1, Proplnfo, integer(@thisEvent));
end;
end;

procedure TFrmRTTIOnChange.Memo1Change(Sender: TObject);
begin
Caption := 'Normal On Change';
end;

procedure TFrmRTTIOnChange.Memo1AltChange(Sender: TObject);
begin
Caption := 'Alternate On Change';
end;

کيفيت مقاله :
عالی خوب متوسط ضعيف


تاريخچه پاسكال ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۸۶۶ مراجعه امروز
۴۴۵۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تاريخچه پاسكال
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۹/۱۱/۱۳۸۱ اين مقاله ۲۲۳۵ بار مطالعه شده است
۳۸ نفر تا به حال به اين مقاله رای داده اند.

زبان شى گرايى پاسكال كه ما در دلفى از آن سود مى جوييم در سال 1995 همراه با محيط برنامه نويسى ديدارى (Visual) دلفى اختراع نشد. اين زبان توسعه يافته زبان پاسكال شى گرا بود كه قبلا در محصول بورلند پاسكال از آن استفاده شده بود. اما بورلند پاسكال را اختراع نكرد، او تنها به گسترش و عمومى شدن كمك نمود.

اين فصل حاوى اطلاعات تاريخى راجع به بسترهاى تاريخى پاسكال شى گرا و تكامل آن است. فعلا اين تاريخچه در فصل كنونى بسيار مختصر است.

تولد پاسكال

 پاسكال در واقع بوسيله Niklaus Wirth پروفسور دانشگاه پولى تكنيك زوريخ/سوييس در سال 1971 طراحى شد. پاسكال به عنوان زبان ساده شده زبان Algol طراحى شد و مقاصد آمووزشى داشت.

وقتى پاسكال اختراع شد، زبان هاى برنامه نويسى بسيار زيادى وجود ولى تنها چند تا از آنها بسيار استفاده مى شدند كه عبارتند از: FORTRANT، C، Assembler، COBOL. ايده اصلى زبان جديد نظم، مديريت داده‌ها و نياز به تعريف داده ها بود. اين زبان از ابتدا به گونه اى طراحى شده بود كه يك زبان آموزشى باشد.

توربو پاسكال

 كامپايلر مشهور پاسكال، كه توربو پاسكال نام داشت در سال 1983 معرفى شد. توربو پاسكال هميشه در بين زبان هاى برنامه نويسى از فروش بسيار بالايى برخوردار بود.

توربو پاسكال مفهوم جديدى را به نام Integrated Development Environment و يا به طور خلاصه IDE را معرفى كرد. IDE يعنى محيط برنامه نويسى مجتمع. در واقع شما در اين محيط مى توانيد كد را اديت كنيد (در يك ويرايشگر هماهنگ با WordStar)، كامپايلر را آغاز كنيد، خطاها را ببنيد، و به خطهايى كه حاوى آن خط ها است برويد. البته اين مساله هم اكنون بسيار بى معنى به نظر مى آيد، اما در گذشته لازم بود كه شما از اديتور بيرون برويد و به DOS برگرديد و سپس كامپايلر را به صورت خط فرمانى آغاز كنيد، سپس شماره خطهاى خط را يادداشت كنيد، دوباره ويرايشگر را باز كنيد و به خطهاى حاوى خطا برويد و دوباره همه چيز را از اول دوباره انجام دهيد .......

به علاوه بورلند توربوپاسكال را فقط 49 دلار مى فروخت، در حالى كه مايكروسافت كامپايلر پاسكال خود را چند صد دلار به فروش مى رساند. تداوم موفقيت چندساله توربو پاسكال سبب شد كه در آمدهاى مايكروسافت از فروش كامپايلر پاسكال بسيار كاهش ياد.
پاسكال دلفي

 بعد از 9 نسخه از انتشار توربو پاسكال و بورلند پاسكال، كه به تدريج زبان هاى بسيار گسترده اى شده بود، بورلند در سال 1995 دلفى را معرفى كرد كه پاسكال را به يك محيط برنامه نويسى ديدارى (Visualي) تبديل كرده بود.

کيفيت مقاله :
عالی خوب متوسط ضعيف


تغييرات در رجيستری ويندوز توسط فايلهای رجيستری ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۴۸ مراجعه امروز
۵۰۶۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تغييرات در رجيستری ويندوز توسط فايلهای رجيستری
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۱۱/۱۳۸۱ اين مقاله ۸۵۰ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.
تغييرات در رجيستري ويندوز توسط فايلهاي رجيستري يک قابليت خوب ويرايشگر رجيستري در اين است که ورود و خروج اطلاعات را توسط فايلهاي متني امکان پذير ساخته است. اين فايلهاي متني با پسوند .Reg هستند. شما مي توانيد اطلاعات رجيستري را به طور کامل يا فقط اطلاعات يک کليد خاص را در يک فايل نگهداري کنيد. براي اين کار در قسمت سمت چپ ويرايشگر رجيستري کليد مورد نظر را انتخاب کرده و سپس گزينه Export Registry File را از منوي Registry انتخاب کنيد. در کادر مکالمه اي که باز مي شود مي توانيد محدوده اطلاعاتي را که مي خواهيد مشخص کنيد در انتها با تاييد يک فايل با پسوند.Reg با نامي که وارد کرده ايد ساخته مي شود. يکي از خصلتهاي فايلهاي رجيستري در ويندوز اين است که اگر شما بر روي آنها کليک کنيد قادر هستيد که اطلاعات آن را به رجيستري وارد کنيد. البته اين کار را از طريق گزينه Import Registry File از منوي Registry هم مي توانيد انجام دهيد. شما مي توانيد براي تغيير رجيستري يا اضافه کردن اطلاعات به آن يک فايل رجيستري ايجاد کرده و هر بار کافي است با يک بار کليک بر روي فايل اطلاعات را وارد رجيستري ويندوز کنيد.
ساختار فايلهاي رجيستري
فايلهاي رجيستري که از نوع متني هستند با کلمه REGEDIT4 شروع مي شوند که نشان دهنده محتويات فايل و همچنين شماره نسخه رجيستري مي باشد. براي يادگيري بهتر در زير يک فايل رجيستري ايجاد مي کنيم که يک کليد با نام MYAPP در کليد اصلي HKEY_CURRENT_USER\Software ايجاد کرده و در آن سه متغيير با نامهاي Var1 تا Var3 با نوعهايمختلف ايجاد ميکنيم. شما مي توانيد با يادگيري اين روش مي توانيد مقادير جديد را به رجيستري وارد کرده يا تغيير يا حذف کنيد. ابتدا يک فايل با نام MyApp.Reg ايجاد مي کنيم. در سطر اول آن کلمه REGEDIT4 را که سرفصل يا هدر فايل مي باشد را مي نويسيم. سپس خط زير را مي نويسيم.
[HKEY_CURRENT_USER\Software\MyApp]
اين خط به ويرايشگر رجيستري مي گويد که به کليد فوق برو و در صورتي که آن را پيدا نکردي آن را ايجاد کن. شما مي توانيد به جاي کليد فوق هر کليد ديگري را ايجاد کنيد. در مثال ما کليد MyApp توسط برنامه Regedit ساخته مي شود.
"Var1"=dword:1024
اين خط به ويرايشگر رجيستري مي گويد که در کليد جاري يک متغيير با نام Var1 و از نوع عددي Dword ايجاد کرده و مقدار آن را برابر با 1024 قرار دهد.
"Var2"="MyApp-Title"
اين خط به ويرايشگر رجيستري مي گويد که در کليد جاري يک متغيير با نام Var2 و از نوع رشته string ايجاد کرده و مقدار MyApp-Title را به آن بدهد.
"Var3"=hex:C5,0B,00,00,40,36,02
اين خط به ويرايشگر رجيستري مي گويد که در کليد جاري يک متغيير با نام Var3 و از نوع باينري ايجاد کرده و مقدار C5,0B,00,00,40,36,02 را به آن بدهد.
حذف مقادير و کليد ها
[-HKEY_CURRENT_USER\Software\MyApp]
اين خط به ويرايشگر رجيستري مي گويد که کليد فوق را در صورت وجود حذف کند.
"Var1"=-
اين خط به ويرايشگر رجيستري مي گويد که متغيير Var1 را در صورت وجود حذف کند.
کيفيت مقاله :
عالی خوب متوسط ضعيف


ارزيابي سريع يك تيم نرم افزاري با استفاده از تست يوئل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۴۷ مراجعه امروز
۴۸۶۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ارزيابي سريع يك تيم نرم افزاري با استفاده از تست يوئل
نويسنده : کاظم آقاسی
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۱/۱۱/۱۳۸۱ اين مقاله ۵۶۰ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
برنامه نويسها بدقولترين انسانها هستند . اينو من نميگم , همه ميگن . حالا چكار كنيم بهموون نگن بدقول؟ آقاي Joel Spolsky 12 سوال طرح كردن تا به اين وسيله شما بتونين يك برآورد كلي از وضعيت پروژه هاي نرم افزاريتون داشته باشين . شما بايد سعي كنيد كاري كنيد تا جواباتون به اين سوالات مثبت باشه . در اينصورت پروژتوون هم موفقه و هم به احتمال زياد سر وقت آماده ميشه . اين اطلاعات براي نوشتن برنامه ها بصورت انفرادي هم مفيده . در اينصورت شما اين سوالات رو از خودتوون ميپرسيد .

تست يوئل

The Joel Test

آيا تاكنون چيزي در مورد SEMA شنيده ايد ؟

يك سيستم الكترونيكي نسبتا پيچيده براي سنجش يك تيم نرم افزاري است . براي فراگيري كار با اين سيستم به حدود 6 سال وقت نياز داريد .در حالي كه با انجام تست زير ميتوانيد كارايي تيم نرم افزاري خودتان را محك بزنيد .

(The Joel Test) تست يوئل :

1- آيا از ناظر منبع استفاده ميكنيد ؟

2- آيا ميتوانيد كد اجراييتان را در هر مرحله بسازيد ؟

3- آيا ساختارهاي روزانه ميسازيد؟

4- آيا ديتابيس اشكال داريد ؟

5- آيا اشكالات كد قبلي را قبل از نوشتن كد جديد برطرف ميكنيد ؟

6- آيا برنامه زمانبندي به روز داريد ؟

7- آيا شرحي از ويژگيهاي پيشنهادي در مورد برنامه داريد ؟

8- آيا برنامه نويسهايتان محيط كاري آرام و ساكت دارند ؟

9- آيا از بهترين ابزاري كه ميتوانيد بخريد استفاده ميكنيد ؟

10- آيا تستر داريد ؟

11- آيا از نفرات جديد در خلال مصاحبه ميخواهيد كد بنويسند ؟

12- آيا در پايان كار يك تست مفيد و گسترده انجام ميدهيد ؟

بهترين ويژگي اين تست سادگي در گرفتن پاسخ "" بله "" يا "" خير "" است . اگر براي هر پاسخ مثبت يك امتياز به تيم خود بدهيد , ميتوانيد يك برآورد كلي از تيمتان داشته باشيد . اگر تيم شما حائز امتياز 12 شود يعني تمام قواعد فوق را اجرا كرده باشد , يك تيم عالي داريد , امتيازهاي 10 و 11 نيز خوبند , ولي اگر مجموع امتيازات شما كمتر از 10 باشد به يك بازنگري در تيمتان نياز داريد . شركتهايي مثل ميكروسافت همواره در امتياز 12 هستند ولي شركتهاي كوچك اغلب امتيازي كمتر از حد عالي وخوب دارند( اغلب اوونا حتي امتيازي بين 2 و 3 دارن !! كه به يك كمك جدي احتياج دارند ) اما با بكارگيري اين قواعد ميتوان كارايي آنها را افزايش داد .

حال به تشريح 12 سوال فوق ميپردازيم .

1- آيا از ناظر منبع استفاده ميكنيد ؟

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

2- آيا ميتوانيد كد اجراييتان را در هر مرحله بسازيد ؟

با اينكار شما ميتوانيد از چگونگي اجراي كد با هر تغييري در آن اطمينان حاصل كنيد و تغييرات لازمه را در آن انجام دهيد . اين مساله در خطايابي كمك زيادي ميكند . همچنين با ساختن بسته نصبي در پايان ميتوانيد آنرا براي اجرا بروي CD , درايو سخت ويا وب سايت آماده كنيد .

3- آيا ساختارهاي روزانه ميسازيد؟

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

4- آيا ديتابيس اشكال داريد ؟

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

5- آيا اشكالات كد قبلي را قبل از نوشتن كد جديد برطرف ميكنيد ؟

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

6- آيا برنامه ريزي به روز داريد ؟

شعار برنامه نويسها اينه : آماده ميشه هر وقت آماده شد !!!!! ما بايد آماده شدن پروژه را تحت كنترل خودموون در بياريم براي اينكار كار ما به برنامه ريزي احتياج داريم . اما چه چيزي باعث ميشود ما در امر كدنويسي هم برنامه ريزي كنيم ؟ اگر يك كد تجاري مينويسيد مجبوريد برنامه ريزي داشته باشيد چرا كه بايد زمان اتمام و اجراي كد را بدانيد . اما در ساير زمينه ها هم با برنامه ريزي ميتوانيد نسبت به انجام بهتر پروژه اطمينان پيدا كنيد .

7- آيا شرحي از ويژگيهاي پيشنهادي در مورد برنامه داريد ؟

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

8- آيا برنامه نويسهايتان محيط كاري آرام و ساكت دارند ؟

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

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

9- آيا از بهترين ابزاري كه ميتوانيد بخريد استفاده ميكنيد ؟

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

10- آيا تستر داريد ؟

اگر شما به ازاي هر يك يا در برنامه نويس يك تستر نداشته باشيد , محصولاتتان همواره باگدار هستند . شما ميتوانيد با استخدام يك تستر با هزينه فرضاً30 دلار جلوي يك هزينه صد دلاري براي تصحيح باگهاي احتمالي را بگيريد .

11- آيا از نفرات جديد در خلال مصاحبه ميخواهيد كد بنويسند ؟

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

12- آيا در پايان كار يك تست مفيد و گسترده انجام ميدهيد ؟

يك تست مفيد و گسترده آنست كه برنامه خود را به چند نفر نشان بدهيد تا با آن كار كنند . تجربه نشان ميدهد اگر برنامه تان را به 5 نفر بدهيد تا با آن كار كنند 95 درصد در مورد معايب , باگها و مزاياي برنامه تان مطمئن ميشويد .

با طراحي يك رابط كاربر زيبا و مناسب كه مورد پسند مشتري باشد ميتوانيد براي محصولتان مشتري هاي بيشتري پيدا كنيد . براي اينكار رابط كاربرتان را به چند نفر نشان بدهيد تا يك نماي كلي از علايق مردم را بدست بياوريد . به توصيه آقاي Joel Spolsky بهتر است در پايان كار خودتان هم يكبار نرو افزار را تست كنيد . چرا كه هم مجاني است و هم خودتان يك مرور كلي روي آن انجام داده ايد و اينكار ميتواند در كيفيت بهتر نرم افزار موثر باشد

کيفيت مقاله :
عالی خوب متوسط ضعيف


چگونگي فعاليت ديوارهاي آتش در لايه هاي مختلف و انواع آنها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۴۸ مراجعه امروز
۴۷۶۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چگونگي فعاليت ديوارهاي آتش در لايه هاي مختلف و انواع آنها
نويسنده : کاظم آقاسی
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۱/۱۱/۱۳۸۱ اين مقاله ۱۱۲۷ بار مطالعه شده است
۱۹ نفر تا به حال به اين مقاله رای داده اند.
سيستمي است بين كاربران يك شبكه محلي و يك شبكه بيروني (مثل اينترنت) كه ضمن نظارت بر بر دسترسي ها , در تمام سطوح , ورود و خروج اطلاعات را تحت نظر دارد .

بسته هاي TCP و IP قبل و پس از ورود به شبكه وارد ديوارآتش ميشوند و منتظر مي مانند تا طبق معيارهاي امنيتي خاصي پردازش شوند . حاصل اين پردازش احتمال وقوع سه حالت است :

1- اجازه عبور بسته صادر ميشود (Accept Mode)
2- بسته حذف ميشود (Blocking Mode)
3- بسته حذف ميشود و پيام مناسبي به مبدا ارسال بسته فرستاده ميشود (Response Mode)

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

از آنجا كه معماري TCP/IP بصورت لايه لايه است ( شامل 4 لايه : فيزيكي, شبكه, انتقال و كاربردي ) وهر بسته براي ارسال يا دريافت بايد از هر 4 لايه عبور كند بنابراين بايد براي حفاظت بايد فيلدهاي مربوط شده در هر لايه را مورد بررسي قرار دهيم . بيشترين اهميت در لايه هاي شبكه , انتقال و كاربرد است چون فيلد مربوط به لايه فيزيكي منحصربه فرد نيست و در طول مسير عوض ميشود . پس به يك ديوار آتش چند لايه نياز داريم .

سياست امنيتي يك يك شبكه مجموعه اي از قواعد حفاظتي است كه بنابر ماهيت شبكه در يكي از يه لايه ديوار آتش تعريف ميشوند . كارهايي كه در هر لايه از ديوار آتش انجام ميشود عبارتست از :

1- تعيين بسته هاي ممنوع ( سياه ) و حذف آنها يا ارسال آنها به سيستمهاي مخصوص رديابي (لايه اول ديوار آتش)
2- بستن برخي از پورتها متعلق به برخي سرويسها مثلTelnet , FTP و …(لايه دوم ديوار آتش)
3- تحليل يرآيند متن يك صفحه وب يا نامه الكترونيكي يا .... (لايه سوم ديوار آتش)

- A در لايه اول فيلدهاي سرآيند بسته IP مورد تحليل قرار ميگيرد :
n آدرس مبدا( Source Address ) : برخي از ماشينهاي داخل يا خارج شبكه حق ارسال بسته را ندارند , بنابراين بسته هاي آنها به محض ورود به ديوار آتش حذف ميشود .

n آدرس مقصد( Destination Address ) : برخي از ماشينهاي داخل يا خارج شبكه حق دريافت بسته را ندارند , بنابراين بسته هاي آنها به محض ورود به ديوار آتش حذف ميشود .

IP آدرسهاي غيرمجاز و مجاز براي ارسال و دريافت توسط مدير مشخص ميشود .

n شماره شناسايي يك ديتا گرام تكه تكه شده( Id & Fragment Offset ) : بسته هايي كه تكه تكه شده اند يا متعلق به يك ديتا گرام خاص هستند حذف ميشوند .

n زمان حيات بسته (Time To Live ) : بسته هايي كه بيش ازتعداد مشخصي مسيرياب را طي كرده اند حذف ميشوند.

n بقيه فيلدها : بر اساس صلاحديد مدير ديوار آتش قابل بررسي اند .

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

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

B - در لايه دوم فيلدهاي سرآيند لايه انتقال بررسي ميشوند :
n شماره پورت پروسه مبدا و مقصد : با توجه به اين مساله كه شماره پورتهاي استاندارد شناخته شده اند ممكن است مدير ديوار آتش بخواهد بخواهد مثلا سرويس FTP فقط براي كاربران داخل شبكه وجود داشته باشد بنابراين ديوار آتش بسته هاي TCP با شماره پورت 20 و 21 كه قصد ورود يا خروج از شبكه را داشته باشند حذف ميكند . ويا پورت 23 كه مخصوص Telnet است اغلب بسته است . يعني بسته هايي كه پورت مقصدشان 23 است حذف ميشوند .

n كدهاي كنترلي (TCP Code BITS) : ديوار آتش با بررسي اين كدها به ماهيت بسته پي ميبرد و سياستهاي لازم براي حفاظت را اعمال ميكند . مثلا ممكن است ديوار آتش طوري تنظيم شده باشد كه بسته هاي ورودي با SYN=1 را حذف كند . بنابراين هيچ ارتباط TCP از بيرون به شبكه برقرار نميشود .

n فيلد شماره ترتيب و Acknowledgement : بنابر قواعد تعريف شده توسط مدير شبكه قابل بررسي اند .

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

C - در لايه سوم حفاظت بر اساس نوع سرويس و برنامه كاربردي صورت ميگيرد :
در اين لايه براي هر برنامه كاربردي يك سري پردازشهاي مجزا صورت ميگيرد . بنابراين در اين مرحله حجم پردازشها زياد است . مثلا فرض كنيد برخي از اطلاعات پست الكترونيكي شما محرمانه است و شما نگران فاش شدن آنهاييد . در اينجا ديوار آتش به كمك شما مي آيد و برخي آدرسهاي الكترونيكي مشكوك را بلوكه ميكند , در متون نامه ها به دنبال برخي كلمات حساس ميگردد و متون رمزگذاري شده اي كه نتواند ترجمه كند را حذف ميكند .

يا ميخواهيد صفحاتي كه در آنها كلمات كليدي ناخوشايند شما هست را حذف كند و اجازه دريافت اين صفحات به شما يا شبكه شما را ندهد .

انواع ديوارهاي آتش :

ديوارهاي آتش هوشمند :
امروزه حملات هكرها تكنيكي و هوشمند شده است به نحوي كه با ديوارهاي آتش و فيلترهاي معمولي كه مشخصاتشان براي همه روشن است نميتوان با آنها مقابله كرد . بنابراين بايد با استفاده از ديوارهاي آتش و فيلترهاي هوشمند با آنها مواجه شد .

از آنجا كه ديوارهاي آتش با استفاده از حذف بسته ها و بستن پورتهاي حساس از شبكه محافظت ميكنند , و چون ديوارهاي آتش بخشي از ترافيك بسته ها را به داخل شبكه هدايت ميكنند ,(چرا كه درغير اين صورت ارتباط ما با دنياي خارج از شبكه قطع ميشود . ) بنابراين هكرها ميتوانند با استفاده از بسته هاي مصنوعي مجاز و شناسايي پورتهاي باز به شبكه حمله كنند.

بر همين اساس هكرها ابتدا بسته هايي ظاهرا مجاز را بسمت شبكه ارسال ميكنند .

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

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

مشكل اين فيلترها زمان پردازش و حافظه بالايي است كه نياز دارند . اما در عوض ضريب اطمينان امنيت شبكه را افزايش ميدهند .

ديوارهاي آتش مبتني بر پروكسي :
ديوارهاي آتش هوشمند فقط نقش ايست وبازرسي را ايفا ميكنند و با ايجاد ارتباط بين كامپيوترهاي داخل و خارج شبكه كاري از پيش نميبرد . اما ديوارهاي آتش مبتني بر پروكسي پس از ايجاد ارتباط فعاليت خود را آغاز ميكند . در اين هنگام ديوارهاي آتش مبتني بر پروكسي مانند يك واسطه عمل ميكند , به نحوي كه ارتباط بين طرفين بصورت غير مستقيم صورت ميگيرد . اين ديوارهاي آتش در لايه سوم ديوار اتش عمل ميكنند . بنابراين ميتوانند بر داده هاي ارسالي در لايه كاربرد نيز نظارت داشته باشند .

ديوارهاي آتش مبتني بر پروكسي باعث ايجاد دو ارتباط ميشود :

ارتباط بين مبدا و پروكسي
ارتباط بين پروكسي و مقصد

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

ديوارهاي آتش مبتني بر پروكسي به حافظه بالا و CPU بسيار سريع نياز دارند . و از انجا كه ديوارهاي آتش مبتني بر پروكسي بايد تمام نشستها را مديريت كنند گلوگاه شبكه محسوب ميشوند . پس هرگونه اشكال در آنها باعث ايجاد اختلال در شبكه ميشود .

اما بهترين پيشنهاد براي شبكه هاي كامپيوتري استفاده همزمان از هر دو نوع ديوار آتش است . با استفاده از پروكسي به تنهايي بارترافيكي زيادي بر پروكسي وارد ميشود . با استفاده از ديوارهاي هوشمند نيزهمانگونه كه قبلا تشريح شد به تنهايي باعث ايجاد ديواري نامطمئن خواهد شد . اما با استفاده از هر دو نوع ديوار أتش بصورت همزمان هم بار ترافيكي پروكسي با حذف بسته هاي مشكوك توسط ديوار آتش هوشمند كاهش پيدا ميكند و هم با ايجاد ارتباط واسط توسط پروكسي از خطرات احتمالي پس از ايجاد ارتباط جلوگيري ميشود
مقاله بالا از سايت barnamenevis.com برداشته شده است

کيفيت مقاله :
عالی خوب متوسط ضعيف


بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۹ بيننده در حال حاضر
۱۸۷۲ مراجعه امروز
۴۴۶۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
نويسنده : مديريت سايت
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۳/۱۱/۱۳۸۱ اين مقاله ۶۷۸۸ بار مطالعه شده است
۷۶ نفر تا به حال به اين مقاله رای داده اند.
طريقه بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
اطلاعاتي که روالهاي زير برمي گرداند عبارتست از شماره سريال - نوع سيستم فايل -
پشتيباني از نام فايلهاي طولاني و نام درايو

From The Windows.Pas
--------------------
--------------------

function GetVolumeInformationA(lpRootPathName: PAnsiChar;
lpVolumeNameBuffer: PAnsiChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: PAnsiChar; nFileSystemNameSize: DWORD): BOOL; stdcall;

function GetVolumeInformationW(lpRootPathName: PWideChar;
lpVolumeNameBuffer: PWideChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: PWideChar; nFileSystemNameSize: DWORD): BOOL; stdcall;

function GetVolumeInformation(lpRootPathName: PChar;
lpVolumeNameBuffer: PChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
lpFileSystemNameBuffer: PChar; nFileSystemNameSize: DWORD): BOOL; stdcall;

Example
-------
-------

Used Variables
--------------
Path : PChar;
--> String that contains the root directory of the volume to
be described.
VolumeName : PChar;
--> Points to a buffer that receives the name of the specified
volume.
VolumeNameSize : DWord;
--> Specifies the lenght in characters of the buffer that
receives the volume name.
SerialNumber : DWord;
--> Points to a variable that receives the volume's serial
number.
MaxLength : DWord;
--> Receives the maximum length in characters of a filename
supported by the specified file system.
(to indicate if long file names are supported)
- long file names --> value : 255
Flags : DWord;
- FS_CASE_IS_PRESERVED
- FS_CASE_SENSITIVE
- FS_UNICODE_STORED_ON_DISK
- FS_PERSISTENT_ACLS
- FS_FILE_COMPRESSION
- FS_VOL_IS_COMPRESSED
(for more info on the flags look in the help file)
FileSystem : PChar;
--> Points to a buffer that receives the name of the specified
file system.
FileSystemNameSize: DWord;
--> Specifies the lenght in characters of the buffer that
receives the filesytem name.

Code
----
Path := 'C:\';
VolumeNameSize := 256;
FileSystemNameSize := 256;
GetVolumeInformation(Path,VolumeName,VolumeNameSize,
@SerialNumber,MaxLength,Flags,FileSystem,FileSystemNameSize);

کيفيت مقاله :
عالی خوب متوسط ضعيف


يونی کد چيست؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۵۰ مراجعه امروز
۴۸۶۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
يونی کد چيست؟
نويسنده : امير رضا قويدل
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۳/۱۱/۱۳۸۱ اين مقاله ۴۲۸۰ بار مطالعه شده است
۴۷ نفر تا به حال به اين مقاله رای داده اند.
مقدمه:
از چند سال پيش در كشورمان، استفاده از كامپيوتر با سرعت سرسام‌آوري جاي خود را در تمامي عرصه‌ها باز كرد و سيل كامپيوترهاي شخصي و تجهيزات جانبي آنها به سوي كشور سرازير شد. اما بايستي اعتراف كرد كه با وجود اين كه سرعت سوق به سوي تكنولوژي ديجيتال در ايران روند خوبي را طي نموده، اما در زمينه ارائه اطلاعات و پردازش آن به زبان فارسي تشتتي در اين ميان ايجاد گرديد. يكي از عوامل موثر در اين ناهماهنگي، نبود الگويي واحد براي ذخيره و پردازش و نمايش اطلاعات بر روي رسانه‌هاي جديد اطلاع‌رساني همچون كامپيوتر در سطح ملي است.

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

نتيجه ادامه روند جاري

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

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

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

راه حل چيست؟

از زماني كه اولين گزارش «زبان فارسي و كامپيوتر» در سال 1356 در دانشكده رياضي و كامپيوتر دانشگاه صنعتي شريف ارائه شد، تا امروز كه شبكه اينترنت چهره ديگري به اطلاع‌رساني داده است، مدت زيادي مي‌گذرد. امروزه ديگر محدوديت‌هاي سخت‌افزاري يا نرم‌افزاري نمي‌تواند مانع پياده‌سازي يك سيستم ذخيره‌سازي، نمايش، و تبادل اطلاعات چندزبانه گردد. امروزه مؤسسات بزرگ استانداردسازي چون ايزو ( ISO ) و W3 Consortium نيز، در استانداردهايشان مشكلات و مسائل مربوط به جهاني‌سازي را در نظر مي‌گيرند تا امر تبادل اطلاعات چند زبانه را تسهيل نمايند. اما به نظر مي‌رسد كه به دليل عدم حضور ايرانيان و فارسي‌زبان‌ها در اين روند، زبان فارسي قدري غريب مانده و كمتر به آن توجه شده است. به عنوان مثال، هنوز در بين صدها مجموعه‌نويسه( Character Set ) ثبت شده در اينترنت توسط يانا (Internet Assigned Number Authority)، تنها يك مجموعه‌نويسه ثبت شده متعلق به زبان فارسي است كه آن هم كد پيج اختصاصي شركت آيبيام است. حتي در مورد استاندارد كلي تبادل اطلاعات نيز قالبي كه مورد توافق همه باشد وجود ندارد. سه قالب موجود، ايران سيستم، استاندارد 2900 و استاندارد 3342 ، هر يك ايراداتي دارند كه سبب شده است شركت‌ها و مؤسسات داخلي به جدول‌هاي خاص خود روي آورند تا بتوانند نيازهاي خود را تا حدي رفع سازند.

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

يوني‌كد چيست؟

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

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

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

از مهم‌ترين مزايايي كه يوني‌كد براي زبان فارسي دارد (مثل بسياري زبان‌هاي ديگر) مي‌توان موارد زير را نام برد:

1. در نسخه استاندارد هر نرم‌افزاري كه از اين استاندارد پشتيباني كند، مي‌توان فارسي نوشت يا متون فارسي را خواند. بدين ترتيب ديگر نيازي به تأمين نسخه‌هاي خاص فارسي يا عربي نيست.

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

3. امكان استفاده هم‌زمان از زبان‌هاي فارسي و انگليسي را تأمين مي‌كند.

4. بدون استفاده از فونت‌هاي خاص امكان استفاده از علائم خاص را فراهم مي‌كند.

به بيان ديگر، «استاندارد يوني‌كد» استاندارد جهاني كدگذاري كاركترهاست كه براي پردازش كامپيوتري متون به كار مي‌رود. اين استاندارد همان كاراكترها و كدهاي استاندارد ISO/IEC 10646 را داراست و كاملا با آن سازگار است. پس در واقع هر پياده‌سازي سازگار با يوني‌كد، با ISO/IEC 10646 نيز سازگار است.

يوني‌كد امكان كدگذاري همه كاراكترهاي مورد استفاده در نوشتن زبان‌هاي دنيا را فراهم آورده‌است. اين استاندارد از كدگذاري 16بيتي استفاده مي‌كند كه براي بيش از65000 نويسه (كاراكتر) جا فراهم مي‌كند. اگر چه 65000 نويسه براي كدگذاري اكثر نويسه‌هايي كه در زبان‌هاي مهم دنيا استفاده مي‌شود كافي است، با اين حال يوني‌كد شيوه‌گسترشي به‌نام UTF-16 فراهم‌كرده‌است كه امكان اضافه‌كردن حدود يك ميليون نويسه ديگر را نيز مي‌دهد. اين دامنه براي كليه نويسه‌هاي عالم، از جمله پوشش كامل همه خط‌هاي باستاني (همچون خط ميخي) نيز كافي است.

يوني‌كد براي كليه نويسه‌هاي مورد استفاده در زبان‌هاي عمده دنيا كد تعيين‌كرده‌است. به‌علت گسترده‌بودن فضاي تخصيص نويسه، اين استاندارد بسياري از نمادهاي لازم براي حروف‌چيني را نيز در بر گرفته‌است. از خط‌هاي مورد پشتيباني اين استاندارد مي‌توان به لاتين (دربرگيرنده اكثر زبان‌هاي اروپايي)، سيريليك(روسي، صربي)، يوناني، عربي (شامل عربي، فارسي، اردو، كردي)، عبري، هندي، ارمني، آسوري، چيني، كاتاكانا و هيراگانا(ژاپني)، و هانگول (كره‌اي) اشاره‌كرد. به‌علاوه، تعداد زيادي نماد رياضي و فني علائم نقطه‌گذاري، پيكان، و علامت‌هاي متفرقه‌در اين استاندارد وجود دارد. اين استاندارد براي علامت‌هاي ‌تركيب‌شونده‌ يا اعراب‌ها نيز كدهايي در نظر گرفته‌است كه‌از جمله آنها علامت‌هايي چون «?» (مد)هستند كه در تركيبب حروف پايه، حروف تغييرلحن يافته‌اي چون «?» را مي‌سازند.

به طور كلي، بعضي از مشخصات يوني‌كد به شرح زير است:

نويسه‌هاي شانزده‌بيتي
يكي‌سازي (اختصاص يك كد به نويسه‌هاي مشترك در چند زبان مختلف)
نويسه، نه شكل (يك «ع»، و نه چهارتا: «ع»، «ع»، «ع»، «ع»)
بار معنايي (حرف‌بودن، مقدار عددي، ...)

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

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

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

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

اصطلاحات:

نويسه: در مقابل character. كوچك‌ترين واحد متن. مثلاً يك حرف لاتين، يك اعراب فارسي، يكي علامت نقطه‌گذاري، يك نشانه بريل، يا يك نماد رياضي

شكل: در مقابل glyph. كوچك‌ترين واحد نمايش متن. براي بعضي نويسه‌ها مثل حروف فارسي و هندي ممكن است چند شكل موجود باشد. مثلاً « ب » و « ع » از اشكال‌نمايشي محسوب مي‌شوند

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

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

منابع:
مركز محاسبات دانشگاه صنعتي شريف www.sharif.ac.ir
سازمان مديريت و برنامه‌ريزي كشور
شوراي عالي انفورماتيك www.unicode.org

کيفيت مقاله :
عالی خوب متوسط ضعيف


25 نكته امنيتی در شبكه هاي ويندوز2000 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۵۱ مراجعه امروز
۵۰۶۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
25 نكته امنيتی در شبكه هاي ويندوز2000
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۱۳/۱۱/۱۳۸۱ اين مقاله ۸۸۳ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.

1- امنيت فيزيكي
محل سرور بايد يك جاي امن و در اتاق دربسته باشد و از لحاظ امنيتي ورود افراد متفرقه به آن ممنوع باشد.
2- كد كاربري Guest را غير فعال كنيد.
به خاطر اينكه كد كاربري Guest اولين كد كاربردي است كه مورد حمله توسط نفوذكنندگان قرار مي گيرد بهتر است كه آن را غير فعال كنيد.
3- كدهاي كاربري غير فعال را حذف كنيد.
براي اينكه هكرها از كدهاي كاربري غير فعال كه مورد توجه شما نيستند سواستفاده نكنند همه آنها را حذف كنيد.
4- دو كد كاربري Administrator ايجاد كنيد.
به علت حذف مسائل امنيتي 2 كد كاربري با دسترسي مديريت ايجاد كنيد و در حالات عادي با يك كد كاربري و در حالت مديريت با كد ديگر كار كنيد.
5- كد كاربري Administrator را تغيير دهيد.
بيشتر هكرها كد كاربري Administrator را هدف قرار مي دهند براي جلوگيري از اين امر كد كاربري Administrator را به يك نام ديگر تغييري دهيد.
6- يك كد كاربري با نام Administrator تقلبي ايجاد كنيد.
براي اينكه از نفوذ يا سعي هكرها براي نفوذ به سيستم مطلع شويد كد كاربري Administrator را با دسترسي كاربر عادي ايجاد كرده و يك كلمه عبور بالاي 10 كاراكتر شامل حروف وعدد وارد كنيد تا در صورت سعي براي نفوذ شما از روي Log ها متوجه شويد.
7- حذف دسترسي everyone
براي افزايش امنيت دسترسي everyone را برداشته و به كاربراني كه بايد حق استفاده داشته باشد حق دسترسي بدهيد.
8- امنيت كلمه عبور
كلمه عبور خود را از بين اعداد و حروف وعلامتهاي خاص انتخاب كنيد. طول كلمه عبورتان از 8 حرف كمتر نباشد. تاريخ انقضاء كلمه هاي عبور را نيز بر روي 60 روز تنظيم كنيد.
9- تننظيم كلمه عبور براي screensaver
براي screensaver سرور كلمه عبور تنظيم كنيد تا در صورتي كه كامپيوتر خود را ترك كرديد كسي نتواند به آن وارد شود. زمان 5 دقيقه زمان مناسبي است.
10- پارتيشن NTFS
تمامي پارتيشنهاي خود را از Fat و Fat32 به NTFS تبديل كنيد زيرا NTFS از امنيت بالايي برخوردار است.
11- نرم افزار آنتي ويروس
هميشه از يك نرم افزار آنتي ويروس استفاده كنيد زيرا بدون استفاده از آنتي ويروس اتصال به شبكه اينترنت خطر ناك است.
12- امنيت نسخه هاي پشتيبان
7روز هفته نسخه پشتيبان از سرور خود تهيه كنيد و آنها را در محل امن خارج از محيط اتاق سرور نگهداري كنيد.
13- ابزار امنيتي
از ابزار امنيتي كه شركت مايكروسافت براي افزايش امنيت سرورها منتشر مي كند استفاده كنيد.
14- مودمها
ليست تمامي مودمهاي موجود در شبكه را تهيه كنيد و آنها را مانيتور كنيد.
15- سرويسهاي ويندوز
سرويسهاي غير قابل استفاده را غير فعال كنيد.
16- پورتهاي TCP/IP
شماره پورتهايي كه غير قابل استفاده اند را از طريق قسمت
Control Panel > Network and dial-up connections > Local Area connection >
Internet Protocol (TCP/IP) Properties > Advanced > option > TCP/IP Filtering
ببنديد.
17- ابزار Auditing (ناظر)
ابزار Auditing را فعال كنيد تا همه موارد مورد نظر شما Log شود. چند مورد مهم كه بايد فعال شوند عبارتند از :
1. دسترسي كاربران به سرور
2. مديريت كاربران
3. پروسه اتصال
4. دسترسي به منابع ديسك
5. تغيير موارد امنيتي
6. رخدادهاي سيستم

18- نصب آخرين Update ها و Patch هاي ويندوز
هر 30 روز يكبار به سايت ميكروسافت سر بزنيد و از آخرين Update ها ونكات امنيتي مطلع شويد. در صورت نياز Update هاي جديد ويندوز را نصب كنيد.
19- موارد اشتراكي پيش فرضي را غير فعال كنيد.
به طور پيش فرضي موارد زير به اشتراك گذاشته شده اند.
نام درايوهاي سرور C$ -D$
مسير شاخه سيستم ويندوز ADMIN
مسيرشاخه فاكس ويندوز Fax$
موارد به اشتراك گذاشته شده IPC$
مسير شاخه Spool چاپگرPRINT$
20- گزينه Dumpfile
گزينه Dumpfile Creation را غير فعال كنيد. از طريق قسمت
Control Panel > System Properties > Advanced > Start up and Recovery
21- گزينه رمزگذاري فايلها را فعال كنيد.
گزينه EFS را براي فايلها و شاخه هاي مهم خود علامت بزنيد.
22- رجيستري
دسترسي به رجيستري را براي همه كاربران غير از مدير غير فعال كنيد.
23- حذف Page فايلها
ويندوز از فايل Page ها براي ذخيره وضعيت فعلي ويندوز وكمبود حافظه استفاده مي كند. ممكن است موارد امنيتي بسياري از قبيل كلمه عبور و موارد ديگر در Page فايلها ذخيره شود . شما از طريق تتظيم كليد ذيل در رجيستري پس از هر بار shutdown سرور فايلهاي Page فايل را به طور خودكار پاك مي كنيد.
\ control \ Session Manager \ Memory Management \ current controlset HKLM \ system
مقدار متغير clearPagefileAtshutdown را برابر با 1 قرار دهيد.
24- غير فعال كردن راه اندازها
درايوهاي فلاپي و CD_ROM نا امن را غير فعال كنيد .
25- گزينه Autorun را براي CD-ROM را غير فعال كنيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


آموزش دلفی قسمت دوم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۹ بيننده در حال حاضر
۱۸۷۵ مراجعه امروز
۴۴۶۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آموزش دلفی قسمت دوم
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۶/۱۱/۱۳۸۱ اين مقاله ۶۰۸۸ بار مطالعه شده است
۸۶ نفر تا به حال به اين مقاله رای داده اند.
قسمت دوم

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

توضيحات
 در پاسكال، توضيحات را مي توان به هر يك از اشكال زير به كار برد:
{ اين يك توضيح است }
(* اين يك توضيح ديگر است *)
// اين يك توضيح يك خطي است و در انتهاي اين خط پايان مي يابد

اولين حالت از همه كوتاهتر است و معمولا از همه بيشتر استفاده مي شود. حالت سوم نيز از ++C استعارفه گرفته شده است و تنها در نسخه هاي 32 بيتي دلفي عمل مي كند. توضيحات از اين نوع وقتي كه شما مي خواهيد توضيحات خلاصه اي را راجع به يك خط از كد بدهيد بسيار مفيد هستند.
در كدهاي اين كتاب تلاش من بر اين است كه توضيحات را به صورت ايتاليك (و كليدواژه ها را به صورت سياه) دربياورم، تا تقريبا شبيه به شكل Highlight كردن خود دلفي باشد.

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

{ ..... يكسري كد پاسكال
{يك توضيح نمونه}
....... يكسري كد پاسكال}

در صورتي كه مي توانيد اين كد را به صورت زير بنويسيد

{ ...... يكسري كد پاسكال
اين يك توضيح درست است//
...... يكسري كد پاسكال}

توجه داشته باشيد كه اگر علامت $ كنار يك علامت { بيايد، آنگاه يك راهنماي كامپايلر خواهد بود كه شكل عمومي آن از اين قرار است: {+X$}

استفاده از حروف بزرگ
 كامپايلر پاسكال مثل بسياري كامپايلرهاي ديگر به حروف بزرگ و كوچك حساس نيست. بنابراين نام Myname، MyName، myName و MYNAME همگي دقيقا يكي هستند. روي هم رفته، اين مساله صراحتا مثبت است، زيرا زبان هايي كه حساس به شكل حروف هستند سبب ايجاد خطاهاي بسياري خواهند شد.
توجه داشته باشيد كه شما بايد از حروف بزرگ براي بيشتر قابل خواندن بودن كد استفاده كنيد. يك راه بسيار عالي براي اين مساله بزرگ تايپ كردن حروف اول كلمات است (شما نمي توانيد در بين نام متغييرها از فاصله استفاده كنيد). مثال:

MyLongIdentifier
MyVeryLongAndAlmostStupidIdentifier

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

Highlight كردن نحوي
براي ساده تز شدن خواندن و نوشتن كد هاي پاسكال، اديتور دلفي خاصيت به نام Highlight كردن نحوي يا Syntax Highlighting دارد. بنابر معناي هر يك از كلماتي كه شما در اديتور دلفي تايپ مي كنيد، هر كلمه رنگ تازه اي مي يابد. به طور پيش فرض كليدواژه ها سياه هستند، رشته ها و توضيحات به صورت رنگي و اغلب ايتاليك هستند و همين جور الي اخر.
احتمالا كلمات رزرو شده، توضيحات و رشته ها بيشترين اجزايي هستند كه از اين خاصيت سود مي جويند. شما به يك نگاه مي توانيد از كليدواژه هاي اشتباه تايپ شده، رشته اي كه به درستي بسته نشده است و طول يك توضيح چند خطي آگاه شويد.
شما مي توانيد به سادگي رنگ هاي استفاده شده به وسيله IDE دلفي را از طريق صفحه Editor Colors پنجره Environment Options تغيير دهيد. ( به شكل 2.1 نگاهي بياندازيد) اگر شما براي خودتان كار مي كنيد رنگهايي را كه بيشتر دوست مي داريد انتخاب كنيد. اگر شما با ساير برنامه نويسان به صورت گروهي كار مي كنيد همگي بايد يك رنگ بندي استاندارد را قبول كنيد. من متوجه شده ام كه كار كردن با يك رايانه با رنگ بندي هاي متفاوت كه به وسيله افراد مختلف استفاده مي شود واقعا سخت است.

استفاده از قالب هاي كد
 دلفي 3 يك خصوصيت جديد را راجع به ويرايش كد معرفي نمود. با استفاده از اين خاصيت لازم نيست شما تمامي حروف يك كلمه يا دستور را تايپ كنيد. فقط چند حرف اول آن را تايپ كنيد و كليد Ctrl+J را براي كلمات كليدي و Ctrl+Space را براي ساير كلمات و دستورات استفاده كنيد. در اين صورت مشاهده خواهيد كرد كه منويي ظاهر خواهد شد و دستوراتي را كه با حروف مورد نظر شما شروع مي شوند را به نمايش خواهند گذاشت.

كلمات كليدي
 كلمات كليدي، تمام لغاتي هستند كه بوسيله Object Pascal رزرو شده اند و در نقش هاي اساسي را در زبان بازي مي كنند. كلمات كليدي نمي توانند به عنوان نام متغييرها استفاده شوند.
در جدول 2.1 ليستي از اين كلمات را مي بينيد.

جدول 2.1 - كليدواژه ها و ساير كلمات كليدي در آبجكت پاسكال

كلمه كليدي | نقش
absolute | directive (variables)
abstract | directive (method)
and | operator (boolean)
array | type
as | operator (RTTI)
asm | statement
assembler | backward compatibility (asm)
at | statement (exceptions)
automated | access specifier (class)
begin | block marker
case | statement
cdecl | function calling convention
class | type
const | declaration or directive (parameters)
constructor | special method
contains | operator (set)
default | directive (property)
destructor | special method
dispid | dispinterface specifier
dispinterface | type
div | operator
do | statement
downto | statement (for)
dynamic | directive (method)
else | statement (if or case)
end | block marker
except | statement (exceptions)
export | backward compatibility (class)
exports | declaration
external | directive (functions)
far | backward compatibility (class)
file | type
finalization | unit structure
finally | statement (exceptions)
for | statement
forward | function directive
function | declaration
goto | statement
if | statement
implementation | unit structure
implements | directive (property)
in | operator (set) - project structure
index | directive (dipinterface)
inherited | statement
initialization | unit structure
inline | backward compatibility (see asm)
interface | type
is | operator (RTTI)
label | declaration
library | program structure
message | directive (method)
mod | operator (math)
name | directive (function)
near | backward compatibility (class)
nil | value
nodefault | directive (property)
not | operator (boolean)
object | backward compatibility (class)
of | statement (case)
on | statement (exceptions)
or | operator (boolean)
out | directive (parameters)
overload | function directive
override | function directive
package | program structure (package)
packed | directive (record)
pascal | function calling convention
private | access specifier (class)
procedure | declaration
program | program structure
property | declaration
protected | access specifier (class)
public | access specifier (class)
published | access specifier (class)
raise | statement (exceptions)
read | property specifier
readonly | dispatch interface specifier
record | type
register | function calling convention
reintroduce | function directive
repeat | statement
requires | program structure (package)
resident | directive (functions)
resourcestring | type
safecall | function calling convention
set | type
shl | operator (math)
shr | operator (math)
stdcall | function calling convention
stored | directive (property)
string | type
then | statement (if)
threadvar | declaration
to | statement (for)
try | statement (exceptions)
type | declaration
unit | unit structure
until | statement
uses | unit structure
var | declaration
virtual | directive (method)
while | statement
with | statement
write | property specifier
writeonly | dispatch interface specifier
xor | operator (boolean)

عملگرها در پاسكال

Unary Operators (Highest Precedence)
@ | Address of the variable or function (returns a pointer)
not | Boolean or bitwise not
Multiplicative and Bitwise Operators
* | Arithmetic multiplication or set intersection
/ | Floating-point division
div | Integer division
mod | Modulus (the remainder of integer division)
as | Allows a type-checked type conversion among at runtime (part of the RTTI support)
and | Boolean or bitwise and
shl | Bitwise left shift
shr | Bitwise right shift
Additive Operators
+ | Arithmetic addition, set union, string concatenation, pointer offset addition
- | Arithmetic subtraction, set difference, pointer offset subtraction
or | Boolean or bitwise or
xor | Boolean or bitwise exclusive or
Relational and Comparison Operators (Lowest Precedence)
= | Test whether equal
<> | Test whether not equal
< | Test whether less than
> | Test whether greater than
<= | Test whether less than or equal to, or a subset of a set
>= | Test whether greater than or equal to, or a superset of a set
in | Test whether the item is a member of the set
is | Test whether object is type-compatible (another RTTI operator)

اختتاميه
 اكنون كه ما شكل و شمايل كلي برنامه هاي پاسكال را مي دانيم ما مي توانيم فهميدن و درك كردن آن را آغاز كنيم. ما با آشنايي با نوع هاي پيش فرض و ساخت نوع هاي جديد كار خودمان را آغاز مي كنيم
کيفيت مقاله :
عالی خوب متوسط ضعيف


آموزش پاسکال قسمت اول ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۵۲۷ مراجعه امروز
۴۱۱۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آموزش پاسکال قسمت اول
نويسنده : بهرام وکيلي
موضوع : Pascal [image] نسخه قابل چاپ
تاريخ نشر : ۱۶/۱۱/۱۳۸۱ اين مقاله ۱۰۳۱۸ بار مطالعه شده است
۳۹۵ نفر تا به حال به اين مقاله رای داده اند.

Pascal

زبان پاسكال يكي از زبانهاي برنامه سازي است كه ويژگيهاي آموزشي آن بسيار بالاست يعني زبان خوبي براي آموزش برنامه نويسي منظم و دقيق است.قابليت خوانايي و درك برنامه هاي اين زبان بالاست وميتوان برنامه هايي نوشت كه احتمال خطاهاي آنها بسيار اندك باشد علتش اين است كه يك زبان ساختار يافته (structed) است .

ساختار كلي برنامه چيست؟
1-تعريف
2-به وسيله procedure و functionقسمتهاي تكراري را از بين ببريم
3-بدنه
فرم كلي پاسكال:
;اسم Program
; تعريف ثابت const
; تعريف نوع type
; تعريف متغيرها var
( پارامترها ) نام procedure
begin
____
____
____
end ;
;نوع تابع ( پارامترها ) نام function
begin
____
____
____
end ;
begin
____
____
____
end .
متغير : محلي است كه داراي يك اسم مي باشد و مي توان مقداري را در آن ذخيره كرد

انواع متغيرها در پاسكال:
Integer :انواع عددي صحيح شامل اعداد بدون نقطه مميز است
نوع مقاديري كه مي پذيرند طول(بايت)
byte 0 تا 255 1
Shortint 128- تا 127 1
integer 32768- تا 32767 2
Word 0 تا 65535 2
Longint 2147483648- تا 2147483647 4

اعداد اعشاري:
انواع عددي اعشاري شامل اعدادي با نقطه مميز است

نوع مقاديري كه ميپذيرند ارقام با معني طول(بايت)
single 1.5e-45 تا3.4e38 7 تا 8 4
real 2.9e-39 تا 1.7e38 11 تا 12 6
Double 5.0e-324تا 1.7e308 15 تا 16 8
extended 1.9e-4951تا 1.1e493 19 تا 20 10
انواع داده هاي اعشاري

-Char :
نوع داده كاراكتري كه با كلمه char مشخص مي شود ميتواند يك كاراكتر را در خود نگهداري كند بنابراين كاراكترها در يك بايت از حافظه كامپيوتر ذخيره مي شوند

String - :
اين نوع داده ها براي ذخيره رشته ها مثل اسامي افراد به كار مي رود و با كلمه كليدي string مشخص ي گردد
براي هر رشته بايد طول معلوم كنيم اگر طولي تعريف نشود به طور پيش فرض 80 در نظر گرفته ميشود(مقدار طول حداكثر 255 است)
- Boolean :
نوع ديگري از داده ها در پاسكال وجود دارند كه داده هاي بولي خوانده مي شوند مقادير بولي داراي دو ارزش درستي يا نادرستي اند كه در پاسكال با صفر و يك نمايش داده مي شوند صفر به معني نادرستي و يك به معني درستي به كار ميرود اين نوع داده ها با كلمه Boolean تعريف ميشوند.
دستورات ورودي در پاسكال:
دستور Readlnبراي خواندن اطلاعات از ورودي به كار ميرود.
فرمت آن به صورت مقابل است:
(اسامي متغيرها)read/ln
اسامي متغيرها بايد با كاما از يكديگر جدا شوند..
براي چاپ اطلاعات در خروجي از دستور write/ln استفاده ميكنيم.
فرمت آن به صورت مقابل است:
' يك پيام '
( متغير ) write/ln
عبارت محاسباتي
انتساب متغيرها:
مقدار ثابت
( متغير )=: متغير
عبارت محاسباتي

مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و حاصلجمع آن دو را چاپ كند .
Program add;
Var
a,b:integer;
begin
writeln('enter 2 num');
readln(a,b);
c:=a+b;
writeln('result is =',c);
end.

تكليف : چرا برنامه بايد ادب داشته باشد ؟
مثال : برنامه اي بنويسيد كه حقوق پايه وتعداد فرزندان يك كارگر را از ورودي دريافت و مبلغ حقوق وي را بر اساس فرمول زير حساب كنيد.
10*تعداد فرزندان + حقوق پايه =حقوق كل
Program test;
Var
Salary:longint;
Child:byte;
kole:integer
Begin
Writeln('enter salary and number of child);
Readln(salary,child);
Kole := salary + child *10
Writeln('kole is ',kole);
END.
اولويت عملگرها:
/ *
- +
شرط:
then شرط if
Begin
____
____
____
end
else
begin
____
____
____
end;
نكته : دستورالعمل قبل از IF سمي كالن نمي گيرد
عناصر شرط:
< > <= >= = <>
اپراتورها :
AND OR NOT XOR
NOT A
1 0
0 1

XOR OR AND B A
0 1 1 1 1
1 1 0 0 1
1 1 0 1 0
0 0 0 0 0

مثال : برنامه اي بنويسيد كه با دريافت دو عدد بزرگترين آنها را چاپ كند.
Program test;
Var
a,b:integer;
if a>b then
begin
writeln(a);
end
else
writeln(b);
end.

مثال : برنامه اي بنويسيد كه با دريافت سه عدد به عنوان ضرايب y=ax2+bx+c معادله درجه دو را حل كند(اين برنامه را با يك If بنويسيد).
Var
A,b,c:integer;
D,x1,x2:real;
Begin
Writeln('enter a,b,c');
Readln(a,b,c);
D:=b*b-4*a*c;
If (d >=0 ) then
Begin
X1:=(-b+sqrt(d))/2*a);
X1:=(-b-sqrt(d))/2*a);

مثال : برنامه اي بنويسيد كه تعداد فرزندان وحقوق پايه و رتبه يك كارگر را از ورودي دريافت و حقوق كل وي را بر اساس فرمول زير حساب كند.
كسريها - مزايا +بيمه = حقوق كل
5*رتبه +1000* تعداد فرزند = مزايا
ماليات + بيمه = كسريها

بيشتر كمتر يا مساوي 2 تعداد فرزند
تعداد فرزندان 1000 بيمه
هر چيزي ديگر 20 تا 0 رتبه
حقوق پايه حقوق پايه*100/10 ماليات

begin
writeln('enter salary and grade and number of child');
readln(salary ,num,grade);
if num<=2 then
bimeh:=100
else
bimeh :=num*500;
if (grade>=0) and (grade<=20)then
net := 10/100*salary
else
if grade >20 then
begin
net:=20/100*salary;
mazaya:=num*1000+grade*50;
kasry:=bimeh+net;
kol :=salary + mazaya-kasry;
end;
writeln(kol);
end.

تكليف : در يك تركيب شيميايي 4 عنصر شركت دارند مقدار مجاز براي تهيه ماده اي به نام asxd به اين صورت است.
A 0 ~ 50
S 0.5 ~ 0.83
X 81 ~ 92 or 824 ~ 901
D -100 ~ 100
با دريافت مقادير a,s,x,d از ورودي به ما بگويد كه آيا مي توان اين ماده را توليد كرد يا نه ؟
Begin
Num:=0;
Writeln('please enter a s x d');
Readln(a,s,x,d);
If (a>0) and(a<50) then
Num:=num+1;
If (s>0.5)and (s<0.83) then
Num:=num+1;
If ((x>81)and(x<92))or ((x>824)and(x<901))then
Num:=num+1;
If (d>-100) and (d<100) then
Num:=num+1;
If num=4 then
Writeln('yes can')
Else
Writeln('you can not');
End.
تكليف : برنامه اي بنويسيد كه با دريافت سه عدد و با فرض اينكه عدد دوم وتر ميباشد به ما بگوييد كه آيا اين سه عدد تشكيل يك مثلث قايم الزاويه مي دهد يا خير؟

-CASE:
CASE ميتواند تعداداي شرط را بگيرد و انتخاب كند.
مقاديري كه دستور CASE ميپذيرد ORDINAL است مقاديري كهORDINAL هستند داراي تركيب نيستند و همچنين قابل شمارش هم هستند مثل INTEGER,CHARACTER,BYTE,BOOLEAN,LONGINT,…
پسREAL,STRING ORDINAL<---- نيستند
CASE تنها دستوري است كه BEGIN ندارد ولي END دارد
مقدارها ميتوانند شامل يك مقدار يا چند مقدار كه از يكديگر با كاما جدا شده اند باشند و يا يگ سري شمارشي باشند مثل:
1:------
1,10,28:------
1..100,150..243:---------
'A'..'Z':---------

Of متغير Case
Begin : مقدار1
-------
-------
End;
Begin : مقدار2
-------
-------
End;
Begin :Else
-------
-------
End;
End.
مثال : برنامه اي بنويسيد كه يك عدد را از ورودي دريافت ( (0<=x<3وتلفظ آنها را چاپ كند.
BEGIN
READLN(X);
CASE X OF
0:WRITELN('ZERO');
1:WRITELN('ONE');
2:WRITELN('TWO')
ELSE
WRITELN('ERROR');
END;
END.

کيفيت مقاله :
عالی خوب متوسط ضعيف


آموزش پاسکال قسمت دوم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۵۳۰ مراجعه امروز
۴۱۲۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آموزش پاسکال قسمت دوم
نويسنده : بهرام وکيلي
موضوع : Pascal [image] نسخه قابل چاپ
تاريخ نشر : ۱۶/۱۱/۱۳۸۱ اين مقاله ۵۲۱۵ بار مطالعه شده است
۹۶ نفر تا به حال به اين مقاله رای داده اند.

مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و چنانچه عدد اول در بازه 0 تا 5 بود توان دوم عدد دوم را چاپ كند چنانچه 68 بود حاصلضرب دو عدد را چاپ كند و در غير اينصورت مقادير مجاز را چاپ كند.
BEGIN
WRITELN('ENTER TWO NUMBER');
READLN(A,B);
CASE A OF
0..5 :WRITELN(B*B);
68:WRITELN(A*B)
ELSE
WRITELN('ENTER 0..5 OR 68');
END;
END.
- معادل برنامه بالا با دستور If :

Begin
Writeln('enter 2 number');
Readln(a,b);
If (a>=0)and(a<=5) then
Writeln(b*b)
Else
If a=68 then
Writeln(a*b)
Else
Writeln('enter 0..5 or68');
End.
تكليف : روشي براي تلفظ اعداد پيدا كنيد.

حلقه تكرار :
1- تعداد معين
2- تعداد معين
Do مقدار نهايي to { مقدار شروع=: متغير for
downto
begin
___
___
___
end;
توجه مهم : در برخي از حلقه ها دستورات داخل حلقه به متغير حلقه مرتبط مي باشند و در برخي موارد هيچگونه ارتباطي وجود ندارد.
حلقه for براي تعداد تكرار معين به كار ميرود
Downto : در مواردي به كار ميرود كه مقدار اوليه از مقدار نهايي بيشتر باشد

مثال : برنامه اي بنويسيد كه توان دوم اعداد 100 تا 200 را چاپ كند.
Begin
For i:=100 to 200 do
Begin
Writeln(i*i);
End;
End.
نكته : اجازه نداريد مقدار متغير حلقه را در داخل بدنه عوض كنيد .
مثال : برنامه اي بنويسيد كه حاصلجمع اعداد 100..1 را چاپ كند.
Begin
Sum:=0;
For i:=1 to 10 do
Begin
Sum:=sum+i
End;
Write(sum);
End.

مثال : برنامه اي بنويسيد كه حاصلجمع مضارب 5 بين 0 تا 100را به دست آورد.
Begin
Sum:=0;
For I:=1 to 20 do
Begin
Sum:=sum+i*5;
End;
Writeln(sum);
End.
مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و اعداد ما بين اين دو عدد را چاپ كند (a
Begin
Writeln('enter a,b');
Readln(a,b);
For I:= a to b do
Writeln(i);
End.

مثال : برنامه اي بنويسيد كه با يك حلقه for اعداد بين100..1 و738..353و 950..940 را چاپ كند
Begin
For i:=1 to 950 do
Begin
If ( i>=1) and (i<=100) then
Writeln(i);
If (i>353) and (i<=738) then
Writeln(i);
If (i>=940) and (i<=950) then
Writeln(i);
End;
End.
معادل برنامه بالا با استفاده از دستور case :
Begin
For i:=1 to 950 do
Case I of
1..100,353..738,940..950: writeln(i);
end;
end.

)باقيمانده)mod?
مثال :
X mod y
مثال : برنامه اي بنويسيد كه مضارب 7 بين 1 تا 100 را چاپ كند
Begin
For i:= 1 to 100 do
Begin
If I mod 7 = 0 then
Writeln(i);
End;
End.
مثال : برنامه اي بنويسيد كه تعداد مضارب 5و7 را در بازه 231~846 چاپ كند.
Begin
K:=0;
C:=0;
For i:=846 downto 231 do
Begin
If I mod 5 = 0 then
C:=c+1;
If I mod 7 = 0 then
K:=k+1;
End;
Writeln('5=',c,'7=',k);
End;
End.
مثال : برنامه اي بنويسيد كه حقوق پايه وتعداد فرزندان 100 كارگر را از ورودي دريافت و مبلغ حقوق آنها را بر اساس فرمول زير حساب كند0
1000*تعداد فرزند + حقوق پايه = حقوق كل

Begin
For i:=1 to 100 do
Begin
Writeln('enter salary and number of children');
readln(salary,num);
kol := salary + num * 1000;
writeln(kol);
end;
end.

مثال : برنامه اي بنويسيد كه 100 عدد را از ورودي دريافت و ميانگين و حاصلجمع آنها را به ما بدهد.
Begin
Sum:=0;
For i:= 1 to 100 do
Begin
Writeln('enter num');
Readln(num);
Sum:=sum+num;
End;
Ave:=ave/100;
Writeln(sum,ave);
End.

تعداد تكرار نامعين :
Do شرط while
begin
___
___
___
end;
مثال : برنامه اي بنويسيد كه اعداد 100..1 را چاپ كند
Begin
I:=1;
While i<=100 do
Begin
Write(i);
I:=i+1;
End;
مثال : برنامه اي بنويسيد كه تعدادي اسم را از ورودي دريافت و به ما بگويد چند بار اسم ali تكرار شده است(آخرين اسم end است).
Var
S:integer;
St:string;
Begin
Read(st);
While st<> 'end' do
Begin
If st='ali' then
S:=s+1;
Read(st);
End;write(s);
End.

مثال : برنامه اي بنويسيد كه تعدادي عدد كه آخرين آنها صفر است را از ورودي دريافت و حاصلجمع آنها را چاپ كند.
Begin
Readln(num);
T:=1;
While num<>0 do
Begin
Sum:=sum+num;
Readln(num);
T:=t+1;
End;
Writeln('s=',s,'average',s/t);
End;
تكليف : براي دانش آموزان يك كلاس برنامه اي بنويسيد كه نام آنها به همراه تعداد نمرات و سپس نمرات آنها را به فرم زير از ورودي دريافت كند.تعداد دانش آموزان كلاس نامعين است ولي آخرين نفر نامش end است .برنامه ميبايستي پس از دريافت هر يك از اطلاعات پيامي به شكل زير چاپ كند.

Average: Sum: Ali Name:
3
18
20
13.5

program test;
var
name:string[10];
ave,sum,nomreh:real;
num,i:integer;
begin
writeln('enter name ' );
readln(name);
while name <> 'end' do
begin
writeln('enter num:');
readln(num);
for i:=1 to num do
begin
writeln('enter nomreh: ');
readln(nomreh);
sum:=sum+nomreh;
end;
ave:=sum/num;
writeln('name:',name,'sum:',sum,'ave:',ave);
writeln('enter name ');
readln(name);
end;
end.

تكليف : ميخواهيم براي برنامه هاي خود يك منو تهيه كنيم اين منو شامل موارد زير است
1) load
2) save
3) edit
4) exit
please select a number :

program test;
var
num:integer;
begin
writeln(' 1) load');
writeln(' 2) save');
writeln(' 3) edit');
writeln(' 4) exit');
writeln(please select a number : ');
readln(num);
while num<>4 do
begin
case num of
1:writeln('loading');
2:writeln('saving');
3:writeln('editing');
end;
end;
end.

کيفيت مقاله :
عالی خوب متوسط ضعيف


آموزش پاسکال قسمت سوم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۵۳۳ مراجعه امروز
۴۱۲۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آموزش پاسکال قسمت سوم
نويسنده : بهرام وکيلي
موضوع : Pascal [image] نسخه قابل چاپ
تاريخ نشر : ۱۶/۱۱/۱۳۸۱ اين مقاله ۴۰۰۲ بار مطالعه شده است
۵۱ نفر تا به حال به اين مقاله رای داده اند.
مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و طبق جدول زير نسبت به مقدار آن واكنش نشان دهد

3 2 1 a
B+...+3+2+1 1..b b..1 واكنش

Begin
Writeln (' enter a,b :');
Readln(a,b);
Case a of
1:begin
for i:=1 to b do
write(i);
end;
2:begin
or I;=b downto 1 do
write(i);
end;
3:begin
sum:=0;
for i:=1 to b do
sum:=sum+I;
write(sum);
end;
end.
آرايه ها :
آرايه ها به عناصري اتلاق ميشود كه با يك نام تعدادي محل از حافظه را كنترل كند براي تشخيص محلها از انديس استفاده ميشود
انواع آرايه ها :
1- آرايه هاي يك بعدي
2- عناصر دو بعدي
3- آرايه هاي سه بعدي

تعريف آرايه ها :
var
نوع of ]انديس پايان..انديس شروع: array [ نام آرايه
نوع متغير آرايه : متغير آرايه
خواندن آرايه :
مثال : برنامه اي بنويسيد كه نمرات 100 دانش آموز را از ورودي دريافت و در يك آرايه بريزد.
Var
A:array[1..100] of real;
Begin
For i:=1 to 100 do
Readln(a[i]);

مثال : برنامه اي بنويسيد كه نمرات 100 دانش آموز را از ورودي دريافت و 50 تاي اول را چاپ كند سپس تعداد نمرات 20 را مشخص كند.
Var
A:array[1..100] of real;
Begin
For I;=1 to 100 do
Writeln('enter no(',I,')');
Readln(a[i]);
For i:=1 to 50 do
Writeln(a[i]);
S:=0;
For i:=1 to 100 do
If i:=1 to 100 do
If a[i]=20 then
S:=s+1;
Writeln(s);
End.
پيدا كردن max,min
عنصر اول =min
حلقه براي گردش در آرايه
Min < عنصر فعلي if
عنصر فعلي min :=
Write(min);
مثال : برنامه اي بنويسيد كه با دريافت نمرات 100 دانش آموز بالاترين و پايين ترين نمره را در بين اين 100 نفر پيدا كند.
Var
A:array[1..100] of real;
I:integer;
Begin
For i:=1 to 100 do
Readln(a[i]);
Min:=a[1];
Max:=a[1];
For i:=2 to 100 do
Begin
If a[1]< min then
Min:=a[i];
If a[i]>max then
Max := a[i];
End;
Writeln('max is :',max,'min is :',min);
End.
مثال : برنامه اي بنويسيد كه با دريافت 100 اسم به ما بگويد تعداد تكرار اسم ali چند بار است وآيا اسم hassan بيشتر ذكر شده يا اسم reza ؟
Var
A:array [1..100] of string;
Begin
For i:=1 to 100 do
Readln(a[i]);
Ali:=0;
Reza:=0;
Hassan:=0;
For i:=1 to 100 do
Begin
If a[i]='ali' then
Ali:=ali+1;
If a[i]='reza' then
Reza:=reza+1;
If a[i]='hassan' then
Hassan:=hassan+1;
Endd
Writeln(ali is :',ali);
If reza>hassan then
Writeln('reza')
Else
Writeln('hassan');
End.
مثال : برنامه اي بنويسيد كه با دريافت نام و نمره 100 دانش آموز تنبل ترين فرد كلاس را مشخص كند.
Var
Name:array[1..100] of  string;
No:array[1..100] of real;
Begin
For i:=1 to 100 do
Begin
Readln(name[i]);
Readln(no[i]);
End;
Min:=no[1];
Namemin:=name[1];
For i:=2 to 100 do begin
If no[i]
Begin
Min:=no[i];
Namemin:=name[i];
Writeln(namemin);
End.
آرايه هاي دو بعدي:
وقتي از آرايه دوبعدي استفاده ميكنيم بايد از دو حقه for استفاده كنيم.
مثال : برنامه اي بنويسيد كه نمرات 4 كلاس كه هر يك 20 دانش آموز دارد را از ورودي دريافت وتنبل ترين فرد را در اين 4 كلاس مشخص كند.
Var
A:array[1..20,1..4] of real;
Begin
For i:=1 to 4 do
Begin
For j:=1 to 20 do
Readln(a[j,i]);
End;
Min:=a[1,1];
For i:=1 to 4 do
For j:=1 to 20 do
If a[j,i]< min then
Min:=a[j,i];
Writeln(min);
End.
مثال : در يك آرايه 100*20دوهزار كاراكتر نگهداري ميشود برنامه اي بنويسيد كه تعداد تكرار حرف A را با a مقايسه كند و همچنين به ما بگويد آيا كاراكتر z در اين ماتريس وجود دارد ؟
Var
A:array[1..20,1..100] of character;
Bool:Boolean;
B,b1:integer;
Begin
For i:=1 to 100 do
For j:=1 to 20 do
If a[I,j]='A' then
B:=b+1;
If a[I,j]='a' then
B1:=b1+1;
If a[I,j]='z' then
Bool:=true;
End;
If b>b1 then writeln('A>a');
If b
If b=b1 then writeln('A=a');
If true then writeln('''z''exist');
End.
تكليف : ميخواهيم نام و نمره تعدادي دانش آموز يك كلاس را از ورودي دريافت كنيم و مشخص كنيم كه تنبل ترين و زرنگ ترين فرد كلاس كيست.چند نفر نمره زير 10 گرفتند؟نام كساني كه نمره آنها در بازه 17 تا 15 مي باشد ب همراه نمره آنها چاپ شود آخرين نفر نامش end است حداكثر تعداد دانش آموزان 100 نفر است.
Var

a:array [1..100] of string ;
b:array[1..100] of real;
begin
i:=1;
read(a[i]);
while a[i]<>'end' do begin
readln(b[i]);
i:=i+1;
readln(a[i]);
end;
j:=i-1;
min:=a[1];
max:=a[1];
for i:= 2 to j do
begin
if b[i] >max then
begin
max:=b[i];
name:a[i];
end;
end
writeln(name);
count:=0;
for i:=1 to j do
if b[i]<=10 then
count:=count+1;
writeln(count);
for i:=1 to j do
if (b[i]<17) and (b[i]>15) then
write(b[i],a[i]);
end.
تكليف : برنامه اي بنويسيد كه حاصل اين عبارت را حساب كند.
i/i!=1/1!+2/2!+3/3!+4/4!+5/5!
N!= 1*2*3*4*…*n
Begin
Sum:=0;
For n:=1 to 5 do
Begin
For m:=1 to n do
F:=f*m;
Sum:=sum+n/f;
End;
Writeln(sum);
End.
تكليف : برنامه اي بنويسيد كه نمرات 80 دانش آموز را كه در چهار كلاس دسته بنده شده اند را از ورودي دريافت كند سپس به سوالات زير جواب دهد.
1- معدل هر يك از كلاسها
2- نمره تنبل ترين و زرنگترين شخص در هر كلاس به طور جداگانه
Var
A:array [1..4,1..20] of real;
Begin
For i:=1 to 4 do
For j:=1 to 20 do
Begin
Writeln('please enter nomreh');
Readln(a[I,j]);
End;
For i:=1 to 4 do
Begin
Sum:=0 ;
For j:=1 to 20 do
Begin
Sum:=a[I,j]+sum;
End;
Writeln(sum/20,'average of this class');
End;
For i:=1 to 4 do
Begin
Max :=a[1,1];
Min:=a[1,1];
For j:=2 to 20 do
Begin
If a[I,j]>max then
Max :=a[I,j];
End;
Writeln(I,min,max);
End;
End.
- String :
String آرايه اي از كاراكترهاست .اغلب لازم است كاراكترهايي در رشته موجود درج شوندو يا كاراكترهايي به جاي بخشي از رشته نوشته شوند , زيررشته اي در رشته جستجو گردد و يا دو رشته با هم الحاق شوند.
رشته تهي : طول رشته ثابت نيست و با داداه هايي كه در آن ذخيره شده است مشخص مي گردد.كاراكترهايي كه در رشته قرار مي گيرد از حداكثر طولي كه براي آن تعيين ميشود بيشتر نخواهد بود. اگر name رشته كاراكتري باشد دستور زير name را به رشته تهي تبديل ميكند:
Name:='';
تبديل رشته به اعداد :
در پاسكال زير برنامه هايي وجود دارند كه به آساني ميتوانند رشته ها را پردازش كنند. زيربرنامه val رشته عددي را گرفته به مقدار عددي تبديل ميكند.
رشته عددي رشته اي است كه حاوي كاراترهاي '0' تا '9' و نقطه مميز باشد مثل '12.5' و'13.5' زيربرنامه val به صورت زير به كار ميرود.
Val (st,number,error)
St رشته اي است كه بايد به عدد تبديل شود و number متغيري است كه رشته تبديل شده به عدد در آن قرار ميگيرد. چنانچه در رشته st كاراكتر نا معتبري (كاراكترهاي غير از( '0' تا '9' و'.' ) , محل وجود آن كاراكتر در پارامتر error قرار ميگيرد. اگر error برابر با صفر باشد معنايش اينست كه كاراكتر نا معتبري وجود ندارد. اگر number از نوع صحيح باشد st به مقدار صحيح و اگر number از نوع اعشاري باشد st به مقدار اعشاري تبديل ميشود .
مثال زير را در نظر بگيريد:
Var st :string;
Num,e:integer;
St:='352';
Val (st,num,e);
مقدار 352 در متغير num ومقدار صفر در متغير e قرار ميگيرد اكنون دستورات زير را در نظر بگيريد :
St:='35#'2;
Val (st,num,e);
با اجراي دستور val به دليل وجود كاراكتر' # ' كه كاراكتر نامعتبري در اعداد است عدد 2 در متغير e قرار ميگيرد و معنايش اينست كه كاراكتر شماره 2 ( شماره گذاري از صفر شروع ميشود) نامعتبر است و عمل تبديل صورت نميگيرد و مقدار num تعريف نشده است.
تبديل عدد به رشته :
براي تبديل مقدار عددي به رشته عددي از زيربرنامهstr استفادهميشود و به صورت زير به كار ميرود:
Str (number : format,numstring)
با اين دستور مقداري كه در number قرار دارد به رشته اي به طول format تبديل ميشود و در رشته numstring قرار ميگيرد . دستورات زير را در نظر بگيريد:
Var x:integer;
St:string;
X=352;
Str(x:5,st);
با اجراي اين دستور مقدار 352 به رشته '352' تبديل شده در st قرار ميگيرد

کيفيت مقاله :
عالی خوب متوسط ضعيف


آموزش پاسکال قسمت چهارم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۵۳۶ مراجعه امروز
۴۱۲۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آموزش پاسکال قسمت چهارم
نويسنده : بهرام وکيلي
موضوع : Pascal [image] نسخه قابل چاپ
تاريخ نشر : ۱۶/۱۱/۱۳۸۱ اين مقاله ۵۳۶۲ بار مطالعه شده است
۱۴۱ نفر تا به حال به اين مقاله رای داده اند.
دستورات زير را در نظر بگيريد:

Var y1,y2:real;
St1,st2 : string;
Y1:=352.768
Y2:=476.395
Str(y1:7:2,st1);
Str(y2:3:1,st2);
با اجراي دستور str اول مقدار 352.768 به رشته '352.768' تبديل ميشود و در st1 قرار ميگيرد و با اجراي دستورstr دوم مقدار 476.395 به رشته '476.395'تبديل ميشود و در st2 قرار ميگيرد.
جدا كردن زيررشته اي از رشته:
زيررشته بخشي از رشته است و براي جدا كردن زيررشته از رشته از تابع copy استفاده ميشودتابع copy به صورت زير به كار ميرود.
Copy (source,index,size)
S:='I am learning pascal ';
S1:=copy(s,15,6);
دستور copy باعث ميگردد تا با شروع از محل 15 تعداد 6 كاراكتر از رشته s استخراج شود و در s1 قرار گيرد. بنابراين محتويات رشته s1 برابر است با 'pascal'.
الحاق رشته ها :
منظور از الحاق رشته ها اتصال رشته ها به يكديگر است به عنوان مثال اگرs1:='ab' و s2:='cde' الحاق دو رشته (s1,s2) به صورت 'abcde' خواهد بود براي الحاق رشته ها از تابع concat استفاده ميشود:
(اسامي رشته ها)concat
دستورات زير را در نظر بگيريد:
S1:='pascal';
S2:='is a ;
S3:='language';
S4:=concat(s1,s2,s3);
با اجراي اين دستور s3 به انتهاي s2 متصل ميشود و رشته نتيجه به انتهاي s1 متصل ميگردد و در نتيجه رشته s4 عبارت است از'pascal is a language': . اگر طول رشته حاصل بيش از 255 باشد بقيه كاراكترها حذف ميشوند.
جستجوي رشته اي در رشته ديگر:
براي اين كار از تابع pos استفاده ميشود كاربرذ اين تابع به صورت زير است:
Pos(s1,s2)
S1 رشته اي است كه بايد در s2 وجود داشته باشد محل اولين وقوع آن برگردانده ميشود و گر نه مقدار صفر برگردانده ميشود دستورات زير را در نظر بگيريد:
S1:='learning'
S2:='I am learning pascal';
S3:='english'
X:=pos(s1,s2)
y:=pos(s3,s2)
چون رشته s1 در s2 وجود دارد دستور pos اول مقدار 6 را در x قرار ميدهد و معنايش اين است كه رشته 'learning' در محل 6 رشته s2 وجود ندارد مقدار صفر در y قرار ميگيرد.
محاسبه طول رشته :
براي محاسبه طول رشته از تابع length به صورت زير استفاده ميشود:
(رشته)length
دستورات زير را در نظر بگيريد:
S1:='xymn'
X:=length(s1)
چون طول رشته s1 برابر 4 است مقدار x برابر 4 خواهد بود.
حذف و درج زيررشته:
زير رشته اي را ميتوان از رشته اي حذف كرد و يا زيررشته اي را ميتوان در رشته اي درج كرد براي حذف زير رشته از زيربرنامه ها به صورت زير به كار ميروند:
Delete(source,index,size)
Insert(pattern,destination,index)
در زيربرنامه delete زيررشته اي به طول size با شروع از محل index از رشته source حذف ميشود و در زيربرنامه insert زيررشته pattern با شروع از محل index در رشته destination درج ميشوددستورات زير را در نظر بگيريد:
S1:=pas***cal
Delete(s1,4,3)
S2:='paal';
S3:='sc';
Insert(s3,s2,);
دستور delete باعث ميشود تا با شروع از محل 4 رشته s1 حذف شده و رشته s1 به pascalتبديل شود دستور insert موجب ميشود تا رشته s3 در s2 درج شود و در نتيجه رشته s2 به 'pascal' تبديل شود.
مثال : برنامه اي بنويسيد كه يك اسم را از ورودي دريافت و آنرا بر عكس چاپ كند
Readln(name);
For i:=length(name) downto 1 do
Write (name[i])
مثال : برنامه اي بنويسيد كه كه يك نام را از ورودي دريافت و به ما بگويد كه آيا اين نام با حرف a شروع ميشود يا خير؟
Readln(name);
If name[1]='a' then
Writeln('ok')
Else
Writeln('not ok');
مثال : برنامه اي بنويسيد كه يك نام را از ورودي دريافت و حروف آنرا يك در ميان چاپ كند.
Readln(name);
For i:=1 to length(name) do
If I mod 2 = 0 then
Writeln(name[i]);

روش ديگر:"
For i:=1 to int(length(name)/2) do
Writeln(name[i*2]);
مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و متقارن بودن آنرا چك كند.
1 2 3 4 5 5 4 3 2 1
var
N:string;
Begin
Readln(n);
For i:=1 to int(length(n)/2) do
Begin
If n[i] <> n[length(n)-i+1] then
K:=0;
End;
If k=1 then
Writeln ('ok')
Else
Writeln('no');
End.
مثال : برنامه اي بنويسيد كه تعداد حروف a موجود در يك رشته ورودي را بشمارد.
Var st:string;
Begin
Readln(st);
C:=0;
For i:=1 to length(st) do
If st[i]='a' then ?if st[i] in ['a','A'] then
C:=c+1;
Writeln(c)
مثال : برنامه اي بنويسيد كه تعداد اسامي alireza موجود در رشته را بشمارد.
Begin
Readln(st);
C:=0;
While pos('alireza',st) <> 0 do
Begin
C:=c+1;
J:=pos('alireza',st);
Delete(st,pos('ali',st),3);
End;
Write ( c );
End.
مثال : برنامه اي بنويسيد كه دو رشته را از ورودي دريافت و بعد از كاراكترمساوي كه در رشته اول وجود دارد رشته دوم را چاپ كند.
Readln(st,st1);
J:=pos('=',st);
Writeln(copy ((st,1 j) , st1, copy (st,j+1,100));

تكليف : برنامه اي بنويسيد كه با دريافت سه حرف و قرار دادن آنها در يك آرايه سه تايي كليه تركيبات ممكن را كه سه حرف تركيباتشان به هم نخورد چاپ كند.
W a x
A x w
W a x
مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و كليه كلمات موجود در آن را بشمارد.
Readln(st);
S:=0;
St:=st+' '
While pos(' ',st) <> 0 do
Begin
S;=s+1;
Delete(st,1,pos(' ',st));
While st[1]=' 'do
Delet (st,1,1);
End;
End.
تكليف : برنامه اي بنويسيد كه 100 رسته را از ورودي دريافت و در يك آرايه به طول 100 از نوع string بريزيد و به سؤالات زير جواب دهد.
1- تعداد كل كلمات
1- تعداد كل حروف
2- تعداد حروف صدا دار

ذخيره اطلاعات :
Log file : فايلي است كه تمام تغييرات مربوط به يك محيط را ثبت ميكند
فايلها :
1- متني text
2- ركوردي typed
3-بدون نوع
4-untyped

معرفي فايلهاي متني :
Var

Text : نام فايل

نسبت دادن فايل :
; ('نام خارجي ,'نام فايل ) assign
مثال :
Assign(f,'c:\a1.dat.ddd');
باز كردن جهت خواندن
;( نام فايل)reset
باز كردن جهت نوشتن
; ( نام فايل)rewrite
) ___,نام فايل)readln
) ___,نام فايل)writeln
) نام فايل)close
تا close انجام نشود data ذخيره نميشود .
نكته بسيار مهم : در هر يك از مسائلي كه در مورد فايلها مطرح ميشود مي بايستي به نحوي از يكي از تكنيكهاي نگهداري اطلاعات در حافظه اصلي استفاده نمود اين تكنيكها ممكن است استفاده از متغيرها و آرايه ها و ماتريسها و ودرختهاو...استفاده نمود ولي تنها با دو عمل خواندن و نوشتن به روي فايل كار انجام ميشود
Update : ميخوانيم ولي دوباره ميريزيم سر جاش
Append : بهش يك چيزي اضافه ميكنيم
نكته : عمل rewrite باعث ميگردد چنانچه فايل وجود نداشته باشد ايجاد و چنانچه وجود دارد اطلاعاتش به طور كامل پاك شود.
مثال : برنامه اي بنويسيد كه100 اسم را از ورودي دريافت و آنها را در يك فايل به نام a1.dat))بنويسد.
Var
F:text;a:string;
Begin
Assign(f,'a1.dat');
Rewrite(f);
For i:=1 to 100 do
Readln(a);
Writeln(f,a);
End;
Close(f);
End.
مثال : برنامه اي بنويسيد كه فايل a1.dat را خوانده و به ما بگويد چند بار اسم ali تكرار شده است؟
Var
A:text;
B:string;
Begin
Assign(a,'a1.dat');
Reset(a);
Sum:=0;
For i:=1 to 00 do
Begin
Readln(a,b);
If b='ali' then
Sum:=sum+1;
End;
Close(a,b);
End;
مثال : برنامه اي بنويسيد كه تعدادي اسم را كه آخرين آنها end است از ورودي دريافت و در يك فايل به نام aa.dat بريزد آنگاه فايل را بسته و قسمتهاي زير را به طور جداگانه انجام دهد.
1- تعداد حسنها بيستر است يا علي ها
2- چند اسم وجود دارد كه با حرف z شروع ميشود.

Var
f:text;
Name:string;
Begin
Assign(f,'aa.dat');
Rewrite(f);
Readln(name);
While name<> 'end' do
Begin
Writeln(f,name);
Readln(name);
End;
Close(f);
H:=1;
A:=1;
Z:=1;
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name='ali' then
A:=a+1;
If name ='hassan' then
H:=h+1;
End;
Close(a);
If h>a then  writeln('h>a');
If h
If h=a then  writeln('h=a');
End;
Close(f);
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name[i]='z' then
Z;=z+1;
End;
Close(f);
Writeln('sum of z is :'z);
End.
تكليف : برنامه اي بنويسيد كه تعدادي نام را از ورودي دريافت و در يك فايل بريزد سپس فايل تشكيل شده را باز كرده و از روي اين فايل دو فايل ديگر تشكيل دهيد كه در يكي از آنها اسامي كه بين a تا z قرار گرفته اند ريخته و در فايل دوم كليه اسامي كه از v تا z هستند را بريزد.
Program test;
Var
Name : string;
F,f1,f2:text;
Begin
Assign(f,'a.dat');
Rewrite(f);
Writeln('enter a name ');
Readln(name);
While length(name)>0 do
Begin
Writeln(f,name);
Writeln('enter a name');
Readln(name);
End;
Close(f);
Reset(f);
Assign(f1,'a1.dat');
Assign(f2,'a2.dat');
Rewrite(f1);
Rewrite(f2);
While not eof (f) do
begin
Readln(f,name);
Case name[1] of
'a'..'u':writeln(f1,name);
'v'..'z':writeln(f2,name);
end;
end;
close(f2);
close(f1);
close(f);
end.
تكليف : برنامه اي بنويسيد كه نام دو فايل را از ورودي دريافت و از اطلاعات داخل اين دو فايل فايل سومي تشكيل دهد كه حاصل تركيب دو فايل قبل باشد.
var
h,f,g:text;
a:string;
begin

writeln('enter first filename') ;
readln(a);
assign(h,a);
writeln('enter second filename') ;
readln(a);
assign(f,a);
reset(h);
reset(f);
assign(g,'out.dat');
rewrite(g);
while not eof(h) do
begin
readln(h,a);
writeln(g,a);
end;
while not eof(f) do
begin
readln(f,a);
writeln(g,a);
end;
close(f);
close(h);
close(g);
End.
تكليف :برنامه اي بنويسيد كه در ضمن عمل merge دو فايل مرتب شده را با يكديگر تركيب و يك فايل مرتب شده به دست آوريم.

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اى بر ASP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۶۲ مراجعه امروز
۵۱۷۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اى بر ASP
نويسنده : محمد باقر معموری
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۱۱/۱۳۸۱ اين مقاله ۱۱۰۷۶ بار مطالعه شده است
۲۵۶ نفر تا به حال به اين مقاله رای داده اند.

يك فايل ASP مى تواند حاوى متون، Tagهاى HTML و اسكريپت ها باشد. اسكريپت ها در يك فايل ASP بر روى سرور اجرا مى شوند.
به عنوان پيش نياز چه چيزى را بايد بدانيد؟

قبل از شروع، بايد با مسائل زير را تا حدودى آشنا باشيد:

  • WWW و HTML و مسائل اوليه ساخت صفحات Web
  • يك زبان اسكريپت نويسى همچون JavaScript يا VBScript
ASP چيست؟
  • ASP حروف اختصارى Active Server Pages است.
  • ASP برنامه اى است كه درون IIS اجرا مى شود.
  • IIS حروف اختصارى Internet Information Services است.
  • IIS به عنوان يك مولفه رايگان با ويندوز 2000 عرضه مى شود.
  • IIS همچنين به عنوان جزئى از Windows NT 4.0 Option Pack است.
  • Option Pack مى تواند از سايت مايكروسافت داون لود شود.
  • PWS نسخه كوچكتر - ولى كاملا عمل كننده - از IIS است.
  • PWS را مى توانيد در سى دى ويندوز 95 يا 98 خود پيدا كنيد.
سازگارى ASP

  • ASP تكنولوژى مايكروسافت است.
  • براى اجراى IIS بايد ويندوز NT نسخه 4.0 يا بالاتر را داشته باشيد.
  • براى اجراى PWS بايد ويندوز 95 يا بالاتر را داشته باشيد.
  • ChiliASP تكنولوژى است كه ASP را بدون نياز سيستم عامل ويندوز اجرا مى كند.
  • InstantASP تكنولوژى ديگرى است كه ASP را بدون نياز به سيستم عامل ويندوز اجرا مى كند.
يك فايل ASP چيست؟
  • يك فايل ASP تقريبا شبيه به يك فايل HTML است.
  • يك فايل ASP مى تواند حاوى متن، XML، HTML، و اسكريپت باشد.
  • اسكريپت هاى درون يك فايل ASP بر روى Server اجرا مى شود.
  • يك فايل ASP پسوند "asp." دارد.
فرق ASP با HTML چيست؟
  • وقتى كه Browser (كاوشگر اينترنت) درخواست يك فايل HTML را بكند، Server آن فايل را بر مى گرداند.
  • وقتى كه Browser درخواست يك فايل ASP را بكند، IIS درخواست مربوطه را به موتور (هسته‌اى كه وظيفه اصلى را بازى مى كند) ASP ارجاع مى دهد. موتور ASP فايل ASP را خط به خط مى خواند، و اسكريپت هاى درون فايل را اجرا مى كند. در نهايت فايل ASP به عنوان يك فايل HTML ساده به Browser برگردانده مى شود.
ASP چه كارى مى تواند براى شما انجام دهد؟
  • به طور ديناميكى محتويات يك Web page را ويرايش يا اضافه كند.
  • به درخواست هاى كاربر كه از فرم هاى HTML ارسال شده اند پاسخ دهد.
  • به هر گونه اطلاعات با بانك اطلاعاتى دسترسى پيدا كرده و نتايج را به Browser برگرداند.
  • سفارشى نمودن (Customize) يك Web page تا براى كاربران مختلف مفيدتر باشد.
  • مزاياى استفاده از ASP به جاى CGI و Perl سرعت و سادگى است.
  • فراهم كردن امنيت بيشتر به گونه اى كه كد ASP شما از طريق Browser قابل مشاهده نيست.
  • از آن جايى كه فايلهاى ASP به شكل HTML برگردانده مى شوند، ميتوانند بوسيله هر Browserى مشاهده گردند.
  • برنامه نويسى درست ASP مى تواند ترافيك شبكه را به حداقل برساند.

کيفيت مقاله :
عالی خوب متوسط ضعيف


ASP را در رايانه خود راه اندازي کنيد ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۶۵ مراجعه امروز
۵۱۸۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ASP را در رايانه خود راه اندازي کنيد
نويسنده : محمد باقر معموری
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۱۱/۱۳۸۱ اين مقاله ۶۸۶۹ بار مطالعه شده است
۸۲ نفر تا به حال به اين مقاله رای داده اند.
شما مي توانيد ASP را بدون نياز به يک سرور خارجي اجرا کنيد. براي انجام اين کار شما بايد Microsoft's Personal Web Server (PWS) يا (Internet Information Server (IIS را در رايانه خود نصب کنيد.
چگونه ASP را در رايانه خود اجرا کنيد؟

شما مي توانيد ASP را بدون سرور خارجي در رايانه شخصي خود اجرا کنيد. براي انجام اين کار بايد Microsoft's (Personal Web Server (PWS يا (Internet Information Server (IIS را در رايانه خود نصب کنيد.
اگر در مورد اجراي ASP جدي هستيد، بايد حداقل ويندوز 98، نسخه دوم (Second Edition) داشته باشيد.
اگر در مورد اجراي ASP بسيار جدي هستيد، بايد از ويندوز 2000 استفاده کنيد.
چگونه PWS را در ويندوز 95 نصب کنيد و ASP اجرا کنيد؟

(Personal Web Server (PWS همراه ويندوز 95 نيست!!

براي اجراي ASP بر روي ويندوز 95، شما بايد "Windows NT 4.0 Option Pack" را از مايکروسافت داون لود کنيد.

داون لود "Windows NT 4.0 Option Pack"

چگونه PWS را در ويندوز NT نصب کنيد و ASP اجرا کنيد؟

(Personal Web Server (PWS همراه ويندوز NT نيست!!

براي اجراي ASP بر روي ويندوز 95، شما بايد "Windows NT 4.0 Option Pack" را از مايکروسافت داون لود کنيد.

داون لود "Windows NT 4.0 Option Pack"

چگونه PWS را در ويندوز 98 نصب کنيد و ASP اجرا کنيد؟

  1. شاخه Add-ons را در سي دي ويندوز 98 خود باز کنيد، شاخه PWS را پيدا کرده و فايل setup.exe را اجرا کنيد.
  2. يک شاخه Inetpub در هارد شما ايجاد خواهد شد. آن را باز کنيد و شاخه wwwroot را پيدا کنيد.
  3. يک شاخه جديد درست کنيد و نام آن را چيزي شبيه به "MyWeb" بگذاريد.
  4. از يک ويرايشگر متن استفاده کنيد و کدهاي ASPي را بنويسيد، فايل را به نام "test1.asp" را در شاخه "MyWeb" ضبط کنيد.
  5. مطمئن شويد که وب سرور شما اجرا است - برنامه نصب يک آيکن جديد در Task Bar شما اضافه کرده است (اين نشانه PWS است). بر روي آن کليک کنيد و دکمه Start را در پنجره اي که آمده بزنيد.
  6. Browser خود را باز کنيد و تايپ کنيد "http://localhost/MyWeb/test1.asp"، تا اولين صفحه ASP خود را ببينيد.
چگونه PWS را در ويندوز Me نصب کنيد و ASP اجرا کنيد؟

(Personal Web Server (PWS در ويندوز Me وجود ندارد !!

مقاله مربوطه را در سايت مايکروسافت بخوانيد

چگونه IIS را در ويندوز 2000 نصب کنيد و ASP اجرا کنيد؟

  1. از دکمه Start به Settings و سپس Control Panel برويد.
  2. در پنجره Control Panel آيکن Add/Remove Programs را انتخاب کنيد.
  3. در پنجره Add/Remove Programs گزينه Add/Removes Windows Components را انتخاب کنيد.
  4. در پنجره جديد گزينه Internet Information Services را انتخاب کرده، OK را بزنيد.
  5. يک شاخه Inetpub در هارد شما ايجاد خواهد شد. آن را باز کنيد و شاخه wwwroot را پيدا کنيد.
  6. يک شاخه جديد درست کنيد و نام آن را چيزي شبيه به "MyWeb" بگذاريد.
  7. از يک ويرايشگر متن استفاده کنيد و کدهاي ASPي را بنويسيد، فايل را به نام "test1.asp" را در شاخه "MyWeb" ضبط کنيد.
  8. مطمئن شويد که وب سرور شما اجرا است - برنامه نصب يک آيکن جديد در Task Bar شما اضافه کرده است (اين نشانه IIS است). بر روي آن کليک کنيد و دکمه Start را در پنجره اي که آمده بزنيد.
  9. Browser خود را باز کنيد و تايپ کنيد "http://localhost/MyWeb/test1.asp"، تا اولين صفحه ASP خود را ببينيد.
چگونه IIS را در ويندوز XP نصب کنيد و ASP اجرا کنيد؟

نکته: شما نمي توانيد ASP را روي ويندوز XP نسخه خانگي (Home Edition) اجرا کنيد.
  1. از دکمه Start به Settings و سپس Control Panel برويد.
  2. در پنجره Control Panel آيکن Add/Remove Programs را انتخاب کنيد.
  3. در پنجره Add/Remove Programs گزينه Add/Removes Windows Components را انتخاب کنيد.
  4. در پنجره جديد گزينه Internet Information Services را انتخاب کرده، OK را بزنيد.
  5. يک شاخه Inetpub در هارد شما ايجاد خواهد شد. آن را باز کنيد و شاخه wwwroot را پيدا کنيد.
  6. يک شاخه جديد درست کنيد و نام آن را چيزي شبيه به "MyWeb" بگذاريد.
  7. از يک ويرايشگر متن استفاده کنيد و کدهاي ASPي را بنويسيد، فايل را به نام "test1.asp" را در شاخه "MyWeb" ضبط کنيد.
  8. مطمئن شويد که وب سرور شما اجرا است - برنامه نصب يک آيکن جديد در Task Bar شما اضافه کرده است (اين نشانه IIS است). بر روي آن کليک کنيد و دکمه Start را در پنجره اي که آمده بزنيد.
  9. Browser خود را باز کنيد و تايپ کنيد "http://localhost/MyWeb/test1.asp"، تا اولين صفحه ASP خود را ببينيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


نحو ASP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۶۸ مراجعه امروز
۵۱۸۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نحو ASP
نويسنده : محمد باقر معموری
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۱۱/۱۳۸۱ اين مقاله ۴۷۰۵ بار مطالعه شده است
۳۲ نفر تا به حال به اين مقاله رای داده اند.

شما نمي توانيد سورس کد هاي ASP را بوسيله انتخاب گزينه View Source در Browser مشاهده کنيد، شما فقط خروجي فايل ASP را مشاهده مى‌کنيد که HTML ساده است. زيرا که اسکريپت ها قبل از اين که نتايج به Browser فرستاده شود بر روي سرور اجرا مى‌گردد.

در خودآموزهاي ASP ما تمامي مثالها علاوه بر نتيجه نهايي حاوي سورس کد مربوطه هستند. اين مسئله امکان فهميدن اينکه مثالها چگونه کار مي کنند را براي شما ساده مي کند.
مثالها

نوشتن متن با ASP
چگونه با کمک گرفتن از ASP متوني را بنويسيم.

اضافه کردن HTML به متون
چگونه متون را با استفاده از Tagهاي HTML فرمت بندي کنيم؟

قواعد اساسي نحو
يک فايل ASP به طور عادي دقيقا همانند HTML حاوي Tagهاي HTML است. اگر چه، يک فايل ASP مي تواند همچنين حاوي Scriptها نيز باشد. اين اسکريپت ها به وسيله علامت هاي %> و <% احاطه شده اند. اسکريپت هاي سرور بر روي سرور اجرا مي شود و مي تواند حاوي هر گونه expressions، دستورات (Statements)، توابع، يا عملگرهايي باشد.

آبجکت Response
متد Write مربوط به آبجکت Response براي فرستادن محتويات به Browser استفاده مي شود. به عنوان مثال، دستورات زير براي فرستادن متن "سلام دنيا!" به Browser استفاده مى‌شود.
<%
response.write("سلام دنيا!")
%>

VBScript
اين امکان وجود دارد که از که از زبان هاي مختلف اسکريپت نويسي در فايلهاي ASP استفاده کنيد. اگرچه زبان پيش فرض، VBScript است.
<html>
<body>
<%
response.write("سلام دنيا!") %>
</body>
</html>
مثال بالا "سلام دنيا!" را در قسمت body متن مي نويسد.
JavaScript
براي اين که JavaScript را به عنوان زبان پيش فرض براي يک صفحه خاص مشخص کنيد مي بايست از راهنماهاي زباني در ابتداي صفحه خود استفاده کنيد:
<%@ language="javascript"%>
<html>
<body>
<%
Response.Write("Hello World!")
%>
</body>
</html>
نکته: JavaScript برعکس VBScript به بزرگ يا کوچک بودن حروف حساس است. شما مجبور خواهيد بود که وقتي زبان احتياج دارد، کد ASP خود را با حروف بزرگ يا کوچک بنويسيد.
ساير زبان هاي اسکريپ نويسي
ASP همراه با VBScript و JScript (پياده سازي مايکروسافت از JavaScript) عرضه مي شود. اگر شما مي خواهيد که با زبان ديگري همچون PERL - REXX يا Phyton کد بنويسيد، مجبور خواهيد بود که موتور Script مربوط به آنها را نصب کنيد.
مهم: به خاطر اين که اسکريپت ها بر روي سرور اجرا مي شوند، به هيچ وجه لازم نيست Browserي که فايل ASP را نشان مي دهد از Scripting پشتيباني کند!

کيفيت مقاله :
عالی خوب متوسط ضعيف


متغييرها در ASP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۷۱ مراجعه امروز
۵۱۸۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
متغييرها در ASP
نويسنده : محمد باقر معموری
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۱۱/۱۳۸۱ اين مقاله ۴۱۹۵ بار مطالعه شده است
۱۸ نفر تا به حال به اين مقاله رای داده اند.
يک متغيير براي نگهداري اطلاعات استفاده مي شود.

اگر يک متغيير بيرون از يک رويه (procedure) تعريف شود، ميتواند بوسيله هر اسکريپت موجود در فايل ASP تغيير يابد. اگر متغيير داخل يک رويه تعريف شود، آن هر بار که رويه اجرا مي شود، ايجاد و سپس نابود مي شود.
مثالها

تعريف کردن يک متغيير
متغييرها براي نگهداري اطلاعات استفاده مي شود. اين مثال نشان مي دهد که چگونه يک متغيير تعريف کنيم، چگونه يک مقدار به آن بدهيم، و چگونه از آن مقدار در يک نوشته استفاده کنيم.

تعريف يک آرايه
آرايه‌ها براي ضبط يک سري از اطلاعات مرتبط به هم استفاده مي شوند. اين مثال نشان مي دهد که چگونه آرايه‌اي تعريف کنيم که حاوي نام هايي باشد.

چرخشي بر روي Headerهاي HTML
اين مثال نشان مي دهد که چگونه روي شش Header يا تيتر موجود در HTML گردش کنيم؟

نشان دادن پيغام خوش‌آمدگويي بر حسب زمان با استفاده از VBScript
اين مثال بر حسب زمان سرور يک پيغام مختلف به کاربر نشان خواهد داد.

نشان دادن پيغام خوش‌آمدگويي بر حسب زمان با استفاده از JavaScript

عمر متغييرها
متغييري که خارج از يک رويه (procedure) تعريف شده است مي تواند بوسيله هر اسکريپتي در فايل ASP در دسترس قرار گرفته و تغيير کند.

متغييري که در داخل يک تابع تعريف شده است هر بار که رويه اجرا مي شود درست و نابود مي شود. هيچ اسکريپتي بيرون از رويه نمي تواند به آن متغيير دسترسي داشته باشد يا آن را تغيير دهد.

براي تعريف متغييرهايي که براي بيش از يک فايل ASP قابل دسترس باشند، آنها را به عنوان متغييرهاي Session يا متغييرهاي Application تعريف کنيد.

متغييرهاي Session
متغييرهاي Session براي نگهداري اطلاعات راجع به يک کاربر استفاده مي شود؛ اين اطلاعات در همه صفحات يک Application قابل دسترسي خواهد بود. به طور مشخص اطلاعات نگهداري شده در Sessionها نام، شناسه و اولويت است.

متغييرهاي Application
متغييرهاي Application نيز در تمامي صفحات يک Application قابل دسترس هستند. متغييرهاي Application براي نگهداري اطالعات راجع به همه کاربران در يک Application خاص استفاده مي شود.

کيفيت مقاله :
عالی خوب متوسط ضعيف


افزايش سرعت جستجو در مقادير هنگفتى از اطلاعات متنى ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۵۳ مراجعه امروز
۴۸۶۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
افزايش سرعت جستجو در مقادير هنگفتى از اطلاعات متنى
نويسنده : محمد باقر معموری
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۱۱/۱۳۸۱ اين مقاله ۵۷۱ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

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

فهرستى از مطالب ارائه شده در اين مقالات
  • بررسى كلى صورت مساله
  • روش Indexing ساده
  • روش Indexing و Compacting پيشرفته
  • بررسى Indexing Service مربوط به بانكهاى اطلاعاتى و آشنايى با Indexing Service در SQL Server و ويندوز 2000

بررسى كلى صورت مساله
امروزه سيستم هاى اطلاعاتى جزء لاينفك مراكز تحقيقاتى است. يك مركز تحقيقاتى از يك سيستم اطلاعاتى تواقعاتى را دارد؛ همچون افزايش ضريب امنيت، افزايش سرعت عمل، كاهش زمان تحقيق، نائل شدن به بيشترن اطلاعات ممكن، موضوع بندى بودن اطلاعات و ...
يك مركز تحقيقاتى بايد به امنيت سيستم تحقيقاتى خود اطمينان داشته باشد؛ يك مركز تحقيقاتى بايد اطمينان داشته باشد كه اطلاعات او امن هستند و امكان از بين رفتن اطلاعاتش به هر طريق از جمله نفوذ ويروس، اشكالات سيستم، ايزوله نبودن سيستم و ... از بين نمى رود. يك مركز تحقيقاتى بايد مطمئن باشد كه از بيشترين پناسيل اطلاعاتى خود استفاده مى كند و مسائلى از اين قبيل
به علاوه يك مركز تحقيقاتى نياز دارد كه يك سيستم اطلاعاتى بتواند زمان تحقيق را كاهش دهد و در كمترين زمان به بيشترن اطلاعت ممكن برسد و همچنين داده ها در يك ساختار درختى يا چيزى شبيه به آن دسته بندى شده باشند تا دسترسى از كل به جزء امكان پذير باشد و در مدت زمان كمى به نتايج دلخواه خود برسد. اما شايد افزايش سرعت عمل يكى از مهمترين آرزوهاى يك مركز تحقيقاتى است. البته در اينجا نبايد مسئله امنيت و نائل شدن به بيشترين اطلاعات ممكن را فراموش كنيم. آن مركز علاوه بر اين كه تمايل دارد به بيشترين اطلاعت ممكن برسد، همچنين مايل نيست كه اطلاعات او دچار اختلال شود.
بنابراين يك مركز تحقيقاتى علاقه دارد كه در مورد مسئله سرعت به نتايج زير برسد:
  • افزايش سرعت
  • افزايش ضريب كارايى يا راندمان تحقيق
  • افزايش امنيت
  • كاهش مدت زمان جستجو
  • استفاده از كمترين امكانات سخت افزارى و نرم افزارى جهت كاهش هزينه‌ها

راقم سطورسعى دارد در اين سلسه مقالات راجع به نيل به اين اهداف بحث كرده و مساله را به طور عميقتر بشكافد.

روش Indexing
اين روش شايد يكى از سهل الوصول ترين روشها است كه مى توانيد در سيستم هاى كوچك و حتى متوسط به راحتى پاسخگوى نيازها باشد.
شايد، براى شروع بهتر باشد با كلمه Indexing بيشتر آشنا شويم:
ديكشنرى انگليسى به انگليسى Babylon كلمه Indexing را اين گونه توضيح داده است:
n. act of creating an index; act of labelling and arranging data in an index table for easy access(Computers)

عمل درست كردن فهرست يا شاخص؛ عمل نام گذارى و سازمان دهى كردن اطلاعات در يك جدول شاخص براى دسترسى آسانتر (رايانه)

ديكشنرى كامپيوتر مايكروسافت نيز در توضيح لغت indexed search اين گونه مى نويسد:
n. A search for an item of data that uses an index to reduce the amount of time required.

جستجو به دنبال فقره‌اى از اطلاعات. در اين شيوه جستجو از يك فهرست يا شاخص براى كاستن مقدار زمان مورد نياز استفاده مى شود.

حال كه فهميديم Indexing يعنى چه، مى توانيم به بررسى روش مذكور بپردازيم. فرض كنيد سازمان شما بخواهد در 3،000،000 صفحه اطلاعات متنى جستجو كند. در آن صورت شما ممكن است در ابتدا تصميم بگيريد از Query استفاده كنيد. ولى مطئمنا پس از انجام اولين تست از ايده خود منصرف خواهيد شد؛ زيرا متوجه مي‌شويد كه زمان مورد نياز براى جستجودر 3،000،000 صفحه اطلاعات سازمان شما بسيار بسيار بيشتر از تصور شما بوده است.
حالا اجازه بدهيد ببينيم Indexing براى اين مساله چه راه حلى ارائه مى دهد؟
كافى است به سادگى جدولى از لغات غيرتكرارى متون بسازيد و در آن جستجو كنيد. اجازه دهيد ببينيم چگونه مى شود چنين كارى كرد؟ كاراكتر " " يا Space مهمترين جداكننده لغات است. مى توان به سادگى يك Parser يا تجزيه كننده متن نوشت كه اين ليست غيرتكرارى را درست كرده و در يك Table بريزد. فعلا به عنوان يك تجربه نوع Database استفاده شده مهم نيست ولى من Microsoft Access را پيشنهاد مى كنم چون فعلا ميتواند نيازهاى ما را به طور كامل برطرف كند.
شيوه كار بسيار ساده است. Parser شما بايد لغات را بر حسب كاراكتر " " يا Space از هم جدا كرده و در صورتى كه اين لغت قبلا در بانك مربوطه ريخته نشده بود آن را به بانك اضافه كند. ساختار Table مذكور نيز بايد چيزى شبيه به اين باشد:

نام فيلد | نوع | اندازه | توضيحات
Word | String | 15 | كلمه
Positions | Memo | 0 | موقعيتها - تشريح خواهد شد
جدول 1 - ساختار بانك KeyWords

البته تجزيه كردن متون با شيوه مذكور خالى از اشكال نيست؛ يكى از مهمترين اشكالات اين روش اين است كه به عنوان مثال بين لغت "انفورماتيك" و "انفورماتيك،" تفاوت قائل ميشود و دو ركورد مجزا براى آنها ايجاد مى كند. ولى فعلا همين Parser ساده مشكل ما را حل ميكند. براى يك پروژه واقعى شايد لازم باشد يك Parser قوى تر بنويسيد و آن را از جهات سرعت بهينه سازى كنيد.
همان طور كه ديديد Tableما علاوه بر فيلد Word داراى فيلد ديگريبود به نام Positions. اين فيلد مسئوليت كليدى را در شيوه جستجوى ما بازى مى كند. هر بار كه شما يك كليدواژه را به بانك اضافه ميكند، بايد آدرس آن كليدواژه را نيز به طور دقيق در فيلد Positions وارد كنيد. اين مساله كه چگونه آدرس مذكور را درج كنيد، بسته به شكل طراحى Database شماست. ولى اجازه دهيد فرض كنيم شما متون را در قالب زير و با ساختار Master-Detailى نگهدارى مى كنيد:
نام فيلد | نوع | اندازه | توضيحات
+ID | AutoInc | 0 | ID
BookName | String | 30 | نام كتاب
جدول 2 - ساختار بانك Master

نام فيلد | نوع | اندازه | توضيحات
+ID | AutoInc | 0 | ID
Code | Integer | 0 | Used for creating Relation
PageNum | Integer | 0 | شماره صفحه
Text | Integer | 0 | متن صفحه مربوطه
جدول 3 - ساختار بانك Detail

طبق اين ساختار شما نام كتابهاى خود را در جدول Master و متن كتابها را در جدول Detail نگهدارى مى كنيد. به علاوه بين جدول Master و Detail يك ارتباط يك به چند موجود است. اين ارتباط از طريف فيلد Code برقرار مى شود.
خوب ... با توجه به ساختار مذكور شما مى توانيد آدرس كلمات را با استفاده از فرمت زير در بانك KeyWords وارد كنيد:
<Master.ID>,<Detail.PageNum>;<Master.ID>,<Detail.PageNum>;<Master.ID>,<Detail.PageNum>;....

براى اين كه مساله بيشترى روشن تر شود به الگوريتم كلى كار نگاهى بياندازيد:
  • كلمه به كلمه در متن جلو برويد.
  • هر كمله را پس از اين كه مطمئن شديد قبلا در بانك KeyWords وارد نشده، در فيلد Word همين بانك وارد كنيد.
  • آدرس اين كلمه را نيز به شكلى كه گفته شده در فيلد Positions وارد كنيد. تنها لازم است هر بار يك آدرس را وارد كنيد و براى وارد كردن آدرس بعدى از يك كاراكتر ";" استفاده كرده و آدرس بعدى را اضافه كنيد.
  • از زندگى لذت ببريد و آماده باشيد كه به تشريح چگونگى جستجو در متون بپردازيم....
ديگر راه درازى در پيش نداريم. به هدف رسيده ايم. فرض كنيد در برنامه نهايى كاربر درخواست جستجو در لغت "انفورماتيك" را صادر كرد. برنامه شما چه بايد بكند؟ خيلى ساده است. به جايى اين كه در متون جستجو كنيد در بانك KeyWords جستجو كنيد. جستجو در اين بانك به سرعت باد انجام مى گردد زيرا حجم اطلاعات آن پايين است (قبلا گفتيم كه اين بانك حاوى لغات تمامى متون ولى به صورت غيرتكرارى است).
برنامه شما بايد در صورتى كه ركور "انفورماتيك" در بانك KeyWords نبود يك پيغام خطا به كاربر نشان دهد و در غير اين صورت آدرس هاى مذكور را از حالت كد شده در بياورد و به كاربر بگويد كه در كتاب "فلان" و در صفحه شماره "فلان" لغت مورد نظر شما موجود است.
اگر از اين روش استفاده كنيد مطمئن باشيد كه از سرعت فوق العاده آن شگفت زده مى شويد. در واقع ما يك بار خودمان تمامى جستجوهاى ممكن را انجام داديم و حالا در جستجوهاى خودمان مورد نياز كاربر را مى يابيم
اما يك مساله مهم ديگر هنوز باقيست. و آن جستجوى شرطى است. اگر بخواهيد به برنامه خود قابليت جستجوى AND - OR يا NOT را بدهيد، چه؟
انجام دادن چنين كارى ساده نيست ولى به پيچيدگى خود روش Indexing هم نيست. فرض كنيد رشته ورودى كاربر شما اينگونه باشد: "انفورماتيك AND ايران AND معظلات".
حالا برنامه شما بايد ركوردهاى "انفورماتيك"، "ايران" و "معظلات" را در بانك KeyWords فيلتر كند و مواردى كه اين سه لغت در يك صفحه واقع شده اند را به كاربر گزارش دهد.
شايد يك مساله ديگر هم ذهن شما را به خود جلب كرده است و آن مساله حجم است. شايد از خود بپرسيد: "خوب، اين روش خوبى است ولى احتياج به حجم خيلى زيادى دارد!". در پاسخ شما بايد بگويم كه نه اين چنين نيست. حجم مورد نياز شما بسيار اندك است. زيرا كه بانك شما حاولى كل لغات متون شما نيست بلكه حاوى لغات غيرتكرارى متون است.
به علاوه اگر خيلى اصرار داريد كه از حجم كمترى استفاده كنيد ميتوانيد آدرس ها را كد كنيد.
يك روش كدكردن اعداد وجود دارد كه خيلى خيلى كاراست. تا عدد 65،536 را ميتوان فقط با دو بايت ذخيره كرد.
انجام اين كار خيلى خيلى ساده است.
بگذاريد با مثال اين مساله را به مطرح كنم.
عدد | معادل فشرده شده
256 | #256
257 | #1#1
258 | #1#2
512 | #1#256
513 | #2#1
1000 | #3#232
جدول 4 - نمونه اعداد کد شده

توجه: منظور از #1 كد اسكى شماره 1 است.
نمى دانم تا به حال متوجه منظور من شده ايد يا نه. اگر متوجه نشديد به الگوريتم كارنگاهى بياندازيد
  • عدد مورد نياز خود را تقسيم بر 256 بكنيد و خارج قسمت و باقيمانده را در جايى يادداشت كنيد.
  • كاراكتر اسكى خارج قسمت و سپس كاراكتر اسكى باقيمانده كدشده عدد شما است

کيفيت مقاله :
عالی خوب متوسط ضعيف


۷ دلیل برای اینكه استفاده از PHP بهتر از ASP می باشد ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۹۹ مراجعه امروز
۵۱۱۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
۷ دلیل برای اینكه استفاده از PHP بهتر از ASP می باشد
نويسنده : سايت ايران PHP
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۱۱/۱۳۸۱ اين مقاله ۸۵۶ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.
نويسنده : سيد حميد رضا هاشمي گلپايگاني ( hamid@morva.net )

مقدمه :

به دليل س?الات زيادي كه در مورد اين موضوع شده بود تصميم گرفتم كه كمي در مورد اين موضوع تحقيق و نتيجه براي

استفاده همان در سايت IranPHP.net براي استفاده همگان قرار دهم . قبلا گفته باشم كه اينها تنها برداشت هاي شخصي

من در اين تحقيق مي باشد و خوشحال مي شوم كه بقيه ايرادات من را در اين تحقيق برايم ارسال كنند به دليل اينكه من

تجربه كار با ASP را ندارم و همچنين بعضي اطلاعات من مربوط به ASP است و NET. را شامل نمي شود .

?- سرعت ، سرعت ، سرعت

اولين باري كه يك كد به زبان PHP نوشتم بر روي يك كامپيوتر Pentium 166Mhz بود بر روي سيستم عامل Linux و به

همراه Apache Web Server . بسيار برايم جالب بود كه چقدر كد هاي من سريع اجرا مي شوند . يعني در آن موقع با

اگر شما يك Windows NT بر روي آن مي توانستيد سوار كنيد و به فرض كه IIS هم بر روي آن بالا مي آمد فكر كنم

اصلا وقت Serve كردن صفحات عادي html را نداشت چه برسد به اينكه بخواهد ASP را هم اجرا كند . علتش اين است

كه Microsoft از يك Technology در اجرا كردن كدهاي زبان ASP استفاده مي كند كه در آن هر موقع شما تصميم به

استفاده از يك عنصر خارجي مانند VBScript, MSSQL, ODBC و خيلي چيزهاي ديگر كه در حقيقت از Engine هاي

خارجي استفاده مي كنند دستور به آن Engine خارجي مي دهد و جواب بدست آمده را بررسي و براي استفاده در اختيار

ادامه برنامه مي گذارد . همين رفت و برگشت و اجرا كردن Engine هاي خارجي باعث كند شدن سرويس دهي مي شود كه

اين را شما به خوبي مي توانيد در استفاده از MSSQL به طرق مختلف احساس كنيد . مثلا اگر شما خود MSSQL Extentions

براي استفاده از MSSQL استفاده كنيد براي يك Query مشترك ?.?? ثانيه زمان تلف مي شود و اگر همان را با استفاده

از ODBC اجرا نمائيد زماني در حدود ?.?? ثانيه تلف مي شود كه اين خود نشان مي دهد كه ASP اينها را به تنهائي اجراء

نمي كند و از Engine هاي ويندوز استفاده مي كند .

?- استفاده بهينه از Memory

در IIS4 اگر شما در يك صفحه مثلا ?? بار يك صفحه را Include كنيد اين صفحه ?? بار در حافظه بارگذاري مي شود و در

حقيقت حافظه شما ?? برابر زيادتر اشغال مي شود . البته شنيدم كه اين مشكل در ويندوز ???? و IIS5 حل شده است

اما بازهم براي كساني كه ASP را مينويسند و مي خواهند آنرا بر روي سرور هاي Hosting كه داراي سيستم عامل NT

هستند اجرا كنند مشكل زا است و باعث كند شدن سيستم مي شود و در Load بالا مسلما مشكل زا خواهد شد .

اين مشكل به طور كلي در PHP وجود نداشته و ندارد و استفاده درست از Memory در هنگام اجراي يك كد باعث شده است

كه صفحات در Load بالا نيز به خوبي قابل ر?يت باشند .

?- خرج اضافي نداريد !

مثلا در ASP اگر بخواهيد از امكاناتي نظير Encryption يا File Uploading يا ارسال نامه توسط كد برنامه استفاده كنيد

بايد امكانات اضافي براي اين كار خريداري كنيد و نصب كنيد تا اين امكانات به IIS شما اضافه گردد . اين در حاليست كه

در PHP همه اينها در هنگام Compile در نظر گرفته مي شوند و همگي از امكانات Standard اين زبان هستند و هيچ نصب

يا خرج اضافي در كار نيست .

?- MySQL بهترين انتخاب، بيشترين سرعت

در اينجا قصد ندارد به مقايسه MySQL و MSSQL بپردازم . اما به خاطر قدرت خارق العاده MySQL و سازگار بودن اين

DBMS با زبان PHP به صورتيكه PHP اتصال به MySQL را به صورت دستورات Internally پشتيباني مي كند و حتي نياز

به نصب Module اضافي براي اين كار نمي باشد ، از سرعت بسيار بالائي در كار با SQL برخوردار است كه شايد بعدا در

مورد MySQL مقاله اي نوشتم .

براي مطالعه ادامه مقاله به آدرس ذيل مراجعه فرماييد

http://www.iranphp.net/articles/2.html

کيفيت مقاله :
عالی خوب متوسط ضعيف


مطالب كلي راجع به طراحي سايت ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۸۲ مراجعه امروز
۴۹۹۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مطالب كلي راجع به طراحي سايت
نويسنده : عباس مقدس نجفيان
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۲/۱۱/۱۳۸۱ اين مقاله ۵۰۵۸ بار مطالعه شده است
۷۲ نفر تا به حال به اين مقاله رای داده اند.
چنانچه قصد داريد برنامه نويسي را شروع كنيدمناسب است كه به نكات زير توجه نماييد.
? در دنياي اينترنت از پروتكل هاي مختلف (پروتكل-Protocol- زبان قابل فهم بين كامپيوترها است)استفاده ميشود. دو پروتكل زير بيشترين كاربرد را در كار يك برنامه نويس دارد.
1- پروتكل HTTP (Hyper text Transfer Protocol)
عمدتا از اين پروتكل براي ارسال درخواستها و پاسخها كه بين مرورگر –Browser- وسرور وب انجام ميشود استفاده مي گردد . ابتدا مرورگر درخواستي را براي سرور مي فرستد . سرور درخواست را بررسي كرده وجواب آن را براي مرورگر ارسال ميكند . web server مشهور IISوApachi ميباشد.
2- پروتكل FTP (File Transfer Protocol)
هنگاميكه بخواهيد فايلهاي آماده شده براي سايت را به مكان اصلي آنها بر روي يك سرور وب (web host) منتقل كنيد كه اين سرور از لحاظ مكاني دور از دسترس شما قرار دارد (مثلا شما در ايران هستيد وسرور شما در كانادا مي باشد ) از اين پرووتكل براي رد وبدل فايلها بين كامپيوترها استفاده مي كنيد . ابزارهايي براي اين كار تهيه شده است.
? اسكريپت نويسي (كدهاي برنامه نويسي است كه شما در كنار HTML هاي خود قرار مي دهيد تا كيفيت وتوان سايت را افزايش دهند )كه معمولا براي يك سايت صورت مي گيرد به دو دسته زير تقسيم ميشوند.
1- اسكريپت نويسي طرف مرورگر (Client) كه عمدتا با زبان javascript نوشته ميشود . علت استفاده از اين زبان ، پشتيباني اكثر مروگر ها از آن ميباشد. زبان ديگر اسكريپت نويسي طرف مرورگر VBScript است كه فقط مرورگر Internet Explorer با آن مي تواند كار كند .
برنامه اي كه شما مي نويسيد توسط مرورگر اجرا خواهد شد . اين برنامه ها نمي توانند كاري خارج از محيط مرورگر انجام دهند (مثلا نميتوانند فايلي ساخته يا فايلي را از روي هارد كاربر پاك كنند)
2- اسكريپت نويسي طرف سرور (Server) كه قابليتهاي آن بسيار بيشتر از نوع قبلي است و بر روي كامپيوتر سرور web اجرا مي شوند و نتايج آنها به صورت html يا xml براي مرورگر استفاده مي شود .مثلا اگر بخواهيد از بانكهاي اطلاعاتي در سايت خود استفاده كنيد يا e-mail كاربران را دريافت كرده و در بانك خود ذخيره كنيد يا e-mail هايي را براي كاربران خود بفرستيد ، با يستي از اسكريپت طرف سرور استفاده كنيد. براي نوشتن اين اسكريپتها زبانهاي مختلفي وجود دارد كه از جمله آنها موارد زير هستند.
- ASP (Active Server Page) بر روي كامپيوترهاي ويندوز و سرور وب
IIS (Internet Information Server) كار ميكند .
- JPS (Java Server Page) بر روي كامپيوترهاي ويندوز و IIS يا Unixو Linux و Apachi (سرور وب) كار مي كند.
- PHP بر روي كامپيوترهاي ويندوز و IIS و Unixو Linux و Apachi كار مي كتد .
- Perl بر روي كامپيوترهاي ويندوز و IIS و Unixو Linux و Apachi كار مي كتد .
- CFML (Cold Fusion Markup Languege) كه با سرور Cold Fusion محصول شركت ماكرومديا كار مي كند و بر روي كامپيوترهاي ويندوز وUnix قابل استفاده است.
در بررسي هاي انجام شده نشان مي دهد كه اگر بخواهيد يك كار مشخص را با زبانهاي فوق بنويسيد بيشترين حجم كد نويسي را در PHP و كمترين حجم كدنويسي را در CFML خواهيد داشت.
هنگام انتخاب زبان دقت به نكته زير بسيار بسيار مهم است.
چون برنامه هايي كه مي نويسيد بر روي سرور وب (Web Host) اجرا خواهند شد لذا بايستي مطمئن شويد كه سرور نهايي اينترنت شما از كداميك از اين زبانها پشتيباني ميكند.
در بين اين زبانها ASP و PHP در ايران بيشتر استفاده شده است. چون ويندوز وIIS وASP محصول شرمت مايكروسافت هستند لذا با هم بيشتر سازگار بوده و سرعت بيشتري نسبت PHP روي ويندوز و IIS ارائه مي دهند. ولي PHP بر روي سرور Unixو Linux و Apachi با كارايي بسيار بالايي كار مي كند. ASP نميتواند روي سرورهاي Linux و Apachi كار مي كند.
نكته: علاوه بر زبانهاي اسكريپت نويسي طرف سرور ، امكان استفاده از فايلهايي باينري CGI كه همان DLL ها وEXE ها هستند نيز وجود دارد.
اين نوع از فايلها چون Visual Cttو Visual Basicو Delphi و مانند اينها ساخته شده و در سرور وب نصب مي شوند. اين روش قديمي بوده و در حال حاضر كاربرد كمي دارد.
قوانين اصلي براي تهيه يك سايت:
1- بايستي ابتدا تحليل وتراحي شده و به خوبي سازماندهي شود . تعيين ساختار سايت و اهداف آن قدم اول خواهد بود .
2- طراحي صفحات بايستي به گونه اي باشد كه كاربر سريعا به موضوع مورد نظر برسد.
3- بگونه اي طراحي شود كه امكان Update سايت براي شما يا مدير سايت راحتر باشد.
4- روشهاي مختلفي براي حركت بين صفحات (navigation) را در اختيار بازديد كننده قرار دهد.
5- از درج ليستها و منوهاي با طول رياد خودداري شود.
نكات فني :
1- ساختار روبرو نمونه اي از ساختار مناسب براي يك سايت چند زبانه است.
2- تا جايي كه ممكن است سايت را Flat طراحي كنيد تا آدرس دهي كوتاه شده و FTP آن راحتتر شود.
3- از فهرستهاي مجازي –Virtual Directory- استفاده كنيد.
4- تقسيم بندي فايل بستگي به كاربرد ومحتويات آن دارد . مثلا تقسيم بندي فيزيكي بر اساس محصولات يا بر اساس نوع محتويات مانند Sample , Reference , Resource
براي ساخت Virtual Directory مراحل زير را طي كنيد.
1- برنامه Internet Services Managerرا از آدرسControl Panel\Administrative Tools اجرا كنيد.
2- منويVirtual Directory IIS\Default Web Site\New\ را اننتخاب كنيد.
3- نام فهرست مجازي را وارد كنيد.
4- آدرس فيزيكي مرتبط با نام مجازي را مشخص كنيد.
5- مجوزهاي دسترسي به اين فهرست را تعيين كنيد.
براي اطلاعات بيشتر به help برنامه IIS مراجعه كنيد.
مثلا نام مجازي فهرست D:\Site\ Download را Download مي گذاريد. براي اشاره به فايلهاي درون اين مسير از URL زير استفاره مي كنيد.
http://localhost/ Download/…
Frame يا بدون فريم:
مزاياي استفاده از فريم ها
1- navigate بين صفحات را آسان كرده و يك نقطه مرجع براي كل سايت بوجود مي آورد.
2- صفحه را به چند بخش تقسيم مي كند و ميتواند طراحي وساخت صفحات را ساده نمايد.
3- سبب Loud شدن سريعتر صفحات مي شود چرا كه بعضي ازبخشهاي صفحه نياز به Loud مجدد ندارد.
4- بهترين را ه براي ساخت Control Panel است.
معايب استفاده از فريم ها
1- بخشهايي از صفحه بصورت ثابت درآمده و از فضاي فعال صفحه مي كاهد.
2- گاهي اوقات پيچيدگي برنامه نويسي طرف سرور و طرف مرورگر را افزايش مي دهد.
3- براي اولين بار كه كاربر به سايت وصل ميشود بار بيشتري را روي سرور قرار مي دهد چرا كه در آن واحد چندين فايل html يا asp وغيره بايستي براي مرورگر فرستاده مي شود .
4- فريم ها با همه مرورگرها سازگار نيستند.
براي آنكه بتوان در مرورگرهايي كه امكان نمايش فريم ها را ندارند امكاناتي را فراهم نمود مي توان به صورت زير يك HTML تهيه كرد.
.
.
.
<Frameset …>
</ Frameset>
<NoFrames>
متن مورد نظر براي مرورگرهايي كه امكان كار با فريم ها را ندارند ويك Link براي رفتن به صفحه بدون فريم
</ NoFrames>
براي ايجاد سايت دو نسخه از آن نياز است يا بهتر است دو نسخه باشد.
1- نسخه اول كه نسخه آزمايشي بوده و بر روي كامپيوتر محلي خود ساخته ميشود. هر گونه تغيير وتحولي را ابتدا روي اين نسخه انجام داده و وقتي صفحه اي كامل شد يا بخشي از سايت تكميل گرديد به مكان اصلي آن سرور Remote است انتقال دهيد.
2- نسخه نهايي كه در سرور اصلي قرار ميگيرد و بازديدكنندگان ازآن استفاده مي كنند در بيشتر حالات اين سرور دور از دسترس قرار دارد.
براي انتقال نسخه آزمايشي يا صفحات تكميل شده به سرور اصلي (remote) از FTP استفاده مي شود.
ابزارهايي كه معمولا براي FTP استفاده ميكنند شامل WS-FTP و Cute-FTP و Windows Commander و Explorer ويندوز مي باشد.
بعضي از برنامه ها مانند Front Page و remote r مي تواند يك سايت remoteرا خوانده و ساختار آن را ايجاد نموده و سپس با تغيير هر فايل آن را به سرور اصلي FTP كنند.
براي FTP كردن حداقل سه پارامتر زير نيازاست.
1- نام سرور ftp مانند ftp.yahoo.com
2- نام كاربر Username
3- رمز عبور Password
ابزارهاي مورد استفاده در طراحي صفحات
معروفترين ابزارها براي ساخت فايلهاي css , javascript , asp , html وغيره موارد زير هستند. البته FrontPage در زمينه html توانايي زيادي داردولي در بقيه موارد ضعف دارد.
1- Front Page
2- Dreamweavermx
3- Code Charge
4- ASP Edite
كدام مرورگر ؟
با بررسي هاي انجام شده و آمارهاي موجود در اينترنت بيشترين مرورگر استفاده شده در اينترنت Internet Explorer با نسخه هاي 6.0 , 5.0 , 4.0 مي باشد كه حدود 75% كاربران را پوشش مي دهد. 25% بقيه را Netscape و Opera وغيره هستند.
با توجه به اينكه javascript و استفاده از امكانات خاص اسكريپت نويسي (DOM) در اين مرورگرها متفاوت است لذا بنظر مي رسد اگر بنظر مي رسد اگر سرمايه گذاري براي Internet Explorer شود نتيجه بهتري خواهد داشت . البته بعضي ها كدهاي javascriptرا براي انواع مرورگرها مي نويسند تا بر روي همه آنها كار كند . اين زحمت زيادي به دنيال خواهد داشت.
بعضي از tag هاي خاص كه در بخش <HEADE> صفحه html قرار مي گيرند.
1- تك META يكي از tag هاي مهم اين بخش از صفحه Html است . اولين نوع آن ، نوع كاراكترهاي درون صفحه را تعيين ميكند.

<META HTTP-EQUIV = "Content-Type" CONTENT="text/html;charset= window-1256">

سبب مي شود صفحه html داراي داده هاي سازگار با Codepage استاندارد 1256 شود. اين كد پيج براي صفحاتي بكار مي روند كه داده هاي آن فارسي يا عربي استاندارد Unicode هستند.
براي تايپ اين نوع حروف مي توانيد از ويندوزها ي2000 يا XP كه صفحه كليد فارسي يا عربي دارند استفاده كنيد. چنانچه به اين روش عمل كنيد ، صفحات توليد شده شما بر روي هر نوع كامپيوتري كه ازسيستم Unicode استاندارد پشتيباني مي كنند قابل ديدن خواهد بود بدون آنكه نياز به نصب فونت باشد براي صفحات انگليسي از windows-1252 استفاده مي شود.
2- مدل دوم META سبب ميشود تا صفحه شما در موتورهاي جستجو مانند yahoo يا google بدرستي ايندكس شوند و هنگام جستجو جوابهاي صحيح توليد شود.

<META NAME ="KEYWORDS" LANG= "EN" CONTENT="food , travel , family">

آنچه درون CONTENT مي آيد كليدواژه هاي مربوط به متون صفحه است.
3- مدل سوم META سبب مي شود صفحه شما بطور اتوماتيك بعد از n ثانيه مجدد Load شده و Refreshشود.

<META NAME = "REFRESH" CONTENT="10 , http://MySite/file.htm">

شماره 10 تعيين مي كند ككه بعد از 10 ثانيه صفحه جاري ، جاي خود را به صفحه اي با آدرس URL ذكر شده بدهد.
در پايان اميد است اين نكات به طراحي شما كمك كرده باشد.
با آرزوي موفقيت

کيفيت مقاله :
عالی خوب متوسط ضعيف


Cascading Style Sheet (CSS) چيست؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۸۵ مراجعه امروز
۵۰۰۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Cascading Style Sheet (CSS) چيست؟
نويسنده : عباس مقدس نجفيان
موضوع : HTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۲/۱۱/۱۳۸۱ اين مقاله ۲۲۳۴ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.
تمامي tag هاي HTML خواصي دارند كه بوسيله آنها مي توان نحوه نمايش آنها را تغيير داده يا تنظيم نمود . از جمله اين خواص (Attributes) ميتوان به فونت ، رنگ ، مكان نمايش وغيره اشاره نمود. اين attribute ها از سه طريق زير قابل تعريف هستند.
1- هنگامي كه HTML tag نوشته مي شود attribute هاي آن ذكر شود. مثال:

<IMG SRC = "cone . gif">

2- بوسيله CSS بخشي از attribute ها قابل تنظيم هستند. مثال:

<p style = "font family : Arial" > This is a sample </p>

اين روش به سه شكل قابل اجرا مي باشد كه بعدا توضيح داده مي شود.
3- بوسيله javaScript وبرنامه نويسي مي توان خواص (Property) ها هر شي موجود در صفحه HTML را تغيير داد. با توجه به اينكه در محيط مرورگر (browser) همه چيز به عنوان شي (object) در نظر گرفته مي شود لذا قابليت اشاره به خواص شي به خواندن يا نوشتن آنها فراهم شده است. اين بحث به Document Object Model (DOM) معروف است كه در فصل javaScript توضيح داده خواهد شد.
مزاياي استفاده از CSS چيست؟
1- سبب مي شود تا به راحتي بتوان شكل و شمايل صفحه HTML يا تمام صفحات يك سايت را با سرعت هر چه بيشتر تغيير داد. به عبارت ديگر ميتوان يك مركز كنترل به وجود آورد.
2- اگر از CSS به نحو خوبي استفاده شود سبب كاهش حجم صفحات سايت و كمتر شدن حجم download صفحات براي كاربران مي گردد. در نتيجه سرعت سايت بيشتر شده و كارايي آن افزايش مي يابد.
3- ميتواند سرعت توليد صفحات HTML را افزايش دهد. اين كار بوسيله ساخت الگوها(Template) و استفاده مكرر از آنها عملي مي شود.
CSS و Browser
مرورگرهاي موجود كه عمدتا Internet Explorer و Netscape و Opera هستند سعي كرده اند تا از استانداردهاي CSS1 و CSS2 استفاده كنند.ولي بهر حال اختلافاتي با هم دارند. آنچه كه از اين به بعد توضيح داده مي شود در ارتباط با IE 4.0 به بعد مي باشد. اين نوع مرورگرها ونسخه هاي بعدي آن بيشترين نوع مرورگرهاي استفاده شده در سطح اينترنت هستند.
انواع Style Sheets
CSS به سه روش زير مي تواند با صفحات HTML بكار رود.
1- Inline Style Sheets ، در اين حالت style مورد نظر به يك tag خاص اضافه شده و تنها بر روي محتويات همان tag تاثير مي گذارد. اين نوع Style Sheets از اولويت اول برخوردار بوده و دو روش ديگر را خنثي مي كند. مثال :
<p style ="font: 12pt Arial">
Inline Style Sheets Test
</p>

2- Embeded Style Sheets : در اين حالت CSS ها در يك محل در فايل HTML جمع شده ومي تواند تعاريف ساده يا پيچيده داشته باشد. ميزان تعريف CSS ها بستگي به نياز شما دارد . اين روش از اولويت كمتري نسبت به روش قبل برخوردار بوده ولي اولويت آن نسبت به روش بعدي (Linked Style Sheets) بيشتر است و تعاريف آن را خنثي مي كند. مثال:
<style>
H1 {font : 28pt Arial Black }
H2 {font : 20pt Arial Red }
P {font : 10pt Times }
</style>

اين style در بخش <HEADE>…</HEADE> صفحه HTML قرار مي كيرد.
3- Linked Style Sheets: در اين روش تمام تعاريف CSS در فايلي با پسوند (.CSS) قرار ميگيرد. سپس هر فايلي كه نيازبه اين تعاريف دارد آنرا بصورت زير به خود متصل مي كند

<link rel = "style sheet" href = "My Style.css" type = "text/css">

اين tag در محدوده <HEADE>…</HEADE> صفحه HTML مورد نظر قرار مي گيرد .
فايل My Style.css ميتواند مشابه زير باشد.

BODY{background : # FFFFFF : color : # FFFFOO : margin-top : 10px ; margin-left : 0.75in ; margin-right : 0.75in}
P { font-family : 12pt Arial , Times , Serif ;}
H1 {Color : # OOFFFF }
H2 {Color : # FFOOFF }
H3 {Color : # OOFFOO }

نحوه نگارش CSS
براي نوشتن يك تعريف Style Sheets بايستي اول براي مرورگر تعيين نمود كه اين تعاريف را بر روي كدام tag يا كدام دسته از tag ها اعمال كند. لذا انتخاب كننده (Selector) مطرح ميشود.
مدل اول از Selector ها اصطلاحا type selector مي نامند. در اين حالت بر روي عناصر خاصي از HTML اعمال مي شوند. بعنوان مثال

H1 {font family : Arial }
H2 {font-color : blue }
P {font-family : Times , Serif , font-size : 10pt

در اين مثالها P, H1 , H2 بعنوان Selector هستند وآنچه كه درون علامتهاي {} است تعاريفي است كه بر روي tag هاي نوع Selector اعمال مي شود. مثالهاي ديگر :

H1, H2 , H3 {font-family : Arial , Times , Serif}
H4 , H5 , H6 {Color : blue ;font-weight : bold}

مدل دوم از Selector ها را اصطلاحا Attribute Selector مي نامند . در اين حالت يكسري Attribute هايي به tag هاي HTML اضافه شده وبراي آن tag كار خاصي انجام ميدهد. در اين مثال ALT يك Attribute است كه به IMG tag اضافه شده است.

<IMG SRC = "jpboton.jpg" ALT = "Button for Jumping">

از ديگر حالتهاي اين مدل مي توان به ID و CLASS اشاره كرد.
Class Attribute گروهي از عناصر هستند كه همه آنها داراي مقدار مشابهي براي Attribute CLASS خود مي باشند. هر tag اي كه در محدوده و باشد مي تواند يك كلاس داشته باشد. وقتي به يك عنصر ، كلاس داده شود تمام نمونه هاي آن عنصر مي توانند از كلاس استفاده كنند. مثال:

<style>
Spanish {font-family :"American Type writer" , zar}
English {font-family : Arial , Helvetica , Sanserif }
<style> <P class = "spanish"> Estas palabras se expersen en Espanoles </p>
<P class = "english"> This word are expressed in English </p>

اين نوع از كلاسها ميتوانند به هر tag اي اضافه شوند.

<H1 class = "Spanish"> Bienvenidos </H1>
<H3 class = "English"> Welcome </H3>

چنانچه بخواهيد انواعي از كلاسهاي يك tag خاص (مثلا H1) را داشته باشيد مي توانيد به صورت زير عمل كنيد.

H1.blue {font-color : blue}
H1.red { font-color : red}
H1.green { font-color : green}

و به صورت زير ميتوان از آنها استفاده كرد.

<H1 class = "blue"> Water </H1>
<H1 class = "red"> Blood </H1>
<H1 class = "green"> Leaf </H1>

براي آنكه بتوان يك كلاس را به چندين tag هاي مختلف اعمال كرد بايستي از ذكر نام tag هنگام تعبيف كلاس خود داري كرد. در مثال زير اولين اولين كلاس فقط به tag هاي H3 اعمال مي شود ولي كلاس دوم به هر نوع tag اي كه از اين كلاس استفاده كند اعمال مي گردد.

H3. English {font-family : Arial , Times , Serif ; font-size : 12pt}
. English { font-family : Arial , Times , Serif ; font-size : 12pt}

بهترين مدل از CSS در كلاس پياده سازي مي شود و قدرت انعطاف زيادي دارد. به راحتي ميتواند طداحي را تغيير دهد.
ID Attribute طراحي شده است تا فقط بر روي يك عنصر اعمال شود. بايستي يك ID selector را همانند روش class تعريف كرد ولي در ابتداي تعريف آن يك علامت # و به دنبال آن نام مي آيد.

# reserved {color : black}
<em id ="reserved">word</em>

در مورد كلاسها يك نوع خاص به نام شبه كلاس Pseudo-class نيز وجود دارد. اين نوع از كلاسها ، اشاره به زير مجموعه هاي يك tag مي كنند. مثلا در مورد لينك (A) شبه كلاسهاي زير وجود دارد.

A : link {color : green }
A : visited {color : red }
A : active {color : blue }

مدل ديگري ازSelector ها را اصطلاحا Contextual Selector مي نامند. گاهي اوقات لازم است يك style هنگامي به يك عنصر اعمال شود كه داراي عنصر parent خاصي باشد.
مثلا مي خواهيد به <P>هاي درون <DIV> يك style خاصي اضافه كنيد. كه نبايستي به <P>هاي خارج از <DIV> اضافه شود. اين مدل از Selector ها به صورت زير تعريف مي شوند.
به تمام tag هاي <P> اعمال مي شود . P{font-Size : 12pt}
فقط به tag هاي <P> درون <DIV> اعمال مي شود. DIV P{ font-Size : 10pt}
به متون EM درون OL و درون P اعمال مي شود. P OL EM { font-weight : bold}
به متون EM درون H1 يا درون H2 اعمال ميشود. H1 EM , H2 EM {font-color : red}
در مورد attribute , font هاي زير وجود دارد.

Font-Style , font-weight , line-height , font-variant , font font-family, font-Size ,

در مورد رنگ حالتها زير قابل استفاده است.

H1 { font-color : rgb (80 , 200 , 200)}
H1 { font-color : rgb (# 5DC8FA)}
H1 { font-color : rgb (31% , 78% , 98%)}
H1 { font-color : # 2030FF}
آدرس چند سايت در ارتباط با طراحي وب

www.htmlhelp.com
www.mvd.com
www.webreference.com
www.tappi.org
www.fontsite.com
www.virtual-coach.com
جدول زير ارث بري برخي از CSS attribute را نشان مي دهد. آنهايي كه ارث مي برندچنانچه در محدوده يك parent tag (مانند BODY) قرار گيرند از آن ارث برده و خود را هماهنگ مي كنند.
موارد كه ارث مي برند شامل

Color , font , font-family, font-Size , font-weight , line-height , font-variant ,
Letter-spacing , line-height , text-align , text-internet , text transform
Word-spacing , list-style , list-style-position , list-style-type , white-space.
مواردي كه ارث نمي برند شامل :
Margin , margin-left (-right ,-top , -bottom), padding , padding-left (-right ,-top , -bottom), text-decoration , vertical-align , background , background-attachment , background-color , background-image , background-position , background-repeat , border , border-color , border-left (-right ,-top , -bottom) , border-left-width (-right- ,-top- , -bottom-) , border-style , border-width , clear , display , float , height , width.
توليد CSS ها بوسيله ابزارها
برنامه هاي مختلفي هستند كه ابزار توليدCSS را دارند. از مهمترين آنها موارد زير هستند.

1- Microsoft Front Page
2- Macromedia Dream Weaver
3- Adobe Go Live
4- Web Express
5- Home Site
6- Hot Metal
7- Hot Dog
8- Adobe Page Mill
9- Symantec visual page
10- Top Style Pro

کيفيت مقاله :
عالی خوب متوسط ضعيف


MSN مسنجر چگونه کار می کند؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۵۱ مراجعه امروز
۴۷۶۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
MSN مسنجر چگونه کار می کند؟
نويسنده : مديريت سايت
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۲/۱۱/۱۳۸۱ اين مقاله ۳۶۲۲ بار مطالعه شده است
۸۰ نفر تا به حال به اين مقاله رای داده اند.
سلام
در اين سري مقالات ميخواهم پروتکل ارتباطي يک سرويس پيام رساني معروف به نام MSN مسنجر را به شما معرفي کنم. مطمئنا" همه شما MSN مسنجر را مي شناسيد و از آن استفاده مي کنيد. اين مقاله و چند مقاله بعدي در مورد نحوه کار MSN مسنجر و برقراري ارتباط آن با سرور اصلي و کاربران مي باشد. اميدوارم که مورد استفاده قرار بگيرد.

اطلاعات سوکت
MSN مسنجر از TCP استفاده مي کند و مسنجر شما با پورت شماره 1863 با سرور ارتباط برقرار مي کند.

سرورهاي MSN مسنجر
سه نوع سرور در اين پروتکل مورد استفاده قرار مي گيرد :
Dispatch Server-1
اين سرور با کاربران دائما در ارتباط است و وظيفه برقراري ارتباط با کاربران را بر عهده دارد و مشخصات آنها را بدست مي آورد از طريق آدرس messenger.hotmail.com on port 1863. و پورت 1863 مي توان به اين سرور دسترسي پيدا کرد.
2- Notification Server
اين سرور وظيفه نگهداري وضعيت کاربران , ارسال وضعيت , ارسال پيام , درخواست چت , هشدار دريافت ايميل و ... را بر عهده دارد.
3- Switchboard Server
اين سرور دروازه اصلي برقراري ارتباط کاربران در اتاقهاي گفتگو chat مي باشد. همچنين در زمان ارسال فايلها نيز از اين سرور استفاده مي گردد. وظيفه انتقال اطلاعات اتاقهاي گفتگو به عهده اين سرور است.

پروتکل برقراري ارتباط
MSN مسنجر از طريق ارتباط TCP با سرور ارتباط برقرار مي کند و تمامي اطلاعات خود را به صورت Text رد و بدل مي کند. يعني دستورات را به صورت متن معمولي ارسال و دريافت مي کند . البته نحوه ارسال اطلاعات و دريافت آن متفاوت مي باشد.

دستورات
همه دستورات در MSN مسنجر به صورت 3 کاراکتري هستند. همه پارامترها بعد از دستور اصلي مي آيند و هر پارامتر با کاراکتر فاصله مشخص مي گردد.

پيامها
دستور ارسال پيامها تنها دستوري هست که با ديگر دستورات اندکي تفاوت دارد. نام دستور فوق
MSG مي باشد. در هنگام ارسال دستور MSG در اولين سطر ارسالي از اطلاعات دستور ارسال شده و در سطرهاي بعدي به ترتيب Mime ها و نوع کاراکتر ست , در سطرهاي بعدي متن پيام مي باشد که مي تواند شامل هر کارکتري باشد. سطر دوم در ارسال يک پيام MIME-Version: 1.0
مي باشد.سطر سوم در ارسال يک پيام Content-Type: */*; charset=UTF-8, مي باشد. در سطرهاي بعدي متن پيام ارسال مي گردد.

تغييرات وضعيت
اين دستور که به صورت CHL ارسال مي گردد فقط از طرف کاربران MSN مسنجر ارسال مي گردد و هيچ وقت از طرف سرور ارسال نمي شود. اين دستور بعد از ارسال هر پيام و بعد از هر تغيير در وضعيت ارسال مي گردد.

خطاها
وقتي که يک دستور اشتباه براي سرور ارسال گردد يا يکي از روالهاي کاري به درستي انجام نگيرد سرور يک کد خطاي 3 رقمي را به کاربر بر مي گرداند که نشان دهنده نوع خطا مي باشد.
ليست خطاها ارسالي از طرف سرور عبارتند از :
• 200 Syntax error
• 201 Invalid parameter
• 205 Invalid user
• 206 Domain name missing
• 207 Already logged in
• 208 Invalid username
• 209 Invalid fusername
• 210 User list full
• 215 User already there
• 216 User already on list
• 217 User not online
• 218 Already in mode
• 219 User is in the opposite list
• 280 Switchboard failed
• 281 Transfer to switchboard failed
• 300 Required field missing
• 302 Not logged in
• 500 Internal server error
• 501 Database server error
• 510 File operation failed
• 520 Memory allocation failed
• 540 * Wrong CHL value sent to server
• 600 Server is busy
• 601 Server is unavaliable
• 602 Peer nameserver is down
• 603 Database connection failed
• 604 Server is going down
• 707 Could not create connection
• 711 Write is blocking
• 712 Session is overloaded
• 713 Too many active users
• 714 Too many sessions
• 715 Not expected
• 717 Bad friend file
• 911 Authentication failed
• 913 Not allowed when offline
• 920 Not accepting new users
• 924 * Passport account not yet verified

کد شناسايي
هر کاربر MSN مسنجر براي برقراري ارتباط نياز به يک کد ارتباطي خاص براي ارتباط يا درخواست خويش باشد. اين کد يک عدد بين 0 تا 4294967295 مي تواند باشد. سرور از روي کد ارسال توسط هر کاربر در زمان پاسخ مي تواند تشخيص بدهد که هر درخواست براي چه کسي بوده است. اين شما شناسايي هميشه بعد از نام دستور 3 حرفي و قبل از پارامترها قرار مي گيرد.

MD5
MD5 يک الگوريتم رمز گذاري مي باشد که در MSN مسنجر و بسياري از نرم افزاري ديگر مورد استفاده قرار مي گيرد. هر وقت که کلمه عبور ارسال مي گردد قبل از ارسال با الگوريتم MD5 رمزگذاري شده و سپس ارسال مي گردد. خروجي هميشه با حروف کوچک و به صورت هگز مي باشد. 6f3963009fc8a9d2b2ff137da0905c55 يک نمونه از کلمه عبور رمز شده مي باشد

کيفيت مقاله :
عالی خوب متوسط ضعيف


آشنايى با FastReport ساده‌ترين و قوى‌ترين كمپوننت گزارش‌سازى ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۹ بيننده در حال حاضر
۱۸۸۴ مراجعه امروز
۴۴۷۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آشنايى با FastReport ساده‌ترين و قوى‌ترين كمپوننت گزارش‌سازى
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۲۳/۱۱/۱۳۸۱ اين مقاله ۵۵۱۱ بار مطالعه شده است
۹۴ نفر تا به حال به اين مقاله رای داده اند.
كمي تاريخچه
FastReport قبلا با نام FreeReport عرضه مي شد و يك محصول رايگان بود. ولي بعدها به FastReport تغيير نام پيدا كرد و به صورت تجاري عرض گرديد. البته هنوز كمپوننت FreeReport توسعه مي يابد و نسخه هاي جديدتر آن را از سايت www.fastreport.com يا www.fastreport.ru مى‌توانيد داون لود كنيد.

آشنايي كلي با شكل گزارش سازي در FastReport
اين كمپوننت يك محيط Report Desinger در اختيار شما قرار مي دهد كه با استفاده از آن مي توانيد Reportها را طراحي كنيد، اسكريپت نويسي كنيد و يا فرم هاي جديد براي انتخابي كردن گزارش خود ايجاد كنيد. براي وارد شدن به اين Report Desinger بايد از كمپوننت TfrReport استفاده كنيد. كافي است يك كمپوننت TfrReport روي فرم بگذاريد و روي آن دابل كليك كنيد يا كليد سمت راست را زده و گزينه Design Report را انتخاب كنيد. ممكن است اين محيط كه موسوم به Desinger است در ابتدا كمي شلوغ به نظر بيايد ولي در انتهاي اين مقاله آموزشي كاملا با استفاده از اين Desinger آشنا خواهيد شد.
شما مي توانيد گزارش هاي خود را در فايلهايي با پسوند frf. ضبط كنيد و در موقع نياز هر كدام از آنها را Load نماييد و همچنين اگر برنامه شما تنها يك گزارش دارد مي توانيد آن گزارش را در خود فايل EXE نگهداري كنيد.

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

از ToolBar سمت چپ گزينه Insert rectangle object را انتخاب كنيد. آيكن اين گزينه شبيه به آيكن كمپوننتMemo است.
مىبينيد كه وقتى اين كمپوننت را در محل مربوطه قرار مى‌دهيد پنجره اى باز مي شود:
همانند شكل در قسمت بالا تايپ كنيد: "سلام دوستان!" و سپس اين پنجره را ببنديد.
خوب! اولين گزارش خودمون رو ساختيم. حالا به سادگى گزارش را Save كنيد و اسم اون رو بگذاريد Test. اين فايل رو در همون جايى ضبط كنيد كه پروژه تون در اونجا Save شده است.
حالا Designer رو ببنديد و يك Button روي فرمتون بگذاريد و و در اونت OnClick آن كد زير رو بنويسيد:
frReport1.LoadFromFile('Test.frf');
frReport1.ShowReport;
خوب! كار ساخت اولين گزارشمون تمام شد. ما خيلي ساده در ابتدا گزارشى را كه قبلا ساخته بوديم Load كرديم و بعدش هم از متد ShowReport براى نمايش گزارش استفاده كرديم. البته مى‌توانستيم از متد PrintPreparedReportDlg براى چاپ مستقيم گزارش بدون نمايش پيش‌نمايش يا Preview استفاده كنيم.
نكته: در صورتى كه بخواهيم ميتوانم با True كردن پراپرتي StoredInDFM گزارش را در EXE خود ضبط كنيم. در آن صورت لازم نيست گزارش را ضبط كنيم و همچنين احتياجى نيست كه آن را در كد Load بكنيم.
اين حالت تنها وقتى مفيد است كه برنامه شما فقط يك گزارش داشته باشد.
خوب! ما تا حالا اصول استفاده از FastReport رو ياد گرفتيم. در باقي اين مقاله آموزشى گزارش‌هاى پيشرفته‌ترى مى‌سازيم و آرام آرام شما با FastReport احساس راحتى مى‌كنيد.

ساخت يك گزارش ديگر
خوب ... يك كمپوننت TTable رو از پالت BDE روى فرمتون قرار دهيد و پراپرتي DatabaseName آن را برابر DBDEMOS و پراپرتى TableName را برابر Biolife قرار دهيد.
يك كمپوننت TfrReport و همچنين يك كمپوننت TfrDBDataSet روى فرم قرار دهيد و پراپرتى DataSet آن را برابر نام Table1 قرار دهيد و پراپرتى DataSet كمپوننت TfrReport را برابر frDBDataSet1 قرار بدهيد. حالا با كليك بر روى كمپوننت frReport1 وارد محيط Designer شده و Tools>Tools>Insert DB Fields را انتخاب كنيد.
خوب شما انتخاب كنيد و آن را روي فرم قرار دهيد. پنجره اي شبيه به شكل زير نمايش داده مى‌شود:
تمام فيلدها را انتخاب كنيد و OK را بزنيد.....
خوب تقريبا كارمان تمام است. اگر خوب نگاه كنيد مي بينيد كه دو باند روى فرم گزارش اضافه شد كه يكى Page Header و ديگرى Master Data نام دارد. File>Preview را انتخاب كنيد و ببينيد گزارش شما چه شكلى خواهد بود. گزارش خودتان را Save كنيد و از روشى كه قبلا ذكر شد براى نمايش گزارش در زمان اجرا يا Run-Time استفاده كنيد.

ساخت گزارش‌هاى پيشرفته‌تر
به موارد زير توجه كنيد:
1- اگر بخواهيد از كمپوننتهايى مثل RichEdit - Chart - CheckBox و ... در گزارش خود استفاده كنيد بايد كمپوننت مربوطه را روى فرم برنامه خود قرار دهيد.
2- اگر بخواهيد امكان Export گزارش به فرمتهاى HTML - Text - CSV يا DOC را به برنامه خود بدهيد بايد كمپوننت مربوطه را روى فرم برنامه خود قرار دهيد.
3- اگر بخواهيد گزارش Master-Detailى بسازيد بايد از دو باند Master data و Detail data استفاده كنيد.
4- اگر بخواهيد مجموع مقادير يك فيلد رو در انتهاى يك گزارش بنويسيد بايد از يك باند Master footer استفاده كنيد و گزينه Insert rectangle object را انتخاب كنيد. سپس Insert Expression را انتخاب كنيد. Functions را انتخاب كنيد و از تابع Count براى انجام اين كار استفاده كنيد. همچنين مى‌توانيد Variables را انتخاب كنيد و از مواردى همچون شماره صفحه، كل صفحات، تاريخ و ... استفاده كنيد.

اميدوارم اين مقاله بتونه هر چند اندك شما رو با FastReport آشنا كنه
پايان
کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از Flash در دلفى ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۹ بيننده در حال حاضر
۱۸۸۷ مراجعه امروز
۴۴۷۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از Flash در دلفى
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۲۴/۱۱/۱۳۸۱ اين مقاله ۹۲۷۴ بار مطالعه شده است
۲۱۰ نفر تا به حال به اين مقاله رای داده اند.
Flash يكي از فرمتهاي محبوب وب است و به راحتي مي توان براي ساخت Interfaceها در برنامه از آن استفاده كرد. بعضي از برنامه نويسان معتقدند استفاده از Flash سبب سنگين شدن برنامه، وابستگي برنامه به ActiveX فلش، امكان نداشتن تبادل اطلاعات بين Flash و دلفي و مشكلات ديگري مي شود.
در اين مقاله خواهيد ديد كه به راحتي تمامي اين مشكلات را مي توانيد رفع كنيد.

نصب ActiveX فلش
براي نصب ActiveX فلش به Component>Import ActiveX Control برويد. در ليست مربوطه به دنبال Shockwave Flash بگرديد. در صورتي كه آن را پيدا نكرديد. دكمه Add را زده و به آدرس زير برويد:
WIN_DIRECTORY\System32\Macromed\Flash
و فايل Flash.ocx را انتخاب كنيد و سپس Install را بزنيد.
خوب ... تا به اينجا كار نصب اكتيوايكس فلش تمام است. كمپوننت مربوطه را ميتوانيد در پالت ActiveX پيدا كنيد.
نكته: در صورتي كه شاخه مذكور در كامپيوتر شما وجود ندارد، احتمالا شما Flash Player را نصب نكرده‌ايد.
البته نگران نباشيد، با شيوه اي كه در اين مقاله ذكر شده كاربر شما بدون نياز به نصب Flash Player مي تواند برنامه شما را اجرا كند.

استفاده از اكتيوايكس فلش
اكتيوايكس فلش را مي‌توانيد در پالت ActiveX پيدا كنيد. آن را روي فرمتان قرار دهيد. از پراپرتيMovie ميتوانيد براي Load كردن فايل SWF خود استفاده كنيد.
به باقى پراپرتى‌هاى اكتيوايكس فلش دقت كنيد:
(البته توضيحات پراپرتى‌ها را به صورت انگليسى آورده‌ام. چون نوشتن آنها به صورت فارسى زياد جالب نيست. به خاطر اينكه پر از لغاتى هستند كه ترجمه‌شون غير ممكن است.)
ReadyState (get only)
0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete.

TotalFrames (get only) Returns the total number of frames in the movie. This is not available until the movie has loaded. Wait for ReadyState = 4.

FrameNum (get or set) The currently displayed frame of the movie. Setting this will advance or rewind the movie.

Playing (get or set) True if the movie is currently playing, false if it is paused.

Quality (get or set) The current rendering quality (0=Low, 1=High, 2=AutoLow, 3=AutoHigh). This is the same as the QUALITY parameter.

ScaleMode (get or set) Scale mode (0=ShowAll, 1= NoBorder, 2 = ExactFit). This is the same as the SCALE parameter.

AlignMode (get or set) The align mode consists of bit flags. (Left=+1, Right=+2, Top=+4, Bottom=+8). This is the same as the SALIGN parameter.

BackgroundColor (get or set) Override the background color of a movie. An integer of the form red*65536+green*256+blue use -1 for the default movie color.

Loop (get or set) True if the animation loops, false to play once. Same as the MOVIE parameter.
Movie (get or set) The URL source for the Flash Player movie file. Setting this will load a new movie into the control. Same as the MOVIE parameter.

متدها:

Play() Start playing the animation.

Stop() Stop playing the animation.

Back() Go to the previous frame.

Forward() Go to the next frame.

Rewind() Go to the first frame.

SetZoomRect(int left, int top, int right, int bottom) Zoom in on a rectangular area of the movie. Note that the units of the coordinates are in twips (1440 units per inch). To calculate a rectangle in Flash, set the ruler units to Points and multiply the coordinates by 20 to get TWIPS.

Zoom(int percent) Zoom the view by a relative scale factor. Zoom(50) will double the size of the objects in the view. Zoom(200) will reduce the size of objects in the view by one half.

Pan(int x, int y, int mode) Pan a zoomed in movie. The mode can be: 0 = pixels, 1 = % of window.

نصب اكتيوايكس فلش روي كامپيوتر كاربر
براي اين كه كاربر نهايي بتواند از برنامه شما استفاده كند بايد اكتيوايكس فلش را داشته باشد. در واقع شما بايد اكتيوايكس مربوطه را براي او نصب كند. روش كار به اين گونه است كه شما بايد چك كنيد كه آيا كاربر نهايي اكتيوايكس فلش را بر روي دستگاه خود نصب كرده است يا نه و در صورتي كه وي اين اكتيوايكس را ندارد برنامه شما بايد به طور اتوماتيك آن را نصب كنيد.
براي پياده سازي اين روش ما بايد در ابتدا OCX فلش را با استفاده از Resourceها در فايل Exe خود مخلوط كنيم. در صورتي كه شما با Resourceها آشنايي نداريد نگران نباشيد. مراحل زير را انجام دهيد و باقي كار را به دلفي بسپاريد: 1- يك فايل Text بسازيد و اسم آن را SWFActivex.rc بگذاريد
2- خطوط زير را در آن قرار دهيد:
FlashOCX EXTRA Flash.ocx
و فايل Flash.ocx را از مسيري كه قبلا ذكر شد در شاخه پروژه خود قرار دهيد.
3- آن را ضبط كنيد و با استفاده از BRCC32.EXE كه در شاخه Bin محل نصب دلفي وجود دارد، آن را كامپايل كنيد. (خط زير را در Command Line تايپ كنيد يا به سادگي فايل SWFActivex.rc را بر روي فايل BRCC32.EXE دراگ (Drag) كنيد.
BRCC32.EXE MyExeRes.rc
خوب حالا شما يك فايل Resource كامپايل شده داريد به نام SWFActivex.res داريد.
4- خطوط زير را در در سورس كد فرم اصلي خود قرار دهيد:
...
...
implementation
...
...
...
{$R *.dfm}
{$R SWFActivex.RES}
5- حالا اين تابع را به كد خود اضافه كنيد:
function GetResourceFile(S : string; FilePath : string) : Boolean;
var
Res : TResourceStream;
begin
Result := True;
if S <> '' then
begin
if FindResource(hInstance, PChar(S), Pchar('EXTRA')) = 0 then
begin
Result := False;
Exit;
end;
try
Res := TResourceStream.Create(hInstance, S, Pchar('EXTRA'));
except
Result := False;
Exit;
end;
if FileExists(FilePath) then DeleteFile(FilePath);
try
Res.SaveToFile(FilePath);
except
Result := False;
end;
Res.Free;
end;
end;

6- اين تابع را نيز اضافه كنيد:
function GetSystemDir : string;
var
SysPath : PChar;
begin
GetMem(SysPath, MAX_PATH + 1);
GetSystemDirectory(SysPath, MAX_PATH);
Result := StrPas(SysPath)+ '\';
FreeMem(SysPath, MAX_PATH + 1);
end;

7- خوب! حالا بگذاريد به مهمترين قسمت قضيه يعني Register كردن OCX مربوطه بپردازيم. در ابتدا يونيت ActiveX را به ليست uses خود اضافه كنيد. سپس تابع زير را نيز به سورس خود اضافه نماييد.
function RegisterOCX( OCXFileName : string; Flag : Boolean) : Boolean;
var
OCXHand: THandle;
RegFunc: TDllRegisterServer;
OCXFileNamePtr : PChar;
begin
Result := True;
if not FileExists( OCXFileName ) then
begin
Result := False;
Exit;
end;
GetMem(OCXFileNamePtr, Length(OCXFileName) + 1);
StrPCopy(OCXFileNamePtr, OCXFileName);
OCXHand:= LoadLibrary(OCXFileNamePtr);
FreeMem(OCXFileNamePtr, Length(OCXFileName) + 1);
OCXFileNamePtr := nil;
if OCXHand = 0 then
begin
Result := False;
Exit;
end;
if Flag then
RegFunc:= GetProcAddress(OCXHand, 'DllRegisterServer')
else
RegFunc:= GetProcAddress(OCXHand, 'DllUnregisterServer');

if RegFunc = S_OK then
Result := False;

FreeLibrary(OCXHand);
end;

8- اين سه متغيير را نيز به كد خود اضافه كنيد:
var
FilePath : string;
FlashOCX: TShockwaveFlash;

9- تابع زير را نيز اضافه كنيد:
function CreateFlashOCX : Boolean;
var
FilePath : string;
begin
Result := True;
FilePath := GetSystemDir + 'Macromed\Flash\Flash.ocx';
if not GetResourceFile('FlashOCX', FilePath) then
begin
Result := False;
Exit;
end;
try
FlashOCX := TShockwaveFlash.Create(nil);
except
if not RegisterOCX(FilePath, True) then
Result := False
else
try
FlashOCX := TShockwaveFlash.Create(nil);
except
Result := False;
end;
end;
end;

10- كدهاي زير را به انتهاي فايل خود، قبل از .end اضافه كنيد:

initialization
CoInitialize(nil);
if not CreateFlashOCX then
ShowMessage('An Error Occured!' + #13 + 'Program dosent run correctly!');
finalization
if Assigned(FlashOCX) then
begin
try
FlashOCX.Free;
FlashOCX := nil;
except
end;
DeleteFile(FilePath);
end;
CoUninitialize;
end.

end.

11- در اونت OnCreate فرم خودتون به راحتي از كمپوننت مربوطه استفاده كنيد:
FlashOCX.Parent := Form1;
FlashOCX.Movie := ExtractFilePath(Application.ExeName) + 'Main.swf';
FlashOCX.Play;

Resize شدن درست
يكي از مشكلاتي كه ممكن است با اكتيو ايكس فلش پيدا كنيد مشكل Resize شدن است. همه ما مي دانيم كه يكي از مهمترين مزاياي فلش برداري بودن آن است و اين برداري بودن سبب مي شود كه فايل فلش بتواند در هر اندازه به درستي نشان داده شود. ولي متاسفانه فرم خود را در RunTime تغييراندازه مي دهيد فايل Flash تغيير اندازه نمي يابد. در اين جا يك راه حل ساده براي حل اين مشكل بيان شده كه به خوبي كار ميكند. كافي است كمپوننت فلش را در يك پانل قرار دهيد و پراپرتي Align آن را برابر alClient بگذاريد. حالا پراپرتي Anchor پانل خود را به گونه‌اي تنظيم كنيد كه مايل هستيد كمپوننت فلش Resize شود. سپس در اونت OnResize فرم خود، خطوط زير را درج كنيد:
FlashOCX.Parent := nil;
FlashOCX.Parent := Self;

غيرفعال كردن كليك سمت راست
مساله ديگرى كه ذهن بسيارى از برنامه‌نويسان را مشغول مى‌كند منوى Popup فلش است. غيرفعال كردن اين منو بسيار ساده است. كافي است يك كمپوننت TApplicationEvents را روي فرم خود قرار دهيد و كد زير را در اونت OnMessage اين كمپوننت بنويسيد:

if (Msg.message = WM_RBUTTONDOWN) and (Msg.hwnd := FlashOCX) then
begin
PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
Handled := True;
end;

ارتباط بين Flash و دلفى
يكى از مسائل بسيار مهم و اساسى ديگر برقرارى ارتباط بين Flash و دلفي است. فرض كنيد در فايل SWF خود چند Button داشته باشيد و بخواهيد وقتى كاربر روى هر كدام از اين اونتها كليك كرد فرم خاصى باز شود. در اين صورت چه بايد بكنيد. پياده سازى اين كار بسيار ساده است. كافى است در Flash براى هر كدام از دكمه‌هاى خود يك Action تعريف كنيد و از دستور FSCommand استفاده نماييد. از يك مقدار دلخواه مثل fMatn يا fSearch استفاده كنيد و در دلفى نيز از اونت OnFSCommand به صورت زير استفاده كنيد:

if command = 'fMain' then fMain.ShowModal;
if command = 'fSearch' then fSearch.ShowModal;

خوب! فكر كنم با توضيحاتى كه در اين مقاله اومده، قانع شده باشيد كه Flash يكى از بهترين راه حلها براى طراحى Interfaceهاست.
تا مقاله بعد .... به اميد ديدار

کيفيت مقاله :
عالی خوب متوسط ضعيف


اجرا كردن اپلت هاي كنترل پانل ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۸۹۶ مراجعه امروز
۴۴۸۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اجرا كردن اپلت هاي كنترل پانل
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۱۱/۱۳۸۱ اين مقاله ۳۴۰۲ بار مطالعه شده است
۲۱ نفر تا به حال به اين مقاله رای داده اند.
آيا به دنبال راهى مى‌گرديد كه اپلت‌هاى كنترل پانل را از داخل برنامه تان بدون باز كردن خود كنترل پانل باز كنيد؟

آيا احتياج داريد كه كاربرانتان بتوانند تاريخ/زمان سيستم را تغيير دهند، يك مودم اضافه كنند يا تنظيمات مربوط به joystick را تغيير دهند؟ يك راه ساده براي انجام چنين كارهاي بدون اين كه كاربر را مجبور كنيد Control Panel را باز كند وجود دارد. مسئله جالب اين است كه شما مي توانيد از اين روش در هر ويندوزى و يا در يك BATch فايل ساده استفاده كنيد.

اجرا كردن دستور زير در برنامه شما سبب انجام اين حقه خواهد شد (CPL نام فايلهاي اپلت كنترل پانل است. ليستى از اين فايلها را مى‌توانيد در انتهاى اين مقاله پيدا كنيد. مضافا اينكه مي توانيد به دنبال فايلهايى با پسوند CPL در شاخه ويندوز Search كنيد و ليست كامل فايلهاي را بيابيد)

rundll32.exe shell32.dll,Control_RunDLL CPL

به عنوان مثال براى نشان دادن پنجره "تنظيمات تاريخ/زمان" از كد زير استفاده كنيد:

rundll32.exe shell32.dll,Control_RunDLL timedate.cpl

مثال كد دلفي / C++ Builder
 يونيت زير را در پروژه خود قرار دهيد و تابع RunControlPanelApplet را همراه با نام Applet مورد نظرتان صدا كنيد تا باز شود. به عنوان مثال: RunControlPanelApplet( 'timedate.cpl' );

unit open_cpl;

interface

function RunControlPanelApplet(
sAppletFileName : string) : integer;

implementation

uses Windows;

function RunControlPanelApplet(
sAppletFileName : string) : integer;
begin
Result :=
WinExec(
PChar('rundll32.exe shell32.dll,'+
'Control_RunDLL '+sAppletFileName),
SW_SHOWNORMAL);
end;

end.

چگونه نام فايلهاى اپلت را پيدا كنيم؟
 اپلتهاى كنترل پانل پسوند CPL دارند. براى پيدا كردن ليستى از اپلتهاى نصب شده بر روي سيستم خود به شاخه SYSTEM (در ويندوزهاي 95) يا شاخه SYSTEM32 (در ويندوزهاي NT) برويد و به دنبال فايلهايى بگرديد كه پسوند CPL دارند.
در زير ليستي از اپلتهاى عمومى را در ويندوز 95 و ويندوز NT مى‌بينيد:

access.cpl: Accessibility Properties
appwiz.cpl: Add/Remove Programs Properties
desk.cpl: Display Properties
intl.cpl: Regional Settings Properties
joy.cpl: Joystick Properties
main.cpl: Mouse Properties
mmsys.cpl: Multimedia Properties
modem.cpl: Modems Properties
sysdm.cpl: System Properties
timedate.cpl: Time/Date Properties
خوب ديگه! تموم شد....
خوش بگذره!

کيفيت مقاله :
عالی خوب متوسط ضعيف


تبديل خصوصيات فونتها به يك رشته و برعكس ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۹۲۶ مراجعه امروز
۴۵۱۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تبديل خصوصيات فونتها به يك رشته و برعكس
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۱۱/۱۳۸۱ اين مقاله ۲۲۱۱ بار مطالعه شده است
۱۳ نفر تا به حال به اين مقاله رای داده اند.
تبديل خصوصيات فونتها به يك رشته و برعكس

بعضى اوقات ضرورى است كه خصوصيات يك Object خاص را به شكل string يا رشته داشته باشيم. به عنوان مثال، اگر يك برنامه به كاربر اجازه تغيير فونت را بدهد، برنامه شما بايد اين تغييرات را در Registry ضبط كند؛ در آن صورت شما بايد اين تنظيمات را به عنوان رشته ذخيره كنيد. دو تابع زير به شما اجازه مى‌دهد كه خصوصيات يك Object فونت را به رشته تبديل كنيد و آنگاه آن راشته را به يك Object فونت تبديل نماييد.
const
  csfsBold      = '|Bold';
  csfsItalic    = '|Italic';
  csfsUnderline = '|Underline';
  csfsStrikeout = '|Strikeout';

//
// Expected format:
//   "Arial", 9, [Bold], [clRed]
//
procedure StringToFont(
  sFont : string; Font : TFont );
var
  p      : integer;
  sStyle : string;
begin
  with Font do
  begin
    // get font name
    p    := Pos( ',', sFont );
    Name :=
      Copy( sFont, 2, p-3 );
    Delete( sFont, 1, p );

    // get font size
    p    := Pos( ',', sFont );
    Size :=
      StrToInt( Copy( sFont, 2, p-2 ) );
    Delete( sFont, 1, p );

    // get font style
    p      := Pos( ',', sFont );
    sStyle :=
      '|' + Copy( sFont, 3, p-4 );
    Delete( sFont, 1, p );

    // get font color
    Color :=
      StringToColor(
        Copy( sFont, 3,
          Length( sFont ) - 3 ) );

    // convert str font style to
    // font style
    Style := [];

    if( Pos( csfsBold,
          sStyle ) > 0 )then
      Style := Style + [ fsBold ];

    if( Pos( csfsItalic,
          sStyle ) > 0 )then
      Style := Style + [ fsItalic ];

    if( Pos( csfsUnderline,
          sStyle ) > 0 )then
      Style := Style + [ fsUnderline ];

    if( Pos( csfsStrikeout,
          sStyle ) > 0 )then
      Style := Style + [ fsStrikeout ];
  end;
end;

//
// Output format:
//   "Aril", 9, [Bold|Italic], [clAqua]
//
function FontToString(
  Font : TFont ) : string;
var
  sStyle : string;
begin
  with Font do
  begin
    // convert font style to string
    sStyle := '';

    if( fsBold in Style )then
      sStyle := sStyle + csfsBold;

    if( fsItalic in Style )then
      sStyle := sStyle + csfsItalic;

    if( fsUnderline in Style )then
      sStyle := sStyle + csfsUnderline;

    if( fsStrikeout in Style )then
      sStyle := sStyle + csfsStrikeout;

    if( ( Length( sStyle ) > 0 ) and
        ( '|' = sStyle[ 1 ] ) )then
    begin
      sStyle :=
        Copy( sStyle, 2,
          Length( sStyle ) - 1 );
    end;

    Result := Format(
      '"%s", %d, [%s], [%s]',
      [ Name,
        Size,
        sStyle,
        ColorToString( Color ) ] );
  end;
end;
اگر در استفاده از اين كد مشكل داشتيد حتما من رو با خبر كنيد. ايميل من هست: mamouri@ganjafzar.com
روزگار خوش و خرم باد!
کيفيت مقاله :
عالی خوب متوسط ضعيف


روش جستجو Boyer-Moore ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۱۸ مراجعه امروز
۴۱۳۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
روش جستجو Boyer-Moore
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۶/۱۲/۱۳۸۱ اين مقاله ۲۲۴۶ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.
چگونه با استفاده از شيوه Boyer-Moore جستجو كنيم؟
راه حل اول:
unit BMSearch;

interface

type
{$IFDEF WINDOWS}
  size_t = Word;
{$ELSE}
  size_t = LongInt;
{$ENDIF}

type
  TTranslationTable = array[char] of char; { translation table }
  TSearchBM = class(TObject)
  private
    FTranslate: TTranslationTable; { translation table }
    FJumpTable: array[char] of Byte; { Jumping table }
    FShift_1: integer;
    FPattern: pchar;
    FPatternLen: size_t;
  public
    procedure Prepare(Pattern: pchar; PatternLen: size_t; IgnoreCase: Boolean);
    procedure PrepareStr(const Pattern: string; IgnoreCase: Boolean);
    function Search(Text: pchar; TextLen: size_t): pchar;
    function Pos(const S: string): integer;
  end;

implementation

uses
  SysUtils;

{Ignore Case Table Translation}

procedure CreateTranslationTable(var T: TTranslationTable; IgnoreCase: Boolean);
var
  c: char;
begin
  for c := #0 to #255 do
    T[c] := c;
  if not IgnoreCase then
    exit;
  for c := 'a' to 'z' do
    T[c] := UpCase(c);

  { Mapping all accented characters to their uppercase equivalent }

  T['Á'] := 'A';
  T['À'] := 'A';
  T['Ä'] := 'A';
  T['Â'] := 'A';

  T['á'] := 'A';
  T['à'] := 'A';
  T['ä'] := 'A';
  T['â'] := 'A';

  T['É'] := 'E';
  T['È'] := 'E';
  T['Ë'] := 'E';
  T['Ê'] := 'E';

  T['é'] := 'E';
  T['è'] := 'E';
  T['ë'] := 'E';
  T['ê'] := 'E';

  T['Í'] := 'I';
  T['Ì'] := 'I';
  T['Ï'] := 'I';
  T['Î'] := 'I';

  T['í'] := 'I';
  T['ì'] := 'I';
  T['ï'] := 'I';
  T['î'] := 'I';

  T['Ó'] := 'O';
  T['Ò'] := 'O';
  T['Ö'] := 'O';
  T['Ô'] := 'O';

  T['ó'] := 'O';
  T['ò'] := 'O';
  T['ö'] := 'O';
  T['ô'] := 'O';

  T['Ú'] := 'U';
  T['Ù'] := 'U';
  T['Ü'] := 'U';
  T['Û'] := 'U';

  T['ú'] := 'U';
  T['ù'] := 'U';
  T['ü'] := 'U';
  T['û'] := 'U';

  T['ñ'] := 'Ñ';
end;

{Preparation of the jumping table}

procedure TSearchBM.Prepare(Pattern: pchar; PatternLen: size_t; IgnoreCase: Boolean);
var
  i: integer;
  c, lastc: char;
begin
  FPattern := Pattern;
  FPatternLen := PatternLen;
  if FPatternLen < 1 then
    FPatternLen := strlen(FPattern);
  {This algorythm is based on a character set of 256}
  if FPatternLen > 256 then
    exit;
  {1. Preparing translating table}
  CreateTranslationTable(FTranslate, IgnoreCase);
  {2. Preparing jumping table}
  for c := #0 to #255 do
    FJumpTable[c] := FPatternLen;
  for i := FPatternLen - 1 downto 0 do
  begin
    c := FTranslate[FPattern[i]];
    if FJumpTable[c] >= FPatternLen - 1 then
      FJumpTable[c] := FPatternLen - 1 - i;
  end;
  FShift_1 := FPatternLen - 1;
  lastc := FTranslate[Pattern[FPatternLen - 1]];
  for i := FPatternLen - 2 downto 0 do
    if FTranslate[FPattern[i]] = lastc then
    begin
      FShift_1 := FPatternLen - 1 - i;
      break;
    end;
  if FShift_1 = 0 then
    FShift_1 := 1;
end;

procedure TSearchBM.PrepareStr(const Pattern: string; IgnoreCase: Boolean);
var
  str: pchar;
begin
  if Pattern <> '' then
  begin
{$IFDEF Windows}
    str := @Pattern[1];
{$ELSE}
    str := pchar(Pattern);
{$ENDIF}
    Prepare(str, Length(Pattern), IgnoreCase);
  end;
end;

{Searching Last char & scanning right to left}

function TSearchBM.Search(Text: pchar; TextLen: size_t): pchar;
var
  shift, m1, j: integer;
  jumps: size_t;
begin
  result := nil;
  if FPatternLen > 256 then
    exit;
  if TextLen < 1 then
    TextLen := strlen(Text);
  m1 := FPatternLen - 1;
  shift := 0;
  jumps := 0;
  {Searching the last character}
  while jumps <= TextLen do
  begin
    Inc(Text, shift);
    shift := FJumpTable[FTranslate[Text^]];
    while shift <> 0 do
    begin
      Inc(jumps, shift);
      if jumps > TextLen then
        exit;
      Inc(Text, shift);
      shift := FJumpTable[FTranslate[Text^]];
    end;
    { Compare right to left FPatternLen - 1 characters }
    if jumps >= m1 then
    begin
      j := 0;
      while FTranslate[FPattern[m1 - j]] = FTranslate[(Text - j)^] do
      begin
        Inc(j);
        if j = FPatternLen then
        begin
          result := Text - m1;
          exit;
        end;
      end;
    end;
    shift := FShift_1;
    Inc(jumps, shift);
  end;
end;

function TSearchBM.Pos(const S: string): integer;
var
  str, p: pchar;
begin
  result := 0;
  if S <> '' then
  begin
{$IFDEF Windows}
    str := @S[1];
{$ELSE}
    str := pchar(S);
{$ENDIF}
    p := Search(str, Length(S));
    if p <> nil then
      result := 1 + p - str;
  end;
end;

end.

راه حل دوم:
اين يك دمو براى الگوريتم جستجوى Boyer-Moore است. ايده بسيار ساده است. در ابتدا يك فهرست از رشته‌هاى مورد نظر جهت جستجو ساخته و سپس روتين BMsearch را صدا مى‌كنيم. فراموش نكنيد كه در برنامه نهايى خود Range Checking را با سوييج {$R-} خاموش كنيد. در غير اينصورت جستجو 2 الى 3 ساعت بيشتر از زمان عادي طول مي‌كشد.
{Public-domain demo of Boyer-Moore search algorithm.
Guy McLoughlin - May 1, 1993.}

program DemoBMSearch;

{Boyer-Moore index table data definition}
type
  BMTable = array[0..127] of byte;

  {Create a Boyer-Moore index table to search with.}

procedure Create_BMTable(Pattern: string; var BMT: BMTable);
var
  Index: byte;
begin
  fillchar(BMT, sizeof(BMT), length(Pattern));
  for Index := 1 to length(Pattern) do
    BMT[ord(Pattern[Index])] := (length(Pattern) - Index)
end;

{Boyer-Moore Search function. Returns 0 if string is not found. Returns 65,535 if
BufferSize is too large, ie: greater than 65,520 bytes.}

function BMsearch(var Buffer; BuffSize: word; var BMT: BMTable; Pattern: string): word;
var
  Buffer2: array[1..65520] of char absolute Buffer;
  Index1, Index2, PatSize: word;
begin
  if (BuffSize > 65520) then
  begin
    BMsearch := $FFFF;
    exit
  end;
  PatSize := length(Pattern);
  Index1 := PatSize;
  Index2 := PatSize;
  repeat
    if (Buffer2[Index1] = Pattern[Index2]) then
    begin
      dec(Index1);
      dec(Index2)
    end
    else
    begin
      if (succ(PatSize - Index2) > (BMT[ord(Buffer2[Index1])])) then
        inc(Index1, succ(PatSize - Index2))
      else
        inc(Index1, BMT[ord(Buffer2[Index1])]);
      Index2 := PatSize
    end;
  until
    (Index2 < 1) or (Index1 > BuffSize);
  if (Index1 > BuffSize) then
    BMsearch := 0
  else
    BMsearch := succ(Index1)
end;

type
  arby_64K = array[1..65520] of byte;

var
  Index: word;
  st_Temp: string[10];
  Buffer: ^arby_64K;
  BMT: BMTable;

begin
  new(Buffer);
  fillchar(Buffer^, sizeof(Buffer^), 0);
  st_Temp := 'Gumby';
  move(st_Temp[1], Buffer^[65516], length(st_Temp));
  Create_BMTable(st_Temp, BMT);
  Index := BMSearch(Buffer^, sizeof(Buffer^), BMT, st_Temp);
  writeln(st_Temp, ' found at offset ', Index)
end.

کيفيت مقاله :
عالی خوب متوسط ضعيف


بالاترين 9 بسته Installساز ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۹۳۲ مراجعه امروز
۴۵۲۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بالاترين 9 بسته Installساز
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۶/۱۲/۱۳۸۱ اين مقاله ۳۳۳۲ بار مطالعه شده است
۲۹ نفر تا به حال به اين مقاله رای داده اند.
بالاترين 9 بسته Installساز
اگر به دنبال ابزارى ميگرديد كه برنامه خود را منتشر كرده و تحويل دهيد بيش از اين نگرديد! اين گزارش را بخوانيد.

DeployMaster
اگر به دنبال يك ابزار مناسب براى توزيع انتشار برنامه ويندوزى خود يا فايلهاى كامپيوترى خودتان مى‌گرديد و به علاوه ساير Installسازها شما را خسته كرده‌اند آنگاه JGsoft DeployMaster راه حلى است كه شما لازم داريد.

Emma Setup
نسخه 3 Emma Setup يك Installساز 32 بيتي است. لازم نيست كه يك برنامه‌نويس باشيد تا بتوانيد يك Install شخصى و حرفه‌اى بسازيد. در حالى كه خصوصيات حرفه‌اى خيلى زيادى دارد قيمت آن بسيار پايين و كار كردن با آن بسيار ساده است. اين برنامه براي بسيارى از موارد بهترين انتخاب است.

gInstall
فقط تصور كنيد كه يك Installer قابل Skin گذارى چقدر مى‌تواند مفيد باشد. مشتريان شما برنامه شما را از همان آغاز دوست خواهند داشت. اجازه دهيد مشتريانتان با استفاده از شركت يا برنامه شما خودشان را بشناسند. آيا دوست نداريد Setup برنامه شما دقيقا به شكل و تيپ برنامه خودتان باشد.

Install Shield
Install Shield قابليت كنترل كامل بر روى Installer ويندوز را به شما مي دهد و خصوصيات جديد و قدرتمند Installer ويندوز را در اختيار شما قرار مي‌گذارد. برنامه نويسان بدون نوشتن حتي يك خط كد مي توانند از تمامي قابليتهاي Installer ويندوز استفاده كنند.

Wise Solutions
Wise انقلاب بعدي در زمينه ساخت Installer براي ويندوز است كه كاربران را كاملا در سيكل زماني ساخت Setup قرار مي دهد. شما قابليتهايي از قبلي ساخت Installهاي حرفه‌اي و قابل اطمينان را خواهيد داشت.

Inno Setup
Inno Setup يك Setup ساز رايگان براي ويندوز است كه تمامي نسخه هاي 32بيتي ويندوز را پيشتيباني مي كند. اگرچه رايگان است ولي بسيار بسيار قدرتمند است و سورس آن به زبان دلفي نيز مهيا مي باشد.

ICE (Install Creation Environment)
يك Installساز قوي كه به شما اجازه مي دهد Setup برنامه هاي خود را كه با دلفي يا C++ Builder نوشته ايد بسازيد. احتياج به يادگرفتن يك زبان scripting نيست. كار كردن با اين نرم افزار بسيار ساده است و اصولا براي ساخت Install براي دلفي و C++ Builder ساخته شده است.

GP-Install
GP-Install يك Setup ساز است كه خصوصيات "ساده بودن" و "قابل درك بودن" را با هم تركيب كرده است. Setup ساخته شده بسيار فشرده است. و به شما اجازه مي دهد كه Setup خود را هر گونه كه دوست داريد بياراييد. جالبتر از همه اين كه آن رايگان است.

Instyler
اگر به دنبال يك Installer ارزان قيمت و آسان ميگرديد تا برنامه هاي خود را انتشار دهيد SmartSetup را آزمايش كنيد. اين برنامه قابليت هايي همچون: مديريت پروژه، انوع مختلف Setup، سازگاري با Registry/Ini، شكل قابل تغيير Setup، پشتيباني از uninstallat، امكان upgrade، امكان حفاظت با استفاده از رمز، استفاده ار shortcutها و بسياري خصوصيات استاندارد و حرفه اي ديگر.
کيفيت مقاله :
عالی خوب متوسط ضعيف


مجموعه Tip شماره 1 ايران دولوپرز دات كام ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۲۱ مراجعه امروز
۴۱۳۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مجموعه Tip شماره 1 ايران دولوپرز دات كام
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۶/۱۲/۱۳۸۱ اين مقاله ۳۷۹۷ بار مطالعه شده است
۳۹ نفر تا به حال به اين مقاله رای داده اند.
مجموعه Tip شماره 1 ايران دولوپرز دات كام
گردآورى: محمد باقر معممورى

شكل كوتاهتر آدرس: c:\AB\C...DE\F.ghi
Tip submited by: Vijay Kishan, kishan@innomedia.soft.net

{
Sometimes when a huge path [any long string] is to
be displayed in a small space, it is desirable to
see the start and the end of the path with ellipses
in-between, rather than truncating one of the ends.
For example
"C:\Program Files\Delphi\DDrop\TargetDemo\main.pas"
is desired to be seen as
"C:\Program F....Demo\main.pas"
then the following "Mince" function could be used.
}

function Mince
   (PathToMince :String; InSpace :Integer): String;
var TotalLength, FLength : Integer;
begin
 TotalLength := Length(PathToMince);
 if TotalLength > InSpace then
 begin
  FLength := (Inspace Div 2) - 2;
  Result := Copy(PathToMince, 0, fLength)
            + '...'
            + Copy(PathToMince,
                  TotalLength-fLength,
                  TotalLength);
 end
 else
   Result := PathToMince;
end;

{
The "InSpace" is an approximate number of charecters
the intended space can hold. For example, if i need
to fit a long path in a TLabel that can hold 10
charecters 'M' then InSpace is 10. Though it is
approximate it does the job 99% of the time. Of
course this could be modified to take into account
the font width.

For example:
Label1.caption := Mince(Label1.caption, 15);
}

چك كردن كليد Shift و Ctrl و Alt
function CtrlDown : Boolean;
var
  State : TKeyboardState;
begin
  GetKeyboardState(State);
  Result := ((State[vk_Control] And 128) <> 0);
end;

function ShiftDown : Boolean;
var
  State : TKeyboardState;
begin
  GetKeyboardState(State);
  Result := ((State[vk_Shift] and 128) <> 0);
end;

function AltDown : Boolean;
var
  State : TKeyboardState;
begin
  GetKeyboardState(State);
  Result := ((State[vk_Menu] and 128) <> 0);
end;

{
The following example demonstrates checking if the
Shift key is pressed during a Button Click.
}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ShiftDown then
    Form1.Caption := 'Shift' else
    Form1.Caption := 'No Shift';
end;

پنهان كردن يك برنامه از پنجره "Close Program"
{
This is the code that will hide a Delphi
application in the Ctrl+Alt+Del menu!
}

...
implementation

const
  RSPSIMPLESERVICE     = 1;
  RSPUNREGISTERSERVICE = 0;

function RegisterServiceProcess
  (dwProcessID, dwType: DWord) : DWord;
  stdcall; external 'KERNEL32.DLL';

procedure TForm1.FormDestroy (Sender: TObject);
begin
  RegisterServiceProcess
    (GetCurrentProcessID, RSPUNREGISTERSERVICE)
end;

procedure TForm1.FormCreate (Sender: TObject);
begin
  RegisterServiceProcess
    (GetCurrentProcessID, RSPSIMPLESERVICE)
end;

آيا CD-ROM حاوى يك سى‌دى صوتى است؟
{
We can use the Windows API function GetDriveType()
to test if the drive is a CD-ROM drive then use
the Windows API function GetVolumeInformation()
to test if the VolumeName is 'Audio CD'.
}

function IsAudioCD(Drive : char) : bool;
var
  DrivePath : string;
  MaximumComponentLength : DWORD;
  FileSystemFlags : DWORD;
  VolumeName : string;
begin
  Result := false;
  DrivePath := Drive + ':\';
  if GetDriveType(PChar(DrivePath))
  <> DRIVE_CDROM then exit;
  SetLength(VolumeName, 64);
  GetVolumeInformation(PChar(DrivePath),
                       PChar(VolumeName),
                       Length(VolumeName),
                       nil,
                       MaximumComponentLength,
                       FileSystemFlags,
                       nil,
                       0);
  if lStrCmp(PChar(VolumeName),'Audio CD') = 0
  then result := true;
end;

{Usage:}
procedure TForm1.Button1Click(Sender: TObject);
begin
 if not IsAudioCD('D') then
  ShowMessage('Not an Audio CD in drive D');
end;

غيرفعال كردن LogOff و Task Manager و ShutDown در ويندوزهاي NT - 2000 - XP
{
I you want to hide your program from
Windows NT compatibile systems (2000/XP)
you'll need to mess with the registry...

The Enable CTRLALTDEL procedure accepts
a boolean value for the YesNo parameter.
If you send False, after the code has executed,
if the user presses ctrl-alt-del,
on the Windows Security dialog box,
buttons [Task Manager], [Shut Down] and [Log off]
will be disabled.

Usage:
 EnableCTRLALTDEL(False);
}

procedure EnableCTRLALTDEL(YesNo : boolean);
const
    sRegPolicies = '\Software\Microsoft\Windows\CurrentVersion\Policies';
begin
  with TRegistry.Create do
  try
    RootKey:=HKEY_CURRENT_USER;
    if OpenKey(sRegPolicies+'\System\',True) then
    begin
      case YesNo of
        False:
          begin
            WriteInteger('DisableTaskMgr',1);
          end;
        True:
          begin
            WriteInteger('DisableTaskMgr',0);
          end;
      end;
    end;
    CloseKey;
    if OpenKey(sRegPolicies+\Explorer\',True) then
    begin
      case YesNo of
        False:
          begin
            WriteInteger('NoChangeStartMenu',1);
            WriteInteger('NoClose',1);
            WriteInteger('NoLogOff',1);
          end;
        True:
          begin
            WriteInteger('NoChangeStartMenu',0);
            WriteInteger('NoClose',0);
            WriteInteger('NoLogOff',0);
          end;
      end;
    end;
    CloseKey;
  finally
    Free;
  end;
end;

پيدا كردن برنامه مربوط با يك پسوند خاص
{
Idea:
Do a search in the Registry for your
extension in HKEY_CLASSES_ROOT,
after finding it get its default
value and then do a new search for it.
Now, read the Shell\Open\Command
key's default value.

Usage: //find and start
var
  sExe:string;
begin
  sEXE:=GetExeByExtension('.htm');
  if (sEXE <> '') and FileExists(sEXE) then
    ShellExecute(Handle,'OPEN', PChar(sEXE), nil, nil, SW_SHOWNORMAL);
}

Uses Registry;

function GetExeByExtension(sExt : string) : string;
var
  sExtDesc:string;
begin
  with TRegistry.Create do
  begin
    try
      RootKey:=HKEY_CLASSES_ROOT;
      if OpenKeyReadOnly(sExt) then
      begin
        sExtDesc:=ReadString('');
        CloseKey;
      end;
      if sExtDesc <>'' then
      begin
        if OpenKeyReadOnly(sExtDesc + '\Shell\Open\Command') then
        begin
          Result:= ReadString('');
        end
      end;
    finally
      Free;
    end;
  end;

  if Result <> '' then
  begin
    if Result[1] = '"' then
    begin
      Result:=Copy(Result,2,-1 + Pos('"',Copy(Result,2,MaxINt)));
    end
  end;
end;

استفاده كردن از يك آبجكت بدون تعريف آن
{
The idea is to construct the object,
then enter its scope rather than assign
its address to an object reference variable.
Whilst in its scope, you can access all
its properties and methods directly.

Example: Using the registry...
}

procedure TForm1.FormCreate(Sender: TObject);
var RegPath : string;
begin
  with TRegistry.Create do
    try
      RegPath:='MyApp';
      RootKey := HKEY_CURRENT_USER;
      If OpenKey(RegPath, False) then
        // do stuff here
    finally
      Free
    end
end;

تبديل Enum به String
{
Here's how to display the string
represention of a Delphi enum
type at runtime.

Suppose enum:

TProgrammerType = (tpDelphi, tpVisualC, tpVB, tpJava);
}

uses TypInfo;
var s: string;
s := GetEnumName(TypeInfo(TProgrammerType),
                 integer(tpDelphi));

//s='tpDelphi'

کيفيت مقاله :
عالی خوب متوسط ضعيف


مجموعه Tip شماره 2 ايران دولوپرز دات كام ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۹۴۴ مراجعه امروز
۴۵۳۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مجموعه Tip شماره 2 ايران دولوپرز دات كام
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۶/۱۲/۱۳۸۱ اين مقاله ۲۷۱۲ بار مطالعه شده است
۱۹ نفر تا به حال به اين مقاله رای داده اند.
مجموعه Tip شماره 2 ايران دولوپرز دات كام
گردآورى: محمد باقر معممورى

تنظيم كردن رمز Paradox به طور اتوماتيك
{
The table component's ACTIVE property
must be set to FALSE.
Then, put this code on the form's create event:
}
Session.AddPassword('My secret password');
TableName.Active := True;

فعال/غيرفعال كردن دكمه "START" ويندوز
//Enable:
EnableWindow(FindWindowEx(FindWindow
  ('Shell_TrayWnd', nil), 0,'Button',nil),TRUE);
//Disable:
EnableWindow(FindWindowEx(FindWindow
  ('Shell_TrayWnd', nil), 0,'Button',nil),FALSE);

آيا IDE در حال اجرا است؟
{
If you want to check whether IDE is runing or not
try this function: (Supose you want your new
shareware component to work only when IDE is
running, or something like that)
}
Function RunningInTheIDE: boolean;
Begin
  Result:=FindWindow('TAppBuilder', nil) > 0;
End;

nil), 0,'Button',nil),FALSE);

پيغام هاي Hint و Warning
{
It's a good idea to turn on hint and warning
messages specially when writing and compiling
your own code. Although some of these hints and
warnings can be ignored, most of them - if
nothing else - will remind you of things you
could do to improve your code.

- Go to "Project | Options"
- Change to the "Compiler" tab
- Make sure "Show hints" and "Show warnings"
check boxes are checked
}

آشكار/مخفي كردن TaskBar در ويندوز 95
//To hide the task bar use
ShowWindow(FindWindow
   ('Shell_TrayWnd',nil), SW_HIDE);

//To show the task bar use
ShowWindow(FindWindow
   ('Shell_TrayWnd',nil), SW_SHOWNA);

کيفيت مقاله :
عالی خوب متوسط ضعيف


مجموعه Tip شماره 3 ايران دولوپرز دات كام ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۹۴۷ مراجعه امروز
۴۵۳۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مجموعه Tip شماره 3 ايران دولوپرز دات كام
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۶/۱۲/۱۳۸۱ اين مقاله ۲۷۲۰ بار مطالعه شده است
۱۱ نفر تا به حال به اين مقاله رای داده اند.
مجموعه Tip شماره 3 ايران دولوپرز دات كام
گردآورى: محمد باقر معممورى

مقايسه يك رشته با يك الگو
{
Sometimes we need to know if a string matches a
pattern, which is a string with wildcards
(for example ? and *).

Usage:
if IsLike('About Delphi', 'Abo?? Delp*') then
  ShowMessage('A match!');
}

uses SysUtils;

function IsLike(AString, Pattern: string): boolean;
var
  i, n, n1, n2: integer;
  p1, p2: pchar;
label
  match, nomatch;
begin
  AString := UpperCase(AString);
  Pattern := UpperCase(Pattern);
  n1 := Length(AString);
  n2 := Length(Pattern);
  if n1 < n2 then n := n1 else n := n2;
  p1 := pchar(AString);
  p2 := pchar(Pattern);
  for i := 1 to n do begin
    if p2^ = '*' then goto match;
    if (p2^ <> '?') and (p2^ <> p1^) then goto nomatch;
    inc(p1); inc(p2);
  end;
  if n1 > n2 then begin
nomatch:
    Result := False;
    exit;
  end else if n1 < n2 then begin
    for i := n1 + 1 to n2 do begin
      if not (p2^ in ['*','?']) then goto nomatch;
      inc(p2);
    end;
  end;
match:
  Result
end;

پيدا كردن Handle يك چاپگر بر اساس نام آن
{
Here's how to get a Printer Handle
provided with the Printer name:
}

function PrinterHandleByName(PrinterName : string):THandle;
var
  PtrName : PChar;
begin
  Result:=0;
  PtrName := PChar(PrinterName);
  if not OpenPrinter(PtrName, Result, nil) then
    RaiseLastOSError
  else
  begin
    ClosePrinter(Result);
  end
end;

تبديل String به Enum
{
Here's how to get the value of
an enumerated type constant
given its string representation.

Suppose enum:

TProgrammerType = (tpDelphi, tpVisualC, tpVB, tpJava);
}

uses TypInfo;

var
 s: string;
 programmer : TProgrammerType;
begin
 s:='tpDelphi'; // string
 programmer := TProgrammerType(GetEnumValue(
                TypeInfo(TProgrammerType),s));
end;

کيفيت مقاله :
عالی خوب متوسط ضعيف


چگونه از فايلهاى PDF در دلفى استفاده كنيم؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۹۵۰ مراجعه امروز
۴۵۴۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چگونه از فايلهاى PDF در دلفى استفاده كنيم؟
نويسنده : مديريت سايت
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۶/۱۲/۱۳۸۱ اين مقاله ۲۹۳۵ بار مطالعه شده است
۱۹ نفر تا به حال به اين مقاله رای داده اند.
چگونه از فايلهاى PDF در دلفى استفاده كنيم؟
1. دلفى را آغاز كرده و Component | Import ActiveX Control را انتخاب كنيد.
2. به دنبال "(Acrobat Control for ActiveX (Version x.x" بگرديد و به Install را بزنيد.
3. نام پالتى كه كمپوننت مورد نظر بايد در آن نصب شود را انتخاب كنيد.
4. Install را كليك كنيد.
5. Packageي كه قرار است كمپوننت در آن نصب شود را انتخاب كنيد يا يك Package جديد براى كنترل جديد TPdf بسازيد.
6. بر روي OK كليك كنيد.
7. دلفى به شما پيغام مى‌دهد كه آيا مايل به Rebuild كردن Package جديد/تغييريافته هستيد؟
8. Yes را كليك كنيد. دلفى به شما پيغام مى‌دهد كه كمپوننت TPdf نصب شده است.
9. Package را ببنديد و به دلفى اجازه دهيد كه آن را Save كند.
10. حالا كمپوننت در تب ActiveX موجود مى‌باشد.
13. كمپوننت TPdf را روي فرم بكشيد.
14. با استفاده از Object Inspector پراپرتي src را مطابق آدرس يك فايل PDF كه روى كامپيوتر شما يا وب موجود مى‌باشد قرار دهيد. حالا تنها كارى كه بايد انجام دهيد تغيير اندازه كمپوننت مورد نظر است.

نكات:
1. اگر شما ActiveX مربوطه را نداريد، همين حالا آن را از سايت www.adobe.com داون لود كنيد. چون براي اين مثال ضرورى است.
2. مي‌توانيد آخرين مرحله (مرحله 14) را در زمان اجرا يا RunTime انجام دهيد. بنابراين شما مى‌توانيد هر فايلى را در اجرا باز كرده و آنرا تغيير اندازه دهيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


زبان سی و پاسکال ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۴۱ مراجعه امروز
۴۲۳۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
زبان سی و پاسکال
نويسنده : بهرام وکيلي
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۲/۱۳۸۱ اين مقاله ۱۹۰۸ بار مطالعه شده است
۱۳ نفر تا به حال به اين مقاله رای داده اند.
مقدمه
نمي دانم تا حالا به مشكل "زبانها" برخورد كرده ايد يا نه ... بنظر من تمامي زبانها در 99 درصد موارد شبيه به هم هستند ... اين مطلب پايه تحقيقي شد براي اينكه يكي از دوستان خوبمان بنام "اردلان شاهقلي " اين مطلب را تهيه و يكي از دوستان ديگرمان بنام سركار خانم "نادري " زحمت تايپ انرا بكشند ...
اميد وارم اين مطلب هر چند ناقص كمك خوبي براي يادگيري هر دو زبان باشد

وكيلي

زبان C زبان Pascal
;(عبارت 2& ",عبارت 1Scanf (" ;( ) read
; (عبارت 2 , " عبارت 1") Printf ; ( ) write
نكته : دستورات Scanf و Printf داراي دو عبارت اول و دوم ميباشند .
نكته : در دستور Scanf به جاي عبارت اول از كاراكترهاي كنترلي فرمت استفاده ميشود.
نكته : در دستور Scanf به جاي عبارت دوم (بعد از علامت & ) اسم متغيرهايي كه بايد خوانده شوند مي آيد . البته با توجه به كاراكترهاي كنترلي فرمت عبارت اول .
نكته : در دستور Printf به جاي عبارت 1 از كاراكترهاي كنترلي استفاده ميشود . ( البته در اين دستور ميتوان بسيار عبارت اول يك متن را به ............. قرار داد و ديگر احتياجي به عبارت دوم نيست ) در ضمن ميتوا ن از تركيب از حالت بالا هم استفاده كرد .
نكته : عبارت دوم در دستور Printf ............. اسم متغير به همراه بعضي از كاراكترهاي كنترلي ميباشد .
; ) & , " ln (" Scanf ;( )ln read
; ) , " ln (" Printf ; ( )ln write

جدول كاراكترهاي كنترلي دستورPrintf ( ) و( ) Scanf
كاراكتر توضيحات
\f موجب انتقال كنترل به صفحه جديد مي شود
\n موجب انتقال كنترل به خط جديد ميشود
\t به اندازه ي 8 كاراكتر فاصله ايجاد ميشود
\" چاپ دبل كتيشن
\' چاپ كتيشن
\O NULL ( رشته ي ....... )
\\ Back slash
\V انتقال كنترل به 8 سطر بعد
جدول كاراكترهاي كنترلي فرمت
كاراكتر توضيحات
%c كاراكتر
%d اعداد صحيح دهدهي مثبت و منفي
%i اعداد صحيح دهدهي مثبت و منفي
%e نمايش علمي عدد همراه با حرف e
%E نمايش علمي عدد همراه با حرف E

جدول كاراكترهاي كنترلي فرمت
كاراكتر توضيحات
%f نمايش اعداد اعشاري
%g نمايش اعداد اعشاري
%G نمايش اعداد اعشاري
%S رشته اي از كاراكترها
%p اشاره گرها

در زبان C براي ورود اطلاعات انواع ديگري از توابع را داريم كه معادل آنها همان read در پاسكال ميباشد. (readln) و .............دستور هم معادل Write موجود ميباشد.
C Pascal
getch ( );= نام متغير كاراكتري read( );
getche ( ); = نام متغير كاراكتري read( );
getchar ( ); = نام متغير كاراكتري read( );

Putch ( ) ; Write ( );
Putchar ( ) ; Write ( );

البته دستورات فوق فقط براي خواندن يك char ميباشند.
دو دستور زير برا دريافت و نوشتن string در C ميباشند .
; (نام متغير رشته اي) gets
; (نام متغير رشته اي) Puts

انواع داده ها برابر است با
C Pascal
int integer
Flout real
Char char
(آرايه اي از char ميباشد. ) string
Int boolean

معادل بعضي از دستورات Pascal در C در پائين آمده است .
C Pascal
= = =
= = :
! < >
<= <=
>= >=
!= not
&& And
|| or
++Xيا ++X inc(x)
X-- يا --X dic(x)
{ begin
} End;
} End.
} End
break; break;

C Pascal
(شرط ) if then شرط if 1)

{ begin

} end
Else else
{ begin

} end;
(عمليات ; شرط خاتمه ; مقادير اوليه= متغبرهاFor ( Do مقدار نهائي to مقدار اوليه = : متغير حلقه 2) For
{ begin

} end;
البته در زبان C حلقه ي for ميتواند هر كدام و با ................ تمام مراحل را ( عمليات يا شرط خاتمه با دستوارات انتساب نداشته باشد . )
در صورتي كه حلقه ي for به صورت زير نوشته شود مانند حلقه ي while در پاسكال عمل خواهد كرد .(بصورت بينهايت)
For (; ; )

C Pascal
) شرط ادامه ي حلقه While ( do شرط ادامه ي حلقه 1) while

{ Begin

} End;

do 2) repeat

; ( شرط ادامه ي حلقه While ( ;(شرط خروج از حلقه) until

(نام متغير) Switch of نام متغير 3) Case
{ begin :حالت اول
:{ حالت اول case
End ;
Break; begin: حالت دوم
}
:{ حالت دوم case end;
Break;
} : begin حالت n ام
:{ حالت case end;
Break; Else Begin
Defualt : End;
end;
}

}
همان طوري كه مي دانيد C تشكيل شده است از يك سري تابع و حتي برنامه ي اصلي آن هم يك تابع است كه بصورت زير آنرا مي نويسيم .
Void Main ( )
{

}
C مانند پاسكال داراي تابع مي باشد و اين توابع مي توانند كار رويه ها را هم انجام دهند .
C Pascal
; ( نام متغير ها / نوع متغير ها ) نام تابع نوع تابع ; ( نوع تابع : ( نام متغير ها ) نام تابع Function
{ begin

} End;
برابر تعريف آرايه ها در C داريم .
زبان Pascal
نوع آرايه of ] مقدار انتسابي .. مقدار ابتدائي [ Array : نام آرايه
زبان C
]طول هر خانه[ ] تعداد خانه هاي آن [ نام آرايه نوع آرايه

در زبان C اولين خانه ي آرايه ها داراي انديس صفر ميباشد .
در زبان C متغيري به نام string وجود ندارد و بجاي آن از آرايه اي از نوع char استفاده ميشود .
C پاسكال
Char x[ ]; x:string;
در زبان C آخرين خانه ي يك آرايه از char ها با '/0' پر خواهد شد . ( '/0' انتهاي يك string ميباشد . )
براي كپي كردن يك string در ديگري از تابع
C پاسكال
;( متغير دوم و نام متغير اول Strcpy( Pchar;: (متغير دوم ونام متغير اول strcopy (
در هر دو زبان مقدار متغير دوم و متغير اول كپي ميشود . ( البته دستور strcopy در unit، string زبان پاسكال قرار دارد .)
;( متغير دوم و نام متغير اول ) strcut ; Pchar : ( متغير دوم و نام متغير اول ) strcut
در هر دو زبان مقدار متغير دوم به انتهاي مقدار متغير اول مي چسبد و در متغير اول قرار مي گيرند . ( دستور فوق در unit string پاسكال قرار دارد . )

کيفيت مقاله :
عالی خوب متوسط ضعيف


زبان سی و پاسکال ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۶۴۴ مراجعه امروز
۴۲۳۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
زبان سی و پاسکال
نويسنده : بهرام وکيلي
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۲/۱۳۸۱ اين مقاله ۱۷۲۹ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

اشاره گرها
C پاسكال
نام اشاره گر * نوع اشاره گر نوع اشاره گر ^ : نام اشاره گر
نكته : در زبان C هميشه بايد در هنگام ارسال آرايه ها به تابع آخرين عنصر آن معلوم باشد البته مي توان تمامي عناصر را هم معلوم كرد و يا آخرين عنصر را به تابع فرستاد .
در زبان C ميتوان اشاره گري از نوع آرايه تعريف كرد با استفاده از دستور Malloc بصورت زير
Int*P
P= ( int *)Malloc ( n* size of ( int))
با دو دستور بالا ابتدا اشاره گر p از نوع int ساخته شده سپس يك آرايه ي n عنصري از نوع int به p نسبت داده ميشود .
ارزش دهي اوليه اشاره گرها درC
; "رشته " = نام رشته Char *
نكته : ساختمان ها در زبان C معادل ركوردها در زبان پاسكال ميباشند .
C پاسكال
نام ساختمان struct record = نام ركورد
{ ;نوع فيلد : نام فيلد اول
; نام فيلد نوع فيلد ;نوع فيلد : نام فيلد دوم
; نام فيلد نوع فيلد '
' '
'
; نام فيلد نوع فيلد ;نوع فيلد : نام فيلد n ام
}; end;

در زبان پاسكال در ............. var ميتوان به صورت زير متغير هائي از نوع record تعريف كرد و در زبان C داريم .
; اسامي متغير ها نام ساختمان Str var
; نام ركورد : نام متغير نكته : در زيان C ميتوان متغير هاي ساختمان را بصورت زير تعريف كرد
نام ساختمان Struct
{
; نام فيلد نوع فيلد
; نام فيلد نوع فيلد
'
'
; نام فيلد نوع فيلد
نام متغير ها }
براي دسترسي به عناصر داده ها و ركورد ها داريم
C پاسكال
نام فيلد . نام ساختمان نام فيلد . نام ركورد
براي تعريف آرايه اي از ركورد ها و يا ساختمان ها به صورت زير عمل ميكنيم .
C پاسكال
نام ساختمان struct type
{ record= نام ركورد
; نام فيلد نوع فيلد ; نوع فيلد : نام فيلد
; نام فيلد نوع فيلد '
' '
' ; نوع فيلد : نام فيلد
; نام فيلد نوع فيلد end;
} var
; [n ] نام آرايه نام ساختمان Strust ; نام ركورد of [1..n] array : نام آرايه

C پاسكال
( نام رشته ) a to i = ; ( عددي براي چك كردن و نام عدد و نام رشته ) vul
دو دستور بالا در C و در پاسكال يك مقدار رشته اي را ميگيرد و به يك مقدار int تبديل ميكند .
نكته : ميتوان يك اشاره گر از نوع ساختمان داشته باشيم به صورت زير

C پاسكال
نام ساختمان strust
{
; نام فيلد نوع فيلد
; نام فيلد نوع فيلد
'
'
; نام فيلد نوع فيلد
; نام اشاره گرها * و نام متغير }
و بصورت زير هم ميتوان عمل كرد
; نام اشاره گر * نام ساختمان struct
نكته : اگر اشاره گر از نوع ساختمان داشته باشيم ميتوان براي دسترسي به عناصر ساختمان بصورت زير عمل كرد .
نام فيلد . ( نام اشاره گر *)
نام فيلد نام اشاره گر
در زبان C اين امكان وجود دارد كه ساختماني را به گونه اي تعريف كنيم كه طول عناصر آنرا بر حسب bit مشخص كرد .
C پاسكال
نام ساختمان struct
{
; طول فيلد : نام فيلد نوع فيلد
; طول فيلد : نام فيلد نوع فيلد
'
'
'
; طول فيلد : نام فيلد نوع فيلد
; نام اشاره گر * و نام متغير ها }
نكته : اگر يك ساختمان از نوع بيتي داشته باشيم : (1 نمي توان به آدرس آنها مراجعه كرد
(2 نمي توان بصورت آرايه تعريف شود
(3 تركيبي از ساختمان بيتي و معمولي ممكن است
يونيون ها : محلي از حافظه است كه توسط دو يا چند متغير به طور اشتراكي مورد استفاده قرار مي گيرد. عناصر يونيون ها تمامي از يك مدل حافظه شروع ميشوند .
در يونيون ها فضاي اشغال شده برابر است با فضاي مورد نياز براي بزرگترين فيلد .
C
نام يونيون union
{
; نام فيلد و نوع فيلد
'
'
; نام فيلد و نوع فيلد
; نام اشاره گرها * و نام متغير ها }
نكته : ميتوان هر يك از فيلد هاي يك union خود يك struct يا union ديگر نيز باشند .

C پاسكال
اسم جديد نوع موجود typedet type
انواع داده شمارشي :

C
نام نوع شمارشي enum
{
عنصر اول
عنصر دوم
'
'
عنصر n ام
; نام اشاره گرها * و نام متغير ها }
; نام متغير ها نام نوع شمارشي enum

نكته : مقدار عددي عنصر اول صفر و عنصر n ام مقدار عددي n را ميگيرد .
فايل ها : برابر تعريف يك متغير از نوع فايل داريم
C پاسكال
نام اشاره گر فايل * FILE var
نام ركورد مورد نظر of file : نام متغير فايل
و براي كار با فايل ها دستورات زير را داريم يا
; text :
C پاسكال
; ( "فرمت باز شدن" و " آدرس فايل" ) fopen = نام اشاره گر فايل
; ( نام اشاره گر فايل ) f close
; ( نام اشاره گر فايل ) rewind
تابع rewind باعث ميشود كه اشاره گر به ابتداي فايل اشاره كند .
; ( نام اشاره گر فايل و نام متغير كاراكتري ) putc
; ( " و " ) fputc
;( نام اشاره گر فايل ) getc= نام متغير كاراكتري
;( نام اشاره گر فايل ) fgetc= نام متغير كاراكتري
;( نام اشاره گر فايل و نام متغير رشته اي ) fputs
; ( نام اشاره گر فايل و طول آن و نام متغير رشته اي ) fgets
دستور زير چك ميكند كه آيا اشاره گر به انتهاي فايل رسيده است يا خير
اگر اشاره گر به انتها رسيده باشد مقدار 1 و در غير اينصورت صفر را بر ميگرداند.
; ( نام اشاره گر فايل ) fremove ( اگر انجام شود مقدار صفر و در غير اينصورت مقدار ديگر ارجاع ميشود . )
در زبان C تابعي وجود دارد كه اگر در هنگام كار با فايل اشكالي پيش آيد ارزش 1 و در غير اينصورت ارزش صفر را بر ميگرداند كه بصورت زير است .
; ( نام اشاره گر فايل ) ferror

C پاسكال
دستور زير باعث مي شود يك كاراكتر حرف كوچك به كاراكتر حرف بزرگ تبديل شود .
; ( نام متغير كاراكتري ) foupper= نام متغير كاراكتري
در زبان C ميتوان يك struct را درون فايل قرار داد و يا از آن خواند .
C
;( نام اشاره گر فايل و تعداد خواندن و (نام ساختمان Struct ) Sizeof و نام متغير ساختمان Fread (&
;( و " و " و " &) fwrite
پاسكال
; ( نام متغير فايل و نام متغير ركورد read(
;( نام متغير فايل و نام متغير ركوردWrite (
; ( نام متغير كاراكتري follower = نام متغير كاراكتري
دستور حذف يك كاراكتر را به حرف كوچك تبديل ميكند .

Linklist

C پاسكال
{ نام ساختمان struct ; نام ركورد ^ = نام اشاره گر
; نام فيلد نوع فيلد record = نام ركورد
" " نوع فيلد : اسم فيلد
" " " "
; نام فيلد نوع فيلد " "
; نام فيلد آدرس * نام ساختمان struct ; نوع فيلد : نام فيلد
}; ; نام اشاره گر : اسم فيلد آدرس
End;
نكته : در زبان C براي تعريف اشاره گر هاي خارجي داريم :
C پاسكال
; نام اشاره گر * نام ساختمان struct
براي ايجاد گره داريم
C پاسكال
((نام ساختمان struct)sizeof)Malloc ( *نام ساختمان struct)= نام اشاره گر ساختمان var ; نام ركورد : نام متغير

کيفيت مقاله :
عالی خوب متوسط ضعيف


نگرشی بر COM+ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۵۴ مراجعه امروز
۵۰۷۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نگرشی بر COM+
نويسنده : Inprise
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱۲/۱۳۸۱ اين مقاله ۷۵۰ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.
مقدمه :
يكي از برترين تكنولوژي هائي كه مايكروسافت به عالم نرم افزار معرفي نمود ، مدل طراحي اشياء فاقد وابستگي به محيط پياده سازي ، يعني همان COM ميباشد .

طي ساليان اخير ، تكنولوژي مزبور آنچنان مورد توجه برنامه نويسان و گسترش دهندگان نرم افزار قرار گرفت كه ، هيچ نرم افزار كاربردي و سازمان مقياسي (Enterprise-Level) بدون استفاده از توانائي هاي آن توفيقي نخواهد يافت .

هر چند كه نقائص موجود در مدل نگهداري ، توزيع و استفاده COM باعث شد ، مايكروسافت در جديد ترين سيستم توليد نرم افزار خود يعني NET. تغييرات اساسي و جدي در پياده سازي تكنولوژي اشيا مستقل انجام دهد ، اما با توجه به اهميت آخرين نسخه پيشرفته از اين تكنولوژي يعني +COM ، بر آن شدم تا با نگارش اين مقاله ، ضمن معرفي اجزا و مفاهيم ابتدائي اين تكنولوژي ، به نكاتي چند در باب استفاده صحيح از آن اشاره نمايم .

مفاهيم مفدماتي :
MTS (Microsoft Transaction Server ) و +COM هر دو رساننده يك مفهوم و پياده سازي هاي"تقريبا" يكسان از اين تكنولوژي تحت سيستم عاملهاي NT و 2000 سرور هستند .

MTS ضمن ارائه كليه مزاياي COM ، به شما امكان ميدهد :
الف) كنترل كاملي روي نحوه توليد ، برپائي و خاتمه استفاده از اشياء داشته باشيد . مدير سرور ضمن اشراف بر كليه جزئيات اشياء ، استفاده كنندگان ، منابع مورد استفاده توسط اشياء و ... توانائي اعمال تغييرات روي كليه تنظيمات فوق را داراست .

ب) برپائي قواعد خاص امنيتي براي استفاده از اشياء ، محدوده اختيارات استفاده كنندگان از اشياء ، زمان استفاده ، ميزان استفاده ، نحوه استفاده و ... همه و همه در اختيار مدير سرور بوده و محيط بسيار قدرتمند كنترل هويت ويندوز به مدير سرور امكان ميدهد كليه ضوابط مزبور را به عنوان مثال به گروه يا گروههاي خاصي از كاربران داده و منابع سرور را مديريت نمايد .

بهينه سازي استفاده از منابع همراه با انتقال امن اطلاعات :
مهمترين فايده استفاده از MTS بالا بردن توانائي مديران سيستم در كنترل انتقال اطلاعات در محيط اجراي برنامه همراه با بهينه سازي منابع مورد استفاده است .

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

راه حل :
اگر در نظر بگيريد كه استفاده كنندگان از اطلاعات بانك اطلاعاتي سازمان با سطوح مختلف اطلاعات ، نيازهاي مختلف مبتني بر قواعد سازمان و منابع محدود سخت افزاري بايد در محيطي " امن " ضمن برقراري ارتباط صحيح با مجموعه اطلاعات ، كمترين تاثير را از تغييرات احتمالي در قواعد تجاري ، صنعتي و ... ببينند يقينا" بايد از يك سيستم نرم افزاري توزيع شده (Distributed) مبتني بر COM استفاده كنيد كه بدينسان ، ضمن بهينه سازي منابع نرم افزاري و سخت افزاري مورد استفاده ، كمترين هزينه براي باز آرائي سيستم را خواهيد پرداخت .

مهندسي و طراحي :
در شبكه فرضي A سيستم اطلاعاتي ( بانك اطلاعاتي - Database يا محيط فرآهم كننده اطلاعات- Data provider ) به عنوان " لايه داده ها " ، اشياء +COM مورد نظر ، به عنوان رابط هاي كاربران با اطلاعات و بازوهاي فراهم كننده ابزار مديريتي براي مديران شبكه ، تحت عنوان " لايه ارتباط" و نرم افزارهاي كاربردي (Clients ) مورد استفاده كاربران به عنوان " لايه كاربردي" نام گذاري ميشوند .

"لايه داده ها " مستقل از جزئيات پياده سازي سيستم نرم افزاري و فقط بر پايه مهندسي دقيق سيستم و انتظاراتي كه طراحان از سيستم دارند انتخاب و طراحي ميگردد . پر واضح است هر زمان كه مجموعه فوق الذكر پاسخگوي نيازهاي سيستم نبود براحتي جاي خود را به محيط مناسبتر خواهد داد و گسترده ترين محيط سيستم يعني " لايه كاربردي " ( استفاده كنندگان از سيستم ) از اين تغيير متاثر نخواهند شد .

"لايه ارتباط" به عنوان هسته سيستم ، ضمن ايجاد ارتباط صحيح ، "امن" و بهينه با "لايه داده ها " و فراهم آوردن محيطي براي كنترل تكثير داده ها( Data Transaction ) روي سيستم ، در هر لحظه اين امكان را به طراحان سيستم ميدهد كه قواعد جديد ، رابط هاي جديد اتصال به "داده ها " ، مشخصات خاص امنيتي و ... را بر سيستم اعمال نمايند و دو لايه "داده ها " و " كاربردي" از اين تغييرات متاثر نگردند .

"لايه كاربردي" به عنوان محصول سيستم ، ضمن استفاده بهينه از منابع استفاده كنندگان و فرمان پذيري از " لايه ارتباط" ، همواره رابطي يكسان براي دسترسي به منابع مجاز را براي كاربران فراهم خواهد كرد . ( Thin Client )

پياده سازي :
در شبكه فرضي A نرم افزار Ms Sql Server به عنوان مدير "لايه داده ها" انتخاب و با توجه به انتظارات مديران سيستم ، بانك اطلاعاتي مطلوب روي آن طراحي و پياده سازي ميگردد . ( RDBMS )

"لايه ارتباط" به صورت يك MTS روي محيط ويندوز 2000 سرور فعال شده و ضمن ايفاي نقش بررسي هويت كاربران شبكه ، بسته به قوانين سيستم براي گروههاي مختلف ، منابع مور نياز آنها را فراهم مي آورد .

براي پياده سازي شي يا اشياء مستقل از محيط پياده سازي و فرمان پذير +COM از يكي از محيطهاي توليد نرم افزار مثل Visual Basiv يا ++ Visual C يا Delphi استفاده شده ، ضمن برقراي صحيح ارتباط به " لايه داده ها " و پياده سازي مكانيزم هاي مفيدي چون Caching ، Messenging و ... ، با سيستم تشخيص هويت محيط اجرا تماس برقرار نموده و براي سرويس دهي به متقاضيان كسب تكليف مينمايد .

"لايه كاربردي" كه تشكيل شده از برنامه هاي كاربردي مبتني بر ويندوز ، برنامه هاي وب و يا حتي MTS هاي ديگر ، نيز با محيطهاي سطح بالائي چون Delphi , Vb , Vc يا Power Builder , , ++C Borland و ... پيدا سازي شده و در محيط آنها هيچ وابستگي خاصي به نقش كاربر در نظر گرفته نميشود و برنامه نويس ، ابزار فوق را فقط براي نمايش آنچه "بايد" نمايش داده شود توليد نموده و امكان يكسان و فرمان پذير از MTS را براي ارتباط كاربر با سرور ايجاد مينمايد .

اكنون اين وظيفه طراحان اشياء است كه قواعد سازمان ( چه كسي ، چه زماني ، چگونه حق دارد از اطلاعات استفاده كند . چگونه به اطلاعات دسترسي داشته باشد . چگونه به اطلاعات سيستم بيفزايد . چگونه .... ) را با در نظر گرفتن تغييرات احتمالي در آينده ، هرچه انعطاف پذير تر طراحي نموده و ضمن ايجاد رابطهاي با پروتكلهاي معتبر ( مثل HTTP , SOAP , XML و ... )رابطي قدرتمند براي برنامه نويسان " لايه كاربردي" ايجاد كنند تا بدون درگير شدن در جزئيات لايه داده ها و قواعد سازمان فقط به كاربران و منابع محدود آنها بينديشند .

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

موفق ، مؤيد و سربلند باشيد .
اينپرايز

کيفيت مقاله :
عالی خوب متوسط ضعيف


لايه دوم ، كليد طلائي (2) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۵۷ مراجعه امروز
۵۰۷۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
لايه دوم ، كليد طلائي (2)
نويسنده : Inprise
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۱۲/۱۳۸۱ اين مقاله ۵۸۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
الف)يكي از مزاياي قابل توجه سيستم مديريتي جديد +COM قابليت Just in time activation است . نرم افزار سرويس گيرنده بعد از ارائه درخواست ايجاد يك نسخه از شي به مديريت سرور و دريافت اشاره گري به شي توليد شده ميتواند شي را براي مدتي ( بنا به شرايط پروژه بسيار كوتاه يا بسيار بلند ) تخريب نموده و سرور ، منابع مربوط به آن شي را آزاد خواهد كرد . ( منابعي از قبيل حافظه ، زمان پردازشي پردازنده و از همه مهمتر " مسير ارتباطي" شي با بانك اطلاعاتي ! ) بدين ترتيب ضمن اينكه سرور توانائي سرويس دهي به مشتريان بيشتري را خواهد داشت ( بهينه سازي منابع سرور ) ميتوان از لايه اول ( لايه داده ها – رجوع به مقاله قبلي ) نيز به نحو احسن استفاده نمود .

ب ) وجود خاصيت يكتائي بنام Object pooling باعث ميشود ، بنا به صلاحديد مدير سرور و شرايط پروژه ، نسخه توليد شده يك شي ، حتي پس از صدور دستور تخريب توسط سرويس گيرنده ، همچنان ، در محيطي خاص ، به حيات خود ادامه دهد . يقينا" اگر درخواست مجددي براي استفاده از آن شي توسط سرويس گيرنده اي صادر شود ، سرور مجبور به توليد مجدد آن شي ، تخصيص حافظه ( و از همه مهمتر ) صرف زمان براي برقراري مجدد ارتباط با منبع داده ها نخواهد بود . براي سرورهاي تك منظوره و كوچك مقياس كه اغلب سرويس گيرنده هاي آنها در موقعيتي مشابه قرار دارند ، اين قابليت به منزله افزايش صد در صد توانائي سرويس دهنده و مجموعا بالا رفتن كيفيت سيستم " درخواست – پاسخ" خواهد شد !

ج ) يكي ديگر از قابليتهاي منحصر به فرد+COM اعطاي توانائي Role based Security به محيط سرويس دهنده است . با تكيه بر اين تكنولوژي ، مديران لايه دوم مجبور به برقراري نظام كنترل هويت براي سيستم گرديده و هيچكدام از لايه هاي اول ( منبع داده ها – سيستم مديريت بانك اطلاعاتي و سرور هاي مربوط به آن ) و لايه سوم ( برنامه هاي كاربردي ) درگير مسائل امنيتي سيستم نخواهند شد . بدين ترتيب قواعد سازماني صرفا" يك لايه از سيستم را متاثر ساخته و با طراحي منعطف پروژه ميتوان سيستمي با طول عمر بالا و كمترين هزينه تغيير نرم افزار توليد نمود .

نوشتار بعدي به تشريح سيستم مديريت Event ها و خصوصيات آن پرداخته ، درك مفاهيم جديدي چون Event object را براي شما آسان خواهد ساخت .

موفق و مؤيد و سربلند باشيد . اينپرايز

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه ای بر PHP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۰۲ مراجعه امروز
۵۱۱۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه ای بر PHP
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۱۲/۱۳۸۱ اين مقاله ۷۱۹ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.
دنياي عجيبي است که تکنولوژي هاي مربوط به آن تار جهـــــــــــــــــــــــــــان گستر "World Wide Web " اغلب بدون پشتيباني کافي عرضه مي شوند و كـاربران اين تکنولوژي همه روزه با واژگـان جديدي بر خورد ميکنند که باعث سر در گمي آنهـــــــا مي شوند. براي نمونه مي توان به رشد نرم افزارهاي open source اشاره کرد كه عبارتند از:

برنامه هاي که بتوان آنها را گسترش داد و يا تغييراتي در ساختار آنها ايجاد کرد

متداول ترين اين برنامه هـــــا سيستم عامل Unix و به طور خاص Linux مي باشد. اين برنامه ها با وجود ثبات و پايداري ‚ داراي يک مشکل بزرگ است و آن دشواربودن آموختن اين برنامه ها مي باشد. کمبود راهنماهايي که به زبان ساده اين برنامه ها را به مبتديان آموزش دهد باعث شده است که اين دسته از نرم افزار ها از جــــايگاه واقعي خود دور نگاه داشته شوند. PHP يکي از زبانهاي اسکــريپتي open source است و ابزار مفيدي مي باشد که تا کنون علي رغم سادگي استفاده از آن هنوز به صورت شايسته اي از آن استقبال نشده است. اميد به خدا در طي اين دروس مــــا شما را با اين زبان اسکريپتي ساده و کارآمد آشنا خواهم کرد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


php چيست؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۰۵ مراجعه امروز
۵۱۲۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
php چيست؟
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۱۲/۱۳۸۱ اين مقاله ۷۹۹ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.
php در سال1994توسط Rasmus Lerdorf ايجاد شد و مخفف واژگــــــــــــــــــــــان Personal Home Pages به حساب مي آيد. با گسترش قابليتها و موارد استفـاده اين زبان php در معناي Hypertext Preprocessor به کــــــار گرفته شد. (عبارت پيش پردازشگر (Preprocessor) بدين معني است که php اطلاعــــــــات را قبل از تبديل به زبان Html پردازش مي کند. مطابق مطالب سايت وب رسمي php که در آدرس www.php.net قرار دارد php يک زبان اسکــــــــريپتي سمت سرويس دهنده (Html embeded , Cross-Platform ,(Server-side مي باشد.
سمت سرويس دهنده بودن php بدين معناست که تمام پردازشهــــــــــاي اين زبان برروي سرويس دهنده (Server) انجام مي گيرد.
يک سرويس دهنده در حقيقت يک کامپيوتر مخصوص مي باشد که صفحات وب در آنجا نگهداري مي شوند و از آنجا به مرورگروب کاربران منتقل مي شوند.
چگونگي ادامه اين روند را در روزهاي آينده توضيح مي دهم.
منظور از Cross - Platform بودن اين زبان اين است که بروي هر سيستم و با هر سيستم عاملي از قبيل : Unix , Windows NT, Macintosh , Os/2 اجــــــــــــــرا ميشوند.
توجه کنيد که منظور از سيستم عامل ‚ سيستم عامل هايي مي باشند که بر روي سرويس دهنده نصب مي شوند.
php نه تنها قابليت اجرا بر روي هر سيستم عاملي را دارا مي باشد بلکه بــــــــراي منتقل کردن برنامه هاي آن از يک سيستم عامل به سيستم عامل ديگر احتياج بــه تغييرات اندکي خواهيد داشت و حتي در بعضي از مـــــــــــــوارد بدون احتياج به هيچ تغييري مي توانيد يک برنامه به زبان php را از يک سيستم عــــــــــامل به سيستم عامل ديگر منتقل کنيد.
منظور از Html embeded بودن php اين است که دستورات اين زبــــــــــان در بين کدهاي html قرار مي گيرند. بنابراين برنامه نويسي به زبان php کمي پيچيده تر از برنامه نويسي به زبان Html به حساب مي آيد. php بر خلاف زبـــــــــــانهاي برنامه نويسي (Programming Languages) يک زبــــــــــــــــــــــــــــــــــــــــان اسکريپتي (Scripting Language) مي باشد به عبارت ديگر دستورات php بعد از رخداد يک رويداد (Event) اجرا مي شوند. اين رويدادها مي توانند شامل ارسال يک فرم رفتن به يک URL مشخص و يا مواد ديگر باشند متداولترين زبان اسکريپتي زبــــــــــــــــان Java Script مي باشد که معمولأ براي پاسخ به رويدادهاي کاربر در مرورگر وب بــه کار مي رود تفـــــاوت عمده Java Script با php در اين است که Java Script يک تکنولوژي سمت سرويس گيرنده (Client - side) مي باشد زبانهايي مــــــــــــــانند Java Script يا php تفسير شونده (Interpreted) ناميده مي شوند. به عبــارت ديگر براي اجرا به يک مفسر مانند مرورگر وب احتياج دارند.
اما زبــــــــــــــــــانهاي برنامه نويسي مانند C يا Java بعد از ترجمه به زبان ماشين (Compile) به خودي خود قابل اجراء مي باشند.
جديدترين نسخه php نسخه 4 اين زبان اسکـــــــريپتي مي باشد و کليه فايل ها و کدهايي که توي اين وبلاگ ارائه ميشه تحت اين نسخه کار ميکنند.امـــا يک مشکل هست که اکثر سرويس دهنده ها از نسخه 3 استفاده ميکنند .تفاوت اين دو نسخه php بسيار اندک هست و تغييرات مهم عمومأ در مسير اصــــــلاح عملکرد اين زبان صورت گرفته شده است.
در روزهاي بعد در مورد چگونگي اجراي php به صورت local هم توضيح خواهم داد

کيفيت مقاله :
عالی خوب متوسط ضعيف


PHP چگونه کار مي کند؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۰۸ مراجعه امروز
۵۱۲۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
PHP چگونه کار مي کند؟
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۱۲/۱۳۸۱ اين مقاله ۷۰۳ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
خوب از حالا به بعد يکم بحث را تخصصي تر کنيم ! در ادامــــــه مي خواهيم در مورد اين صحبت کنيم که : PHP چگونه کار مي کند؟ و ما چطوري مي توانيم برنامه هاي PHP رو اجرا کنيم و به چيزهاي احتياج داريم؟
همان طور که ميدانيد PHP يک زبان سمت سرويس گيرنده است! و اين بدان معني است که کدهاي نوشته شده به اين زبان در کامپيوتر ميزبان (Host) صفحــــــات وب قرار مي گيرد. براي مثال وقتي که شما به سايت وب www.php.com مي رويد ISP (Internet Servise Provider) شما در خواست (Request) شمـــــــــــا را به سرويس دهنده اي که اطلاعت اين سايت را نگهداري مي کند ارسال مي کند. در اين هنگام سرويس دهنده بعد از خواندن کدهاي PHP آنهــــا را پردازش مي کند . براي مثال در اين مورد PHP به سرويس دهنده فرمان مي دهد که اطلاعــــات يک صفحه وب را به صورت برچسبهاي HTML به مرورگر شما منتقل کند بنابراين PHP يک صفحه HTML را توليد مي کند. اين حالت با هنگامي که صفحه ار ابتدا با کدهـــاي HTML طراحي شده باشد تفاوت دارد در حالت دوم تنها يک درخواست به سرويس دهنده ارســــال مي شود و سرويس دهنده نيز اطلات HTML موجود را به مرورگر کــــــــــــاربر منتقل مي کند بنابراين براي مرورگر کاربر تفـاوتي بين home.html و home.php وجود ندارد اما تفاوت عمده اي بين اين دو حالت وجود دارد و آن اين است که در حــــــــــالت اول صفحه بصورت ديناميک توسط سرويس دهنده توليد شده است ولي در حـــالت دوم به صورت بدين صورت نيست و ممکن است براي مثال تفاوتي بين اينکه کــــاربر قبلا اين صفحه را بازديد کرده يا براي بار اول است که بازديد مي کند وجود داشته باشد. پس هر آنچه PHP انجام مي دهد در همان سمت سرويس دهنده انجام مي دهد و سپس اطلاعات مناسب را به سرويس گيرنده منتقل مي کند. مهمترين نيــــاز براي کار با PHP دسترسي به سرويس دهنده اي مي باشد که PHP را پشتيباني کند.
قبلا گفتم که PHP يک زبان سمت سرويس دهنده مي باشد.
براي مطمئن شدن در اين مورد که آيا سرويس دهنده شمــــــــــــا از PHP استفــاده مي کند يا نه مي توانيد گوشي تلفن رو برداريد شماره آنها رو بگيريد و از ايشــــــان سئوال كنيد :))
در ادامه در مورد اينکه چطوري مي توانيد سيستم خودتان را به يک سرويس دهنده تبديل کنيد و چطوري مي توانيد سرويس دهنده اي را که خودتـان راه انداخته ايد به PHP مجهز کنيد توضيح خواهم داد.
براي اينکــــــــــه شما سيستم خودتان را به يک سرويس دهنده تبديل کنيد اول بايد مطمئن شديد که آيا سيستم عاملي که از آن استفــاده مي کنيد قدرت اين را دارد که به يک سرويس دهنده تبديل شود يا نه؟ منظورم اين است که آيا اين نسخــه از سيستم عامل شما قابليت تبديل شدن به يک Web Server رو داراست يا نه ؟ تا جايي که من اطلاعات دارم سيستم عامل هاي که PHP مي تواند روي آنهـــــا نصب گردد عبارتند از : Unix,Windows, Macintosh , Os/2 Linux
البته بحث ما بيشتر پيرامون دو سيستم عاملخواهد بود: Linux و Windows .
در درسهاي بعدي منتظر اين باشيد که چگونه مي توانيد سيستم خودتـان را به يک Web Serve تبديل کنيد و چطـــــــــوري مي توانيد آن رو پيکر بندي کنيد که از PHP پشتيباني کند! پس با ما باشيد.....

کيفيت مقاله :
عالی خوب متوسط ضعيف


چرا PHP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۱۱ مراجعه امروز
۵۱۲۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چرا PHP
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۱۲/۱۳۸۱ اين مقاله ۶۸۷ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
خوب امروز خيلي حرف داريم واسه گفتن که اميدوارم سرتون رو درد نياره.
اولين چيزي که مي خواهم در موردش توضيح دهم اين است که به چه علتي ما از PHP استفـاده مي کنيم؟ PHP در مقايسه با تکنولوژي هاي مشــابه سريعتر بهتر و آسانتر است. از جمله تکنولوژي هــاي مشابه براي طراحي يک سايت وب مي توان به اين موارد اشاره کرد :
اسکريپت هاي Common Gateway interface) CGI) که معمولا به زبان Perl نوشته مي شوند و ASP . مزيتي که PHP در مقــــابل HTML دارد اين است که HTML يک سيستم محدود به حساب مي آيد و توانايي ايجاد ارتباط متقابل با کاربر را ندارد. يک صفحه HTML ساده توانايي پاسخ به اعمال کاربر را ندارد اما با استفاده از PHP شما مي توانيد صفحاتي بر اساس سيستم عامل کاربر و يا تاريخ مشـاهده صفحه تنظيم كنيد . همچنين PHP مي تواند با فايل ها يا پايگاههــــــــاي داده (DataBase) ارتباط بر قرار کند و بسياري عمليات ديگر که HTML قادر به انجام به آنها نمي باشد. شايد يک سوال براي شما به وجود بياد که چــــرا يک طراح وب بهتر است که از زبان PHP به جاي زبانهــاي مانند CGI و ASP و يا JSP براي طراحي سـايت دينــــــــاميک استفاده کند؟
دليل اول سرعت بيشتر PHP چه در برنامه نويسي و ايجاد برنامه هايي به اين زبان و چه در اجرا مي باشد. همچنين PHP براي يادگيري بسيار ساده مي باشد و افــراد بدون نياز به زمينه هاي قبلي در برنامه نويسي و تنهــــــــــــا با يادگيري دستورات و راهنماهايي که وجود دارد مي توانند اين زبان را ياد بگيرند.
دومين دليل اين است که PHP به صورت اختصاصي تنها براي ايجاد صفحـــــــــــــــات ديناميک طراحي شده است. امـــا Perl و VbScript و يا Java اينگونه نيستند و به همين دليل PHP سريعتر و ساده تر از تکنولوژي هاي جايگزين مي باشد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


نصب و پيكر بندي PHP قسمت اول ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۱۴ مراجعه امروز
۵۱۳۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نصب و پيكر بندي PHP قسمت اول
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۱۲/۱۳۸۱ اين مقاله ۷۹۶ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.
در درس امروز مي خوام در مورد نصب و پيکر بندي php بر روي دو سيستم عــــامل linux و Windows توضيح بدم.
اولين چيزي که بايد بهش بپردازيم اين است که ما از چه نوع سيستم عــــــــــاملي استفاده مي کنيم يعني سيستم عاملي که ما از استفاده مي کنيم قــابليت نصب php رو داره ؟ يا نه؟
من تو درسهاي قبلي اين مسئله رو توضيح دادم و گفتم که php روي چــه سيستم عامل هاي کار مي کنه و نصب ميشه. حالا ما مي خواهيم ياد بگيرييم که چطــوري مي توانيم برنامه هايي که به زبان php مي نويسيم رو اول رو سيستم خودمــــــون تست و اجرا کنيم و بعد اون رو منتقل کنيم به يک سيستم ديگه که احتمالا همـــون سرور است.
اولين کاري که بايد انجام بديم اينکه از يک نرم افزاري استفاده کنيم که قـابليت اين رو داشته باشه که سيستم ما رو به يک وب سرور تبديل کنه! من وقتي به Hit هاي سايت نگــــاه مي کردم مي ديدم که اکثريتي که اين وبلاگ رو مي بينن از سيستم عامل ويندوز استفاده مي کنند پس براي همين اول روش اجراي php رو بــــــــــــروي Windows آموزش خواهم داد بعد از اون در مورد Linux هم صحبت مي کنيم! براي اينکه بتونيم سيستم عامل ويندوز pc خودتون رو به يک وب سرور که بتونـــه php رو پشتيباني کنه تبديل کنيد 3 راه وجود داره!
" اگر شما با ويندوزي غير از XP يا NT يـــا 2000 کار مي کنيد بايد از راه اول استفاده کنيد و اگر نه بايد از راه دوم استفاده کنيد راه سوم رو هم مي شه بـــــــروي تمامي ويندوز ها استفاده کرد فقط يک نکته کـــــــه بايد روي ويندوز نسخه هاي XP يا NT يا 2000 - IIS رو غير فعال کنيد که بتوانيد استفاده کنيد! "
ابتدا راه دوم رو توضيح ميدم که روش استاندارد استفـــــاده از php در windows مي باشد. ما در اين روش از IIS استفاده مي کنيم. IIS مخفف (Internet Information Server) مي باشد که با کمک آن مي توان سرويس هايي از قبيل www و همچنين ftp که مربوط به دريافت فايل مي شود و همچنين چندين سرويس ديگر را استفــاده کرد که البته خارج از بحث ما هست. IIS در حال حاضر در دو نسخه پرکاربرد 4 بــراي ويندوز NT و 5 براي ويندوز هاي XP و 2000 وجود دارد. حالا مي خــواهيم روش نصب IIS رو توضيح بدم اين روش نصب IIS در ويندوز هاي XP و NT و 2000 تقريبــــا به يک شکل مي باشد و مي تونيد با ياد گرفتن يکي از اونها IIS رو در ويندوز هــاي مختلف نصب کنيد.
براي نصب IIS ابتدا بايد از منوي START گزينه Settings و در نهـــايت گزينه Control Panel را انتخاب کنيد تا پنجره موسوم به کنتر پنل باز شود سپس از پنجـــــره کنترل پنل گزينه Add or Remove Programs را انتخاب کرده و آن را اجرا نماييد بعد از بــــاز شدن پنجره Add or Remove Programs از کليد هاي سمت چپ گــــــــــــــــــــــزينه Add/Remove Windows Components را انتخاب کرده و بعد از اندکي صبر پنجـــــــره Windows Components Wizard باز ميشود بعد از باز شدن از کـــــادر Compunents گيزينه Internet Information Server(IIS) را چک دار کنيد.
توجه : چنان چه رنگ زمينه Chek Box گزينه فوق تيره بود بدين مفهوم است که زير گروه هاي اين گزينه غير فعال مي باشد و بايد چک دار شوند براي چک دار کردن آنها بايد بروي آن گزينه دوبار کليک کرده و از پنجره اي که باز خواهد شد گزينه هايي کــه فعال نمي باشد فعال نماييد تا کليه سرويس هاي يا زيرگروه هاي به طور کـــــــــامل انتخاب و نصب شود.
بعد از انتخاب گزينه مورد نظر کليد Next را فشار داده تا به مرحله بعد نصب برويد. در اين مرحله گزينه هاي مرحله قبل مورد پردازش قرار مي گيرد و کليه تغيرات اعمـــــال مي شود . چنانچه شمـــا گزينه اي را حذف ( غير فعال ) کرده باشيد در اين قسمت از سيستم پاک خواهد شد و چنانچه گزينه اي را فعال ( انتخاب ) کــــــرده باشيد در اين قسمت به سيستم اضافه خواهد شد.
توجه: چنان چه گزينه اي را فعال کرده باشيد در اين مرحلــــــــــه احتياج به CD نصب ويندوز مورد نظر خواهيد داشت يا اگر فايل هــــــــــاي نصبي ويندوز را بروي سيستم خودتون داشته باشيد به اون احتياج پيدا خواهيد کرد چون بايد فـــايل هاي مربوط به پيکربندي IIS را از CD و يا Hard Disck خوانده شود و بر روي سيستم شمـــــا کپي گردد.
بعد از اتمام اين مرحله ‚ نصب به مرحله پاياني خواهد رسيد و در اين قسمت شما بايد دکمه Finish را فشار داده و بعد از اندکي صبر هم اکنون IIS بـــــر روي سيستم شما نصب مي باشد و شما مي توانيد از آن استفاده کنيد.
خوب حالا بعد از نصب IIS شما بايد IIS رو پيکربندي کنيد که بتونيد از اون استفـاده کنيد. براي پيکر بندي IIS شما بايد به Control Panel رفته و گـــزينه Administrative Tools را انتخاب کرده و از پنجره Administrative Tools گزينه Internet Information Server را انتخاب کرده و بعد از اجراي اين برنامه گزينه هاي مربوط به پيکـــربندي IIS در پيش روي شماست و شما مي توانيد IIS خود را منطبق بر ميل خود پيکـــربندي کنيد. ( چون پيکربندي IIS خارج از بحث مـــاست پس از توضيح در مورد اون خوداري مي کنم چناچه سئوالي در اين مورد داشتيد مي تونيد به من ايميل بزنيد )
خوب حالا که نصب IIS رو ياد گرفتيد و IIS بر روي سيستم شمـــــا نصب شده است بايد آن را براي استفاده از PHP آماده کنيم. براي اين کـــــــار احتياج به نصب نرم افزار PHP را بر روي سيستم داريم که در ادامه روش نصب PHP رو ياد خواهم داد.
براي نصب PHP ابتدا بايد نسخه مورد نظر PHP را تهيه کنيد و ترجيحا از آخــــــــــــرين نسخه اين نرم افزار استفـــــــاده کنيد که نسخه 4.3 اين نرم افزار مي باشد که مي توانيد از اينجا دريافت کنيد.
بعد از دريافت نسخه مورد نظر شما بايد مراحل زير را براي نصب دنبال کنيد. ابتدا بر روي فايل اجرايي PHP کليک کرده و آن را اجرا نماييد(معمولا فايل اجرايي PHP با نـام php-4.3.0-installer مي باشد)
بعد از باز شدن پنجره php 4.3.0 installation بعد از کمي صبر پنجره Welcome بـــاز خواهد شد. سپس دکمه Next را فشار دهيد تا به مرحله بعدي Wizard کنتـــــــــرل انتقال يابد.
بعد از فشار دکمه Next پنجره License Agreement باز خواهد شد در اين پنجره بايد دکمه I Agree را انتخاب کنيد تا موافقت نامه PHP مورد تاييد شما قرار گيرد.
بعد از تاييد پنجره Installation Type را خواهيد ديد کــه داراي دو گزينه Standard و Advanced مي باشد که شما گزينه Advanced را چک دار کنيد (البته لازم به ذکــر است که در موقعي که شما گزينه Advanced را انتخاب مي کنيد تنظيمــــــــــــــــات پيکربندي بيشتري نسبت به گزينه استاندارد در اختيار داريد!)
بعد از فشار دادن دکمه Next پنجـــــــره موسوم به Choose Destination Lovation را مشاهده خواهيد کرد که در اين پنجره مي توانيد مسير نصب فـــــــــايل هاي PHP را مشخص کنيد.
با فشار دادن دکمه Next پنجره Backup Replaced Files را مشاهـده خواهيد کرد که شما در اين پنجره مي توانيد محل قرار گيري فايل هاي Back up را مشخص کنيد. همچنين مي توانيد به PHP بگوييد آيا براي فايل هاي شما Back up تهيه کند يـــــــا خير؟
بعد از فشار دادن دکمه Next پنجره Choose Upload Temporary Directory نمــايش داده خواهد شد که در اين اينجا محل قرار گيري فايلهاي موقتي که براي اجــــــــــراي برنامه هاي PHP به آن احتياج دارد مشخص مي شود.
با فشار دکمه Next پنجره Choose Session Save Directory باز خواهد شد که شما مي توانيد محل ذخيره کردن متغيير هاي Session (در درسهاي بعد توضيح خواهــم داد) را مشخص کنيد.
بعد از فشار دکمه Next پنجره Mail Configuration باز خواهد شد که شمــــــــــا بايد تنظيمات مربوط به Smtp Server و ايميل آدرس پيش فرض را وارد کنيد (در صورتي که به اين گزينه آشنايي نداريد مي توانيد تنضيمات پيش فرض را قبول کــرده و بدون اعمال تغييرات کليد Next را فشار دهيد )
با فشار دکمه Next پنجره Error Reporting Level پديدار خواهد شد که شمـــــا مي توانيد سطح گزارشــــــــــــــات خطاهاي احتمالي که در برنامه هاي به وجود مي آيد مشخص کنيد که در اينجا شما بهتر است تنظيمات پيش فرض را قبول کرده و بــــــه مرحله بعدي برويد.
سپس با فشار دکمه Next پنجره Server Type رو مشاهده خواهيد کـــــــــرد در اين پنجره شما بايد نوع Web server سيستم خودتون رو به PHP معرفـي کنيد در اين جا شما بايد گزينه Microsoft IIS 4 or Higher رو انتخاب نماييد چون از ويندوز هــاي XP و NT و 2000 استفاده مي کنيد .
بعد از فشار دکمه Next به پنجره File Extensions خـــواهيد رسيد که در اين قسمت شما امکان اين را خواهيد داشت که براي WebServer خودتون مشخص کنيد کــــــه چه نوع فايلهاي را براي اجرا اسکريپت هاي PHP در نظـــــر بگيرد.(در اين مرحله بهتر است تمام 3 گزينه را انتخاب کنيد.)
بعد از فشار دادن کليد Next ‚ پنجره Start Installation باز خواهد شد که از شمــــــا اجازه نصب PHP و کپي کردن فايل هاي رو روي سيستم شما را خواستار است کــه شما با فشار کليد Next به اون اين اجازه رو خواهيد داد.
بعد از اين کار پنجره مربوط به Installing باز خواهد شد که شما از عمل کــــــرد کپي فايل ها مطلع خواهيد شد. بعد از اتمام اين مرحله چنان چه فايل "php.ini" قبـلا در دايرکتوري System32 شما وجود داشته باشد پيغامي مبني بر اينکه اين فايل قبـــلا وجود دارد و شما چنانچه مايل هستيد اين فايل پاک شود و نسخه جديد فـــــــايل را جايگزين کند که گزينه ok را براي تاييد کليک کنيد.(توجه داشته باشيد اين گـزينه در صورتي نمايش داده مي شود که فايل مورد نظر وجود داشته باشد)
بعد از اتمام اين مراحل پنجره IIS Scripttamp Node Selection را مشــاهده خواهيد کرد که شما بايد در اين قسمت کليد Select All را فشار داد و دکمه ok را بزنيد.
در اينجا نصب PHP به پيان رسيد و با پيغام تبريک و موفقيت شمـــــــــا در نصب PHP مواجه خواهيد شد و با فشارداد کليد Ok آن را تاييد کنيد. اميد به خــــــدا در روزهاي بعد نصب php در windows هاي 98 و ME و ... را توضيح خواهم داد. همچنين کـــــار با PWS و Eesy PHP را نيز ياد خواهيد گرفت. پس با ما باشيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


نصب و پيكر بندي PHP (قسمت دوم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۱۷ مراجعه امروز
۵۱۳۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نصب و پيكر بندي PHP (قسمت دوم)
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۵/۱۲/۱۳۸۱ اين مقاله ۷۲۲ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.
در درس قبلي نصب و پيکر بندي php را در windows هاي XP و ME و 2000 توضيح دادم ولي قبل از اينکه درس امروز رو شروع کنم يک چند نکته بود که بايد مي گفتم!
دوستاني در مورد اينکه چرا php که معمولا بر روي Linux اجرا مي شود و استفاده ميشه رو من دارم رو ويندوز ياد ميدم?
بابا اگه کل مطلب هاي که تا حالا post کردم بخونيد متوجه مي شيد من گفتم روش نصب php رو بر روي ويندوز اول آموزش ميدم چون اکثريتي که دارن اين بلاگ رو مي خونند از ويندوز استفاده مي کنند چشم Linux و Apachi رو هم توضيح خواهم داد . ولي بايد کمي صبر کنيد!
حالا مي خواييم ياد بگيريم که چطوري ميشه php رو بر روي ساير ويندوزها نصب کرد و از اون استفاده کرد.بهترين روش براي اين کار استفاده از نرم افزارهايي هست که عمل يک وب سرور رو شبيه سازي مي کنند مثل PWS يا Easy PHP.
اول روش نصب PWS و در روزهاي بعد هم کار کردن با Easy PHP رو به شما آموزش خواهم داد.
Personal Web Server يکي از محصولات شرکت Microsoft مي باشد که بروي ويندوزهاي غير از XP و NT و 2000 کاربرد دارد و براي برنامه نويسان وب بسيار آشنا است! شما با کمک اين نرم افزار مي تونيد سيستم عامل ويندوز خودتون رو به يک وب سرور تبديل کنيد و از او بهره لازم ببريد.ما در اين جا براي اجراي PHP از PWS کمک مي گيريم پس اول بايد ياد بگيريم چطوري مي تونيم يک PWS رو نصب کنيم. PWS رو از اينجا مي تونيد دريافت کنيد بعد از دريافت مراحل زير رو براي نصب PWS بايد طي کنيد تا PWS بر روي سيستم شما نصب شود.
براي نصب بايد ابتدا بروي فايل Setup.exe کليک کرده و آن را اجرا کنيم.بعد از اجراي برنامه Setup اين پنجره باز خواهد شد که شما بايد کمي صبر کنيد تا برنامه نصب خود را براي اجراي Wizard نصب آماده کند.
سپس پنجره Microsoft Personal Web Server Setup باز خواهد شد که اطلاعاتي در مورد نرم افزار PWS به شما مي دهد و توضيحات مختصري در مورد اين برنامه.
بعد از فشار دکمه Next شما مي توانيد به مرحله بعدي برويد که در اين مرحله پنجره Microsoft Personal Web Server Setup با سر فصل End User License Agreeement باز خواهد شد که در اي مرحله توضيحاتي در مورد Pack برنامه داده شد و تاييد نامه اي براي کپي رايت نرم افزار که با فشار دادن دکمه Accept مي توانيد به مرحله بعد برويد.
در اين مرحله شما بايد يکي از سه حالت نصب را انتخاب کنيد که شما در اين قسمت گزينه Typical را انتخاب نمايد ( دو گزينه ديگر در اين مرحله گزينه Minimum برا نصب برنامه به صورت فشرده مي باشد که در اين گزينه از حداقل امکانات استفاده مي شود و گزينه Custom براي اين منظور است که کاربر بتواند خود نسبت به نصب Components هاي برنامه به صورت دستي اقدام نمايد . گزينه Typical حالت استاندارد نصب مي باشد.)
بعد از فشار دادن دکمه Typical پنجره ...Microsoft Personal Web Server Version باز خواهد شد که مسير Root اصلي را بايد در اين مرحله مشخص کنيد.(منظور از روت اصلي هما شاخه WWW مي باشد که شما بايد فايل هاي ASP يا PHP خودتون رو براي اجرا در اين شاخه قرار دهيد تا بتونيد اون ها رو از طريق کاوشگر خودتون اجرا کنيد.)در اين مرحله شما مي توانيد با استفاده از گزينه Browse براي تغيير مسير فايل اقدام کنيد. دو کادر ديگه اي که در اين قسمت غير فعال مي باشد مربوط به سرويس FTP مي باشد که ما به آن احتياج نداريم.(براي فعال کردن آنها مي توانيد از گزينه Custom استفاده کنيد.)
بعد از تعيين مسير Root با فشار دکمه Next به مرحله بعدي کنترل را انتقال داد تا پنجره اي با سرفصل Completing Installation باز شود در اين مرحله شما از روند کپي و نصب فايل ها بر روي سيستم اطلاع پيدا خواهيد کرد.
بعد از اتمام اين قسمت Wizard نصب پيان يافته و PWS با تشکر کردن از شما در اين پنجره براي انتخاب اين نرم افزار از شما مي خواهد که با فشار دکمه Finish به برنامه نصب خاتمه دهيد.
بعد از فشار دکمه Finish اين پنجره رو خواهيد ديد که عمل تنظيمات رو بر روي سيستم شما اعمال مي کند.
اکنون PWS بر روي سيستم شما نصب شده و شما مي تونيد از اون استفاده کنيد.
حالا بايد PHP رو بر روي PWS نصب کنيم تا بتونيم از اون استفاده کنيم .
براي اين کار ‚ کار زيادي نمي خواد انجام بدين کافيه فقط در پنجره Server Type گزينه Microsoft Pws On Windows 9x or ME رو انتخاب کنيد و چنان چه از ويندوز NT Workstation استفاده مي کنيد گزينه Microstft PWS on NT Workstation را انتخاب کنيد و ديگر در احتياج به تغييرات در جاي ديگه اي وجود ندارد.حالا شما با موفقيت PWS رو نصب کرديد و PHP رو روي اون فعال کرديد .

منتظر باشيد تا راه سوم رو هم يادتون بدم يعني استفاده از Easy PHP !

کيفيت مقاله :
عالی خوب متوسط ضعيف


نرم افزار Easy PHP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۲۰ مراجعه امروز
۵۱۳۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نرم افزار Easy PHP
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۵/۱۲/۱۳۸۱ اين مقاله ۷۹۱ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.
در درس امروز مي خواهيم در مورد چگونگي استفاد از نرم افزار Esay PHP صحبت کنيم.
در اين درس مرحله سوم يا آخرين مرحله نصب و پيکربندي PHP رو ياد مي گيريد. اول كمي توضيح بدم که Esay PHP چيه و چه کاري ميکنه! اين نرم افراز يک شبيه ساز وب سرور هست که مي تونه بروي کامپيوتر شما بدون نياز به IIS و PWS برنامه هاي PHP رو با استفاده از کاوشگر اينترنت اجرا کنه.
همچنين اين نرم افزار امکان استفاده از بانک اطلاعاتي مورد استفاده در PHP رو به شما ميده ‚ در درسهاي بعدي بيشتر در مورد بانکهاي اطلاعاتي صحبت مي کنيم! براي نصب و پيکربندي Esay PHP ابتدا بايد اون رو از اينجا دريافت کنيد و بعد مراحل زير رو براي نصب طي کنيد!
با کليک کردن روي فايل اجرايي "easyphp1-6_setup" مي توانيد Wizard نصب رو اجرا کنيد. با اجراي فايل نصب پيغامي رو مشاهده خواهيد کرد که در اون از شما براي نصب نرم افزار Esay PHP اجازه کسب مي کنه که شما با زدن دکمه YES کادر رو تاييد کرده و کار نصب رو ادامه مي دهيد.
سپس اين پنجره باز خواهد شد که به شما اطلاعاتي در مورد نرم افزار Esay PHP ميده که شما مي تونيد با زدن دکمه Suivant (من خودم تو زبان Wizard نصب اين موندم اگه کسي ميدونه چه زباني هست به من هم بگه!!!)مي توانيد به مرحله بعد بريد.
سپس پنجره Accord de Licence باز خواهد شد که شما با فشار دکمه Oui مي توانيد به مرحله بعدي برويد.
در اين مرحله از Wizard نصب مسيري که فايل هاي Esay PHP قراره در اونجا کپي شوند رو به شما نشان خواهد داد که شما مي توانيد اين مسير نصب رو عوض کنيد و با فشار دکمه Suivant > به کار خود ادامه دهيد.
در مرحله بعد محلي که براي قرار گرفتن ميانبر هاي Esay PHP در Programes رو مشخص مي کند که شما مي تونيد با فشار دکمه Suivant > به Wizard نصب ادامه دهيد و به مرحله بعدي برويد.
در اين مرحله از شما براي کپي کردن فايلهاي Esay PHP اجازه مي خواهد که شما با فشار دکمه Installer اين کادر را تاييد مي کنيد.
حال شما شاهد کپي شدن فايلها در مسير تعيين شده هستيد و بايد اندکي صبر کنيد تا عمل کپي انجام شود. بعد از اتمام کپي فايل از شما مي خواهد که سيستم را دوباره راه اندازي کنيد که شما با فشار دکمه Terminer اجازه اين کار را به برنامه خواهيد داد.
حالا بعد از دوباره راه اندازي سيستم در قسمت کازينه سيستم شمايل Esay PHP نمايش خواهد داده شد و شما هم اکنون مي توانيد با استفاده از مرورگر خودتون برنامه هاي PHP رو اجرا کنيد!
منتظر مفاهيم اوليه PHP باشيد!!! و آغاز کار کد نويسي.

کيفيت مقاله :
عالی خوب متوسط ضعيف


شروع كد نويسي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۲۳ مراجعه امروز
۵۱۳۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
شروع كد نويسي
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۵/۱۲/۱۳۸۱ اين مقاله ۷۰۴ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.
امروز در مورد شکل کلي ساختار برنامه هاي PHP و روش استفاده از PHP در ميان HTML صحبت ميكنيم و همچنين يک برنامه ساده براي شروع کار رو ياد مي گيريم!!!

براي شروع به آموختن هر زبان برنامه نويسي شما احتياج به اين خواهيد داشت که با قواعد دستوري ( syntax ) آن زبان آشنا شويد و اين همان چيزي است که در اين درس به آن مي پردازيم.

دستورات پايه
براي ايجاد اولين صفحه PHP شما دقيقا همان کاري را خواهيد کرد که براي ايجاد اولين صفحه HTML احتمالا انجام داده ايد.
دو تفاوت اساسي بين يک متن HTML استاندارد و يک متن PHP وجود دارد.
1- اسکريپتهاي PHP بايد در يک فايل با پسوند .قرار بگيرند php ( مانند index.php)
2- همچنين براي جدا كردن کدهاي PHP از کدهاي HTML بايد کدهاي PHP در بين برچسبهاي
تا كنون دو نکته از شکل دستوري PHP رو ياد گرفتيد حالا باهم روند ايجاد يک صفحه نمونه يا بهتر بگم اولين برنامه PHP خود را دنبال مي کنيم.

ابتدا يک ويراشگر متن مانند Notepad و يا هر برنامه اي که مي پسنديد را باز کنيد.
توضيح : شما مي توانيد از هر ويرايشگر متني براي نوشتن دستورات PHP استفاده کنيد و همچنين مي توانيد از نرم افزار هايي که مخصوص برنامه نويسان وب مي باشد استفاده کنيد مانند Home Site و Macromedia Dreamweaver و Microsoft FrontPage و ...

از منوي فايل گزينه NEW را براي ايجاد يک سند جديد انتخاب کنيد.
حال عبارتهاي زير را TYPE کنيد.

<html>
<head>
<title>First PHP Script</title>
</head>
<body>
<?php
?>
</body>
</html>

ساختار بالا ساده ترين ساختار براي يک سند HTML که از برچسب هاي PHP استفاده مي کند مي باشد.
تمام اسکريپتهاي PHP بايد در بين برچسبهاي مخصوص آن قرار داده شوند تا به عنوان کدهاي PHP در نظر گرفته شوند. در حاليکه تمام کدهاي خارج اين دو برچسب معمولا به صورت کدهاي HTML استاندارد به مرورگر کاربر منتقل مي شوند.
حال با استفاده از منوي فايل گرينه Save As را انتخاب کنيد و نام فايل را frist.php قرار دهيد و در مسير root اصلي کامپيوتر خود قرار دهيد.هم اکنون شما موفق به ايجاد اولين اسکريپت PHP خود شديد و زمان آن رسيده است که حقيقتا عملي را با استفاده از اسکريپت خود انجام دهيد.
در اين تمرين ما از تابع phpinfo() استفاده مي کنيم تا اطلاعاتي مخصوص نصب PHP در سرويس دهنده را به مرورگر ارسال مي کند.براي اضافه کردن تابع phpinfo() به اسکريپت خود فايل frist.php را در ويرايشگر متن خود باز کنيد.سپس در بين دو برچسب () يک خط جديد ايجاد کنيد و عبارت phpinfo(); را تايپ کنيد حال اسکريپت خود را ذخيره کنيد و آن را با استفاده از مرورگر اجرا کنيد.

توضيح : کليه دستورات PHP به علامت سيمي کالون (;) ختم مي شود عدم گذاشتن اين علامت باعث خطا در اجراي روند برنامه مي شود و يکي از خطا هاي معمول در برنامه هاي PHP مي باشد.

با اجراي اسکريپت خود در مرورگر اين صفحه را خواهيد ديد که در آن اطلاعات مربوط به نصب و پشتيباني PHP قرار دارد.

چند نکته :
1- قرار ندادن علامت ; يکي از اشتباهات رايج در PHP مي باشد.

2- از آنجايي که انتهاي هر دستور با يک علامت ; مشخص مي شود شما مي توانيد چندين دستور را پشت سرهم در يک خط تايپ کنيد و در انتهاي هر دستور يک علامت ; قرار دهيد هر چند که اين کار رو پيشنهاد نمي کنم.

3- هر دستور در PHP يک کد قابل اجرا محسوب ميشه! به عبارت ديگه يک مدل PHP بعد از هر دستور ( مانند print() و يا phpinfo() ) يک فرمان را اجرا مي کند در مقابل ساختارهايي مانند خطوط توضيح ( Comment Line) برچسبهاي PHP ( php Tag) و يا ساختارهاي کنترلي ( شرطها حلقه ها و غيره ) يک دستور محسوب نمي شوند بنابراين به يک ; نيز ختم نمي شوند .

در درس بعدي چند مثال ساده ديگه به همراه چاپ يک پيغام در مرورگر و همچنين فرستادن کد هاي HTML به مرورگر از طريق PHP و همچنين افزودن توضيحات به اسکريپت صحبت خواهيم کرد

کيفيت مقاله :
عالی خوب متوسط ضعيف


ارسال اطلاعات به مرروگر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۲۶ مراجعه امروز
۵۱۴۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ارسال اطلاعات به مرروگر
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۵/۱۲/۱۳۸۱ اين مقاله ۶۴۸ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
اميدوارم که از درس قبلي استفاده لازم رو برده باشيد و همچنين با اجراي اولين اسکريپت خود به زبان PHP مشکلي نداشته باشيد!!!

در امروز مي خواهيم در مورد اينکه چطوري ميشه يک متن رو به مرورگر ارسال کرد و همچنين ارسال کد HTML به مرورگر رو ياد بگيريم.

مسلما اگر شما تنها از PHP براي مطلع شدن از ويژگيهاي نصب شده بر روي سرويس دهنده استفاده کنيد استفاده مفيدي از آن نخواهيد کرد!

يکي از متداولترين اعمالي که شما با استفاده از PHP انجام خواهيد داد ارسال اطلاعات به مرورگر به صورت برچسبهاي HTML و يا متن ساده مي باشد. اين عمل در PHP با استفاده از تابع PRINT() صورت مي گيرد.

توضيح : تابع print() تنها تابعي نيست که براي ارسال اطلاعات به مرورگر استفاده مي شود.

مثال:
براي چاپ يک پيغام ساده :
ابتدا يک فايل جديد در ويرايش گر خود ايجاد کنيد.
سپس دستورات زير را در فايل تايپ نموده و فايل را با نام print.php ذخيره کنيد.

<html>
<head>
<title> PHP Script </title>
</head>
<body>
<?php print ( "Hello! World!");?>
</body>
</html>

بعد از اتمام کار تايپ فايل را با استفاده از مرورگر خود اجرا کنيد.حال شما پيغام Hello! World! را در مرورگر خود مشاهده خواهيد کرد.

پس شما موفق شديد که يک پيغام رو در مرورگر خودتون نمايش بديد.

نکات:
1- توابع مختلفي براي ارسال متن به مروگر وجود دارند که شامل echo() و printf() نيز مي شوند. echo() در حقيقت همانند print() عمل مي کند بنابراين به جزئيات بيشتر در مورد آن نمي پردازيم. همچنين در مورد تابع printf() در درسهاي بعد توضيح خواهم داد.

2- شما مي توانيد در مورد تابع print از پرانتز استفاده نکنيد ولي حذف علامتهاي ( "...") quotation امکانپذير نمي باشد.
براي مثال شما مي توانيد عبارت print "Hello! World!" را تايپ کنيد .

ولي بهتر است که از پرانتز استفاده کنيد.

3- فراموشي در قرار دادن يکي از علامتهاي quotution و يا پرانتزها و يا علامت semicolon از اشتباهات رايج در استفاده از تابع print() مي باشد.

بنابراين به هنگام برخورد با اشکال در مورد اجراء اين دستور در مرحله اول وجود اين علائم را بررسي کنيد.

ارسال Html به مرورگر:
Html در حقيقت براي اعمال ويژگيهاي و جذابيتهاي خاص به يک متن ساده ايجاد شده است.

از آنجايي که HTML براي اعمال اين ويژگيها و جذابيتها برچسبهايي را بين متن ساده قرار مي دهد شما نيز براي فرستادن يک متن HTML به مرورگر بايد برچسبها را با استفاده از PHP به همراه اطلاعات ديگر ارسال کنيد.

ارسال يک متن + برچسبهاي HTML به مروگر:
ابتدا فايل print.php را در ويرايشگر خود باز کنيد.در خط هفتم بجاي عبارت Hello! World! عبارت زير را تايپ کنيد.

<center>Hello! World!</center>

حال تغييرات را ذخيره کنيد و اسکريپت خود را با استفاده از مرورگر خودتون اجرا کنيد.

نکات
1- برچسبهاي HTML که از علامتهاي Quotation استفاده مي کنند. ( مانند <font color = "#000000" > در چاپ متن توسط PHP مشکل ايجاد مي کنند! زيرا تابع print() نيز از اين علائم براي متن ارسالي خود استفاده مي کند.براي رهايي از اين مشکل قبل از اين علامتها در برچسبهاي HTML يک علامت (\lang1065) قرار دهيد براي مثال در اين حالت بايد عبارت زير را تايپ کنيد:

print ( "<font color="#000000\lang1065>");

در اين هنگام PHP به جاي تفسير علائم quotation به عنوان آغاز يا انتهاي يک عبارت تنها اين علامت را به مرورگر منتقل مي کند.

در درسهاي بعدي به مثالهايي از اين نو نيز برخورد خواهيم کرد و اميدوارم که درس امروز مورد استفاده قرار گرفته شده باشد.

در درسهاي بعدي منتظر نکات ديگر در مورد تکنيکهاي استفاده از دستورات HTML و استفاده از فضاهاي خالي در PHP و HTMl باشيد و همچنين ياد خواهيد گرفت چطوري توضيحات به اسکريپتهاي خود اضافه کنيد و در آخر هم در مورد متغيير ها صحبت خواهيم کرد!!!

کيفيت مقاله :
عالی خوب متوسط ضعيف


فضاهاي خالي و قرار دادن توضيحات در متن برنامه ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۲۹ مراجعه امروز
۵۱۴۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فضاهاي خالي و قرار دادن توضيحات در متن برنامه
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۵/۱۲/۱۳۸۱ اين مقاله ۵۹۲ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
در درس امروز مي خواهيم در مورد استفاده از فضا هاي خالي در PHP و HTML صحبت کنيم.

اگر کمي با HTML آشنا باشيد حتما مي دانيد که فضاهاي خالي ( مانند خطهاي خالي و يا کاراکتر جاي خالي ) در متن نوشته شده به اين زبان بدون اينکه تغييري در نمايش صفحه و يا تفسير کدهاي HTML داشته باشد مي توانند در ايجاد ساختار منظم و قابل فهم تر با ما کمک کنند. براي مثال : مي توانيد بين قسمتهاي مجزاي کدهاي خود يک خط خالي قرار دهيد و يا دستوراتي را که در داخل يک ساختار کنترلي قرار مي گيرند. از يک ستون مشخص آغاز کنيد. اين سازماندهي متن توسط فضاهاي خالي مي توانيد هم در کدهاي HTML و هم در کدهاي PHP استفاده کنيد.

سازماندهي متن توسط فضاهاي خالي در سه منطفه مجزا اثرات خود را نشان مي دهد.
در مرحله اول در اسکريپهاي PHP
مرحله بعد در اطلاعات ارسال شده توسط PHP به مرورگر وب( که معمولا در قالب HTML مي باشند)
و در آخر نيز در صفحه نمايش داده شده توسط مرورگر وب .

بنابراين براي سازماندهي متن در هر يک از اين سه منطقه بايد به روشهاي متمايزي متوسل شد.

به هنگام اسکريپت نويسي به زبان PHP توجه داشته باشيد که فضاهاي خالي عموما ( نه هميشه ) در نظر گرفته نمي شوند. تمام خطهاي خالي قرار گرفته شده در اسکريپت PHP تاثيري در نتيجه کار نخواهند داشت . کاراکتر هاي جاي خالي نيز به طور معمول توسط PHP در نظر گرفته نمي شوند.

استفاده از سويچ (\n) در PHP :
اين سويچ در تابع print() مورد استفاده قرار مي گيرد و کار آن ايجاد يک خط جديد در کد HTML فرستاده شده به مرورگر مي باشد.
مثال:

در اين مثال کاربرد سويچ \n در کد PHP و همچنين نتيجه عمل کردن سويچ در قبل از استفاده از آن و بعد از استفاده از آن را خواهيد ديد.

استفاده از سويچ \n در تابع print():

<html>
<head>
<title>Test Script</title>
</head>
<body>

<?php

print("<b><center>Hello, World!</center></b>\n");

?>
<body/>
</html>

اسکريپت بالا را اجرا کنيد.تغييري که در استفاده از سويچ \n در کد HTML خروجي ظاهر مي شود به صورت زير است.

<html>
<head>
<title>Test Script</title>

<head/>

<body>

<b><center>Hello, World!</center></b>

</body>

<html/>

ولي اگر از سويچ \n استفاده نشود کد HTML خروجي به صورت زير نمايش داده مي شود.

<html>

<head>

<title>Test Script</title>

<head/>

<body>

<body/><b><center>Hello, World!</center></b>

<html/>

نکات:
- يکي از مواردي که PHP فضاهاي خالي را در نظر مي گيرد فضاهاي خالي در تابع print مي باشد.در اين هنگام اين کاراکتر هاي جاي خالي به مرورگر ارسال مي شوند. هر چند در HTML نيز اين فضاها عموما در نظر گرفته نمي شوند.

-براي مشاهده متن ارسال شده به مرورگر خود و مشاهده تفاوت حاصل از قراردادن ترکيب \n از ويژگيهاي "View Source" و يا "View page source" در مرورگر خود استفاده کنيد.

افزودن توضيحات به اسکريپت هاي خود:
هر برنامه نويس بعد از مدتي متوجه اين مطلب مي شود که توضيحاتي که در طول برنامه براي خود ياداشت مي کند. بسيار در خواناتر شدن و درک دستورات برنامه در مراجعات بعدي موثر واقع مي شوند.اين ياداشتها باعث يادآوري چگونگي عملکرد برنامه شما مي شود. کامپيوتر نيز توضيحات (Comments) را در پردازش برنامه در نظر نمي گيرد.

PHP سه روش را براي افزودن توضيحات به برنامه پشتيباني مي کند.

شما مي توانيد با يکي از اين سه روش توضيحات را به اسکريپت خود بي افزاييد.

شما با قرار دادن يکي از علامتهاي // و يا # در ابتداي هر خط مطلب آن خط را به صورت يک توضيح تعريف مي کنيد. همچنين با به کار بردن اين علائم در وسط يک خط عبارت بعد از آنها در آن خط به صورت توضيح در نظر گرفته مي شود.

مثال:
در کد زير عبارت "Just a greeting" به صورت توضيح در نظر گرفته مي شود:

Print("Hello,World!");//Just a greeting

روش ديگر براي قرار دادن توضيح در اسکريپت PHP استفاده از علامتهاي /* و */ مي باشد.هر تعداد کلمه يا عبارت يا حتي خطهاي متوالي که بين اين دو علامت قرارگيرد به صورت توضيح در نظر گرفته مي شوند.

نکات:
- شما با استفاده /* و */ مي توانيد يک و يا چندين خط را به صورت توضيح در آوريد.

- برنامه نويسان مختلف از روشهاي مختلفي براي اضافه کردن توضيحات خود استفاده مي کنند.آنچه مهم است اين است که شما يک روش را انتخاب کنيد و هميشه از آن استفاده کنيد.

- توجه کنيد که اگر شما از برچسبهاي <-- و --!> درون اسکريپت PHP خود استفاده کنيد متن بين اين دو برچسب به صورت توضيح در نظر گرفته نمي شوند.

- از آنجايي که متن توضيح در PHP به مرورگر ارسال نمي شود.برنامه نويس مي تواند توضيحاتي که تنها خود او از آنها استفاده مي کند را در برچسبها PHP قرار دهد.

- ويرايش گر هاي پيشرفته مانند Home site و ... از رنگهاي متفاوتي براي توضيحات استفاده مي کنند. ( اين ويژگي در اسکرپت هاي برزگ مي تواند بسيار مفيد واقع شود.)

کيفيت مقاله :
عالی خوب متوسط ضعيف


انواع متغييرها ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۳۲ مراجعه امروز
۵۱۴۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انواع متغييرها
نويسنده : php class
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۱۵/۱۲/۱۳۸۱ اين مقاله ۶۱۵ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.
امروز مي خواهيم در مورد انواع متغيير ها صحبت کنيم و همچنين چگونگي به کار بردن متغيير هاي و آرايه ها در يک اسکريپت PHP.
براي تبديل صفحات ساده و ثابت به برنامه هاي ديناميک و سايت هاي جذاب در ابتدا شما احتياج به اين خواهيد داشت که بتوانيد اطلاعات را در اختيار بگيريد.متغيير ها همان ابزاري هستند که شما با استفاده از آن ها مي توانيد اطلاعات را در اختيار بگيريد و آنها را در دسترس خود قرار دهيد. متغيير ها يکي از مهمترين ابزارها و مفاهيم هر زبان برنامه نويسي محسوب مي شوند.

من در اينجا سه دسته مختلف از انواع متغيير ها را توضيح مي دهم.

1) اعداد (numbers)
2) رشته ها (String)
3) آرايه ها (arrays)

دسته اول شامل دو نوع متغيير است:

1)اعداد صحيح (integers)
2)اعداد اعشاري (floating - point) ( همچنين اعداد اعشاري با دقت مضاعف double)

اما از آنجايي که تفاوت چنداني در چگونگي به کار بردن اين دونوع متغيير وجود ندارد . اين دو را در يک دسته قرار مي دهيم.

PHP همچنين داراي يک نوع متغيير به نام شيء (object) مي باشد.

اعداد
نکته:اعداد به صورت اعشاري ( همراه با مميز ) و يا اعدا کسري از نوع متغييرهاي اعشاري محسوب مي شوند. براي مثال (1.0) در PHP يک عدد اعشاري به حساب مي آيد. توجه کنيد که در PHP اعداد به صورت کسري ذخيره نمي شوند بلکه معادل اعشاري خود تبديل شده و سپس ذخيره مي شوند.

مثالهايي از اعداد صحيح معتبر:

1 و 1972 و 1-

مثالهاي از اعداد اعشاري :

1.0 و 19.72 و 1.0-

همچنين مثالهاي که در دسته اعداد قرار نمي گيرند:

4/11 a1972 02.23.72

رشته ها
يک متغيير از نوع رشته اي (String) از ترکيب هر نوع کارکتري ( حروف - اعداد - علائم و جاي خالي ) مي تواند ساخته شود.اما اين کارکترها بايد در داخل يکي از علامتهاي Single(' ') Quotation و يا (" " ) Double Quotation قرار گيرند.

مثال:
HELLO , WORLD !""

"hello frist name ! "

"1 1/4"

"how are you?"

"02.23.72"

"1972"
نکته : اگر عدد نيز در داخل Quotation قرار گيرد يه عنوان يک داده رشته اي در نظر گرفته مي شود.

مثالهاي از داده هاي رشته اي غير مجاز:

hello world!

how are you" " "I Said," "

توجه!!!

شايد اين سئوال در ذهن شما به وجود بياد که چطوري مي تونيم يک علامت " را به مرور گر ارسال کنيم؟

ما مي تونيم اين مشکل رو در PHP به اين صورت رفع کنيم که قبل از علامت quitation از علامت (\) استفاده کنيم!!!

پس وقتي ما در دستور print() اين عبارت (I Said, \"How are You?\" "") رو تايپ کنيم خروجي اين دستور به صورت ( I Said, "How are You?" ) خواهيد ديد.

بنابراين هر چند که گفته شد در داده رشته اي هر ترکيبي از کاراکترها به کار مي رود. بايد توجه داشته باشيد که در مورد کاراکترهاي ويژه بايد دقت خاصي اعمال شود. کاراکترهاي ويژه ديگري نيز وجود دارند که هنگام استفاده از آنها در يک داده رشته اي بايد علامت backslash (\) قبل از آنها قرار دهيم.

اين کاراکتر ها عبارت است از:

single quotation ( ' )

apostrophe

backslash

و علامت dollar

نکات:
-مزيت استفاده از double quotes به جاي single quotes در اين است که در حالت دوم اگر متغييري داخل داده رشته اي خود به کار ببريد نام متغيير به عنوان جزئي از داده در نظر گرفته مي شود و نه مقدار آن متغيير جايگزين نام آن نمي شود.

- در درسهاي قبلي اشاره شد که در ترکيب \n براي مثال در تابع print() باعث ايجاد خط جديد مي شود. بنابراين مشاهده مي کنيد که در اين حالت خاص علامت backslash باعث در نظر گرفتن n به صورت يک کاراکتر معمولي نشد.از موارد خاص ديگر مي توان به ترکيب \r ( بازگشت خطي ( carriage return)) و \t ( براي قرار دادن يک tab) اشاره کرد.

آرايه ها:
از آنجايي که آرايه ها کمي پيچيده تر از داده هاي عددي و رشته اي به حساب مي آيند.در اين قسمت تنها مختصري در مورد آنها توضيح داده مي شود و در درسهاي آينده با کاربرد هاي آن بيشتر آشنا خواهيد شد.

بر خلاف داده هاي عددي و رشته اي که تنها مي توانند داراي يک ارزش و يا مقدار باشند. آرايه ها مي توانند حاوي ليستي از مقادير باشند.بنابراين شما مي توانيد مقادير مختلف عددي و يا رشته اي را داخل يک آرايه قرار دهيد. همچنين آرايه ها خود مي توانند شامل ليستي از آرايه ها باشند.

نکته:
- آرايه هاي استاندارد در PHP از مقادير دادهاي و يا عددي تشکيل مي شوند ( اين آرايه ها به آرايه هاي شماره گذاري شده ( indexed ) و يا برداري ( vector ) نيز معروف هستند.)

و اين همان نامي است که Perl به اين دسته از آرايه ها نسبت مي دهد. در Perl آرايه هايي که خود از آرايه هايي که خود از آرايه تشکيل شده باشد. به نامهاي آرايه هاي hash و associative و multi_dimensional شناخته مي شوند. در PHP به هر دو دسته ( يک يا چند بعدي ) لفظ « آرايه » اطلاق مي شود.

نسبت دادن مقادير به متغييرها
در PHP شما به اعلان ( declare ) متغييرها احتياج نداريد. همچنين نوع يک متغيير در هنگام عمل انتساب مشخص مي شود.

در PHP براي نسبت دادن يک مقدار به يک متغيير و ذخيره آن مقدار از علامت مساوي ( = ) استفاده مي کنيد.در اين هنگام اين علامت با نام عملگر انتساب ( assignment Operater ) خوانده مي شود.

مثال:

$number = 1;

$floating-number = 1.2;

$string = "Hello,World!";

نکته:در PHP نيز همانند Java Script نوع متغيير در طول برنامه مي تواند تغيير کند.

متغييرهاي از پيش تعريف شده
متغييرهاي از پيش تعريف شده ( Predefined Variables ) انواع خاصي از متغيير ها هستند که در يکي از برنامه ها به کار گرفته مي شوند:

برنامه هاي کاربردي سرويس دهنده وب ( web server applivations (مانند Apache )

سيستم عاملهاي سرويس دهنده وب ( web server operationg system ( مانند windows nt و يا Solaris)

و يا در خود مدل PHP .

در دو دسته اول اين متغيير ها به متغييرهاي محيطي ( variables enviromental ) معروفند .

متغييرهاي از پيش تعريف شده در سرويس دهنده هاي مختلف ممکن است داراي تفاوتهايي باشند . بنابراين براي مشاهده اين متغييرها بهتر است از تابع phpinfo() که در درسهاي قبلي توضيح داده ام استفاده کنيد.

دو دليل براي آشنايي شما با مفهوم متغييرهاي از پيش تعريف شده وجود دارد.

دليل اول اينست که اين متغييرها در برنامه نويسي شما کاربرد خواهند داشت و دليل ديگر آنکه با شناخت اين متغييرها شما ديگر به صورت تصادفي نام يک متغيير را هم نام با اين متغييرها انتخاب نمي کنيد.

نمونه هايي از متغييرهاي محيطي سرويس دهنده عبارتند از: Hostname ( نامي که سرويس دهنده به خود نسبت داده است) و Ostype ( سيستم عاملي که بر روي سرويس دهنده در حال اجراء مي باشد.)

نمونه هاي از متغيير هاي محيطي Apache عبارتند از: Document_Root ( مکان ذخيره فايل ها بر روي سرويس دهنده) و HTTP_USER_AGENT ( جزئياتي در مورد مرورگر و Platfrom کاربر را ارائه مي دهد).

متغيير PHP-SELF پر کاربردترين متغيير PHP مي باشد که نام صفحه جاري را در خود ذخيره کرده است .

نکته:اگر شما متغييرهاي خود را هم نام با متغييرهاي محيطي سيستم نامگذاري کنيد. نتايجي عجيب و منحصر به فردي حاصل مي شوند. هر چند احتمال انجام اين کار اندک مي باشد. با اين وجود بهتر است لستي از متغيير هاي محيطي سيستم را در هنگام نامگذاري متغييرها در برابر خود داشته باشيد.

اين بود درس امروز

در درسهاي بعدي يک تغيير کلي در سيستم آموزش اعمال خواهد شد که حتما با ما باشيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


Cookie ها در ASP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۷۴ مراجعه امروز
۵۱۹۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Cookie ها در ASP
نويسنده : محمد باقر معموری
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۱۹/۱۲/۱۳۸۱ اين مقاله ۳۷۱۱ بار مطالعه شده است
۱۸ نفر تا به حال به اين مقاله رای داده اند.

يك Cookie اغلب براى شناسائى كاربر استفاده مى‌شود.

مثالها
Cookie خوش‌آمدگويى
چگونه يك Cookie خوش‌آمدگويى درست كنيم.

يك Cookie چيست؟
يك Cookie اغلب براى شناسندن كاربر استفاده مى‌شود. يك Cookie يك فايل كوچك است كه سرور آن را در كامپيوتر كاربر جاسازى مى‌كند. هر بار كه همان كامپيوتر يك صفحه را درخواست مى‌كند، Cookie نيز فرستاده مى‌شود. با ASP شما مى‌توانيد هم مقادير Cookie را بسازيد و هم آنها را استخراج نماييد.
چگونه يك Cookie بسازيد؟
Response.Cookie براى ساختن Cookie استفاده مى‌شود.

توجه: Response.Cookie بايد قبل از تگ درج شود.

در مثال زير، ما يك Cookie درست خواهيد كردم و اسم آن را "firstname" مى‌گذاريم و مقدار "Alex" را به آن مى‌دهيم:
<% Response.Cookies("firstname")="Alex" %>
همچنين امكان دارد كه خصوصياتى را مثل تاريخ انقضاى cookie را به آن بدهيد:
<% Response.Cookies("firstname")="Alex" Response.Cookies("firstname").Expires=#May 10,2002# %>

چگونه مقدار cookieها را استخراج كنيم
دستور "Request.Cookies" براى استخراج اطلاعات از cookieها استفاده مى‌شود.

در مثال زير، ما مقدار cookieى با نام "firstname" را استخراج كرده و در صفحه نشان داديم:

<% fname=Request.Cookies("firstname") response.write("Firstname=" & fname) %>
خروجى:

Firstname=Alex

يك Cookie با كليد
اگر يك cookie حاوى مجموعه‌اى از مقادير باشد، مى‌گوييم آن cookie دارى كليدهايى است.

در مثال زير، ما يك مجموعه cookie با نام "user" درست مى‌كنيم. cookie به نام "user" داراى كليدهايى است كه حاوى اطلاعاتى راجع به كاربر است.

<%
Response.Cookies("user")("firstname")="John"
Response.Cookies("user")("lastname")="Smith"
Response.Cookies("user")("country")="Norway"
Response.Cookies("user")("age")="25"
%>

خواندن همه Cookieها
به كد زير نگاه كنيد:
<%
Response.Cookies("firstname")="Alex"
Response.Cookies("user")("firstname")="John"
Response.Cookies("user")("lastname")="Smith"
Response.Cookies("user")("country")="Norway"
Response.Cookies("user")("age")="25"
%>
فرض كنيم كه سرور شما همه cookieهاى بالا را به كاربر فرستاده است.

حالا ما مى‌خواهيم تمام cookieها را كه به كاربر فرستاده شده است را بخوانيم. مثال زير نشان مى‌دهد كه چگونه اين كار را انجام دهيم (توجه داشته باشيد كه در مثال پايين با استفاده از HasKeys چك مى‌كند كه آيا cookie كليد دارد يا نه؟
<html>
<body>
<%
dim x,y
for each x in Request.Cookies
  response.write("<p>")
  if Request.Cookies(x).HasKeys then
    for each y in Request.Cookies(x)
      response.write(x & ":" & y & "=" & Request.Cookies(x)(y))
      response.write("<br />")
    next
  else
    Response.Write(x & "=" & Request.Cookies(x) & "<br />")
  end if
  response.write "</p>"
next
%>
</body>
</html>
خروجى:
firstname=Alex user:firstname=John user:lastname=Smith user: country=Norway user: age=25

اگر Browser داراى پشتيبانى Cookie نباشد چه اتفاقي مى‌افتد؟

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

1. اضافه كردن پارامترها به URL

شما مى‌توانيد پارامترها را به URL اضافه كنيد:

<a href="welcome.asp?fname=John&lname=Smith">
Go to Welcome Page</a>

و مقادير موجود در "welcome.asp" را همچون مثال زير استخراج كنيد:
<% fname=Request.querystring("fname") lname=Request.querystring("lname") response.write("

Hello " & fname & " " & lname & "!

") response.write("

Welcome to my Web site!

") %>
2. استفاده از form
شما مى‌توانيد از فرم‌ها استفاده كنيد. وقتى كه كاربر روى دكمه Submit كليك كند فرم ورودى‌هاى كاربر را به "welcome.asp" رد مى‌كند:
<form method="post" action="welcome.asp">
First Name:  <input type="text" name="fname" value="">
Last Name: <input type="text" name="lname" value="">
<input type="submit" value="Submit">
</form>

مقادير موجود در "welcome.asp" را همچون اين مثال استخراج كنيد:

<%
fname=Request.form("fname")
lname=Request.form("lname")
response.write("<p>Hello " & fname & " " & lname & "!</p>")
response.write("<p>Welcome to my Web site!</p>")
%>

کيفيت مقاله :
عالی خوب متوسط ضعيف


فرم‌ها در ASP و وردى‌هاى كاربر ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۷۷ مراجعه امروز
۵۱۹۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فرم‌ها در ASP و وردى‌هاى كاربر
نويسنده : محمد باقر معموری
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۱۹/۱۲/۱۳۸۱ اين مقاله ۴۰۳۶ بار مطالعه شده است
۲۶ نفر تا به حال به اين مقاله رای داده اند.

دستورات Request.QueryString و Request.Form مى‌توانند براى گرفتن اطلاعات از فرم‌ها، مثل ورودى‌هاى كاربر استفاده گردند.

مثالها
يك فرم با متد "get"
چگونه با استفاده از دستور Request.QueryString به كاربر عكس‌العمل نشان دهيد.

يك فرم با متد "post"
چگونه با استفاده از دستور Request.Form به كاربر عكس‌العمل نشان دهيد.

يك فرم با Radio Buttonها
چگونه با استفاده از دستور Request.Form و از طريق Radio Buttonها به كاربر عكس‌العمل نشان دهيد.

ورودى كاربر
آبجكت Request مى‌تواند براى گرفتن اطلاعات از كاربر از فرم‌ها استفاده گردد.

<form method="get" action="simpleform.asp">
First Name: <input type="text" name="fname">
<br />
Last Name: <input type="text" name="lname">
<br /><br />
<input type="submit" value="Submit">
</form>

ورودى‌هاى كاربر مى‌توانند از دو طريق استفاده گردد: با Request.QueryString يا Request.Form

Request.QueryString
دستور Request.QueryString براى جمع كردن مقادير موجود در يك فرم با متد "get" استفاده مي شود. اطلاعات فرستاده شده از فرمى با متد "get" براي هر كسى قابل مشاده است (اين اطلاعات در قسمت آدرس Browser نشان داده مي شود) و در مورد مقدار اطلاعات محدوديت دارد.

اگر كاربر در فرمى با متد "get" مقدار "Bill" و "Gates" را وارد كنيد، URLى كه به سرور فرستاده مى‌شود شبيه به اين خواهد بود:
http://www.irandevelopers.com/simpleform.asp?fname=Bill&lname=Gates

فرض كنيد فايل "simpleform.asp" حاوى اسكريپت زير است:

<body>
Welcome
<%
response.write(request.querystring("fname"))
response.write(" " & request.querystring("lname"))
%>
</body>
Browser خط زير در قسمت Body سند نشان خواهد داد:

Welcome Bill Gates

Request.Form

دستور Request.Form براي جمع كردن اطلاعات از يك فرم با متد "post" استفاده مى‌شود. اطلاعات فرستاده شده از فرمى با متد POST براي بقيه غيرقابل مشاهده است و هيچ محدوديتى در مقدار اطلاعات فرستاده شده ندارد.

اگر كاربر در فرمى با متد "post" كلمه "Bill" و "Gates" را تايپ كند، URLى كه به سرور فرستاده مى‌شود شبيه به اين خواهد بود:

http://www.w3schools.com/simpleform.asp

فرض كنيد كه فايل "simpleform.asp" حاوى اسكريپت زير باشد:

<body>
Welcome
<%
response.write(request.form("fname"))
response.write(" " & request.form("lname"))
%>
</body>

Browser خط زير در قسمت Body سند نشان خواهد داد:

Welcome Bill Gates

تصديق فرم يا تست معتبر بودن (درست بودن) مقادير ورودى
ورودى كاربر بايد در Browser در هر جايى كه امكان داشت (با استفاده از اسكريپتهاى client) تصديق گردد. تصديق Browserى سريعتر است و زمان load شدن سرور را نيز كاهش مى‌دهد

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


رويه(procedure) هاى ASP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۸۰ مراجعه امروز
۵۱۹۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
رويه(procedure) هاى ASP
نويسنده : محمد باقر معموری
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۱۹/۱۲/۱۳۸۱ اين مقاله ۳۳۷۱ بار مطالعه شده است
۱۳ نفر تا به حال به اين مقاله رای داده اند.

در ASP شما مى‌توانيد يك تابع JavaScript را از يك VBScript و برعكس صدا كنيد (اجرا كنيد)

مثالها
اجرا كردن يك رويه با استفاده از VBScript
چگونه يك رويه VBScript را از ASP صدا كنيم.

اجرا كردن يك رويه با استفاده از JavaScript
چگونه يك رويه JavaScript را ASP صدا كنيم.

اجرا كردن رويه‌ها با استفاده از VBScript
چگونه هر دوى رويه‌هاى JavaScript و VBScript را از داخل ASP اجرا كنيم.

رويه‌ها
سورس يك ASP مي تواند حاوي رويه‌ها و توابع باشد.
<html>
<head>
<%
  sub vbproc(num1,num2)
    response.write(num1*num2)
  end sub
%>
</head>
<body>
<p>Result: <%call vbproc(3,4)%></p>
</body>
</html>

خط <%@ language="language" %> را بالاى خط قرار دهيد تا رويه‌ها و توابع را با استفاده از يك زبان ديگر scriptنويسى بنويسيد:

<%@ language="javascript" %>
<html>
<head>
<%
function jsproc(num1,num2)
{
   Response.Write(num1*num2)
}
%>
</head>
<body>
<p>Result: <%jsproc(3,4)%></p>
</body>
</html>

تفاوت‌هاى بين VBScript و JavaScript
وقتى كه قصد داريد يك رويه نوشته شده در VBScript يا JavaScript را در يك فايل ASP كه با استفاده از VBScript نوشته شده، اجرا كنيد مى‌توانيد از كلمه كليدى "call" كه بعد از آن اسم رويه آماده است استفاده كنيد. اگر يك رويه احتياج به پارامترهايى داشته باشد ليست پارامترهاى بايد در بين دو پرانتز قرار بگيرد. اگر "call" را حذف كنيد، ليست پارامترها نبايد در بين دو پرانتز قرار بگيرد. اگر رويه هيچ پارامترى ندارد، استفاده از پرانتز به شما بستگى دارد و انتخابى است.

اگر قصد داريد يك رويه JavaScript يا VBScript را از يك فايل ASP كه با استفاده از JavaScript نوشته شده اجرا كنيد، هميشه بايد پس از نام رويه از پرانتز استفاده كنيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


لينوکس و ويندوز , در کنار هم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۵۶ مراجعه امروز
۴۸۷۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
لينوکس و ويندوز , در کنار هم
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۹/۱۲/۱۳۸۱ اين مقاله ۷۰۹ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.
لينوکس و ويندوز , در کنار هم .
احتمالا بزرگترين مشکلي که در راه تجربه لينوکس وجود داره نحوه قرار دادن لينوکس و ويندوز در کنار هم بدون صدمه خوردن به ويندوزه , خب اين خيلي ساده است !:) اين مقاله براي تشريح راه هاي انجام اين کار نوشته شده :)
يک لينوکس خوب براي انجام هر کاري کافيه , ولي خب اگر مثل من نميتونيد يک روز بدون
يه بازي تحت ويندوز سر کنيد احتمالا به يک ويندوز هم احتياج داريد , مثلا من از يک ويندوز
?? فقط براي بازي کردن استفاده ميکنم , اقرار بي شرمانه !:)
> چقدر فضا براي نصب احتياج داريد ؟‌
خب خيلي بستگي به ويندوز و لينوکس داره !:) ويندوز Xp بيشتر از يک گيگابت فضا اشغال
ميکنه که نسب به بقيه ويندوز ها بي سابقه است , احتمالا لينوکس هم همين قدر فضا
اشغال ميکنه , امم ! اين جدول رو چند وقت پيش Osdn تنظيم کرده :
Windows:
Base Install : 350 MB
Swap ( Virtual Memory ) 100 MB
Ms-Office : 300 MB
Photoshop : 200 MB
Code Warrior : 200 MB
Games : 1500 MB
Personal Files : 200 MB
Windows Total : 2950 MB
Linux:
Base Install : 1000 MB
Swap : 100 MB
StarOffice : 150 MB
VMware : 10 MB
Games : 1500 MB
Personal Files : 50 MB
Linux Total : 2810 MB
خب اين خيلي هم مقاله دقيقي نيست , گويي که ويندوزي که ??? مگابايت جا بگيره , فرض
ميکنيم Me قابل مقايسه با لينوکسي که ???? مگابايت جا ميگيره است , از لحاظ حجمي :)
لازمه تائين کنيد چقدر فضا براي هر سيستم عامل و برنامه هاي جانبي احتياج داريد , نميشه
دقيقا گفت چه مقدار ولي خب اين از بروز مشکل جلوگيري ميکنه .
Mbr > به سکتور اول هر هارد ديسک Mbr گفته ميشه , رو اين سکتور کد هاي سيستم عامل
هاي مختلف قرار ميگيرند تا سيستم عامل Bootبشه , عملا جا براي يک boot manager بيشتر
نيست پس احتمالا اگر رو کامپيوترتون ويندوز نصب کرده ايد و بعد از اين لينوکس رو اينستال کنيد
کدهاي Mbr ويندوز پاک ميشه و ويندوز بوت نميشه , براي رفع اين مشکل لينوکس از Bootmanager هاي مختلفي استفاده ميکنه :
Lilo:
مخفف Linux Loader , بوت منيجر استاندارد لينوکس که رو Mbr اينستال ميشه .
Grub : بوت منجير لينوکس هاي Redhat , حداقل اولين بار رو Redhat کار کرده !:) رو Mbr
اينستال نميشه و دردستر زيادي نداره .
در مورد انواع BootManager ها تو قسمت Linux Installation توضيحات کافي داده شده و
اينجا تکرارشون نميکنم :)
از اونجايي که اکثر دوستان يک ويندوز رو هارد ديسک خودشون دارن و ميخوان Linux نصب کنن
فکر ميکنم بهتر باشه توضيحات رو روي اين قسمت متمرکز کنيم , خب !
به تجربه ثابت شده بهترين کار اينه که يک پارتيشن ويندوز رو خالي کنيد , البته يک پارتيشن
بزرگ رو , مثلا ? يا ? گيگابايت , و از طريق Partition Magic يا Fdisk يا هر چيزي که دوست داريد
رو ويندوز هاي ?? و از طريق Computer Managment ويندوز ???? و XP پارتيشن رو پاک کنيد و
فضاش رو تبديل به Unlocated Space کنيد . اين يعني اينکه هيچ چيزي تو اون فضا که پارتيشن
هم نشده وجود نداره , خب وقتي که لينوکس رو از طريق Cd براي Install بوت ميکنيد لينوکس
شما اين فضا رو تشخيص ميده و خودش رو اونجا اينستال ميکنه و بقيه ماجرا ...
اگر دو تا هارد ديسک داريد , کار خيلي ساده ميشه !:) ميتونيد از Mbrيکي براي ويندوز و از
Mbr اونيکي براي لينوکس استفاده کنيد :) خيلي راحت از طريق Bios يا System Commander
ميتونيد انتخاب کنيد کدوم هارد ديسک اول Boot بشه :)
از اونجايي که Lilo رو اکثر لينوکس ها نصب ميشه فکر ميکنم بدک نباشه يه چيزي در موردش
نوشته شه , فايل تنظيمات Lilo در etc/lilo.conf/ قرار گرفته , بستگي به انواع سيستم عامل
هايي که داريد داره ولي خب معمولا اينجوريه :
disk=/dev/hdc
شماره هارد ديسک :) عملا آدرس هارد ديسک .
bios= 0x80
boot = /dev/hdc
استفاده از Mbr ه اين هارد ديسک .

لينوکس ها با استفاده از کرنلشون Boot ميشن , ويندوز ها کد Mbr رو روي اولين سکتور پارتيشن ذخيره ميکنن , پس :
image = /boot/vmlinuz
append = "hda=ide-scsi" g
initrd = /boot/initrd
يک Field لينوکس , لازم نيست دقيقا بدونين اينا چي کار ميکنن , فقط براي تشخيص لازمه :)
کار شما عملا با اديت کردن قسمت مربوط به ويندوزه :
other = /dev/hdc1
label = windows
به همين راحتي :) سيستم آدرس رو به اولين سکتور پارتيشن اول هارد ميفرسه , اگر شما
رو پارتيشن سوم ويندوز نصب کرده ايد :
other = /dev/hdc3
label = windows
به همين راحتي , پس اگر بعد از نصب لينوکس ويندوز بالا نيامد سراغ اين فايل بريد ,
- معمولا کار به اين مشکلي نيست , همه Bootmanager هاي خوب رو لينوکس ها مدرن
به راحتي ويندوز شما رو تشخيص ميدن , براي موقعيت هاي پيچيده تر ( چندين سيستم
عامل ) من اين راه رو پيشنهاد ميکنم :) براي اطلاعات بيشتر
man lilo #
رو در هر Sheel يي ميتونيد تايپ کنيد . توجه کنيد که فايل تنظيمات Lilo در etc/lilo.conf/ قرار
گرفته به احتياج به دسترسي Root براي اديت کردنش داريد , امم ... شايد اين هم مفيد باشه !
شما ميتونيد با دستور fdisk /mbr سکتور Mbr هارد رو پاک کنيد .
راه هاي ديگر و نه چندان جالب :
هميشه لازم نيست اين همه دردسر داشته باشيد , خيلي راحت ميتونيد از Vmware براي
نصب لينوکس درون ويندوز استفاده کنيد , Vmware 3.x که فکر ميکن آخرين ويرايش VMware
باشه به راحتي کار شما رو راه ميندازه !:) من Vmware رو براي اولين تجربه استفاده از لينوکس اصلا پيشنهاد نميکنم ... همچنين براي اکثر کارهاي شبکه چندان جالب نيست .
از اونجايي که توضيح کامل هم نميتونه مشکل رو حل کنه من فکر ميکنم يه سري Faq اينجا
به درد بخوره ,

? ) موقع بوت شدن سيستم صفحه پر از ? و ? ميشه .
خب اين مشکل Lilo است , بايد با استفاده از CD يا Floppy لينوکس رو Boot کنيد و Lilo رو
با دستور Lilo اينستال کنيد . و اون وقت فکري هم به حال ويندوز کنيد :)
? ) Lilo بوت ميشه ولي از ويندوز خبري نيست .
بايد etc/lilo.conf رو اديت کنيد , چند خط بالاتر توضيحات هست .
? ) موقع بوت کردن ويندوز پيغام ntloader Missing يا ntldr is missing يا صفحه سياه ديده
ميشه .
اولي براي nt4 دومي براي 2000,xp و سومي رو 9X رخ ميده , به lilo.conf توجه کنيد احتمالا
آدرس پارتيشن اشتباهه .
? ) سيستم قبل از Lilo هنگ ميکنه .
Lilo درست کار نميکنه يا درست تنظيم نشده , لينوکس بايد با Floppy يا Cd بوت بشه و Lilo
دوباره اينستال شه
مطالب فوق از وبلاگ http://zoup.persianblog.com/ برداشته شده است
کيفيت مقاله :
عالی خوب متوسط ضعيف


نكاتي در مورد برنامه هاي كاربردي تحت وب ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۸۳ مراجعه امروز
۵۱۹۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نكاتي در مورد برنامه هاي كاربردي تحت وب
نويسنده : مديريت سايت
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۲۲/۱۲/۱۳۸۱ اين مقاله ۳۷۳۰ بار مطالعه شده است
۲۲ نفر تا به حال به اين مقاله رای داده اند.
يك برنامه كاربردي تحت وب بايك وب سايت تفاوت دارد . يك وب سايت شامل اطلاعات ثابتي است كه از پيش آماده شده و به صورت فايل هاي HTML ذخيره شده اند .در اين حالت جهت حركت اطلاعات از سرويس دهنده به
سرويس گيرنده مي باشد . در واقع وب سايت اطلاعات را به كاربر ارائه مي دهد .
بين درخواست ها ، سرويس دهنده از عملكرد سرويس گيرنده اطلاعي ندارد . سرويس گيرنده مي تواند از يك محل به محل ديگر بپرد و اين كار روي وب سايت اوليه هيچ تاثيري ندارد ، چون هر يك از صفحات به صورت يك واحد كاملا جدا مي باشند . در واقع وب سايت شامل گروهي از فايل هاي HTML از هم جدا مي باشد .
در مقابل ، يك برنامه كاربردي تحت وب ، اطلاعات را براي يك كاربر يا گروهي از كاربران به شكلي خاص فرمت كرده و ارائه مي دهد . در اين حالت ، جهت حركت اطلاعات دو طرفه مي باشد ؛ محتوياتي كه توسط مرور گر
نمايش داده مي شوند ، بر حسب اطلاعات ورودي كاربر يا هويت وي تعيين مي گردند .
بنابر اين يك برناها كاربردي تحت وب ، اطلاعات را به صورت ديناميكي ارائه مي دهد نه به صورت فايل هاي HTML ثابت . در واقع وظيفه برنامه ، فراهم كردن اطلاعات بر حسب شرايط است كه اين اطلاعات معمولا از پايگاه داده ( Database ) بدست مي آيد . برنامه كاربردي نه تنها اطلاعات مي دهد ، بلكه مي تواند از كاربر اطلاعات بگيرد و بكارهاي مختلف پاسخ مناسب دهد . به عبارت ديگر ، يك برنامه كاربردي ، عملكرد كاربر را از يك در خواست به
درخواست ديگر رديابي مي كند . بنابراين كاربر مي تواند آن گونه كه در يك وب سايت به جستجو و گردش مي پردازد ، به شكل دلخواه تمام صفحات يك برنامه كاربردي را برسي و مشاهده كند . بلكه اين برنامه كاربردي است كه صفحات مناسب را در شرايط مقتضي به طور ديناميكي توليد كرده و به كاربر ارائه مي دهد .
براي نوشتن برنامه هاي كاربردي تحت وب از زبان هاي مختلفي مي توان استفاده كرد ، مثل : Perl , Python , Java , C , C ++ , Visual Basic حتي Quick Basic يا Script هاي Unix .
در هر صورت مواردي كه در زير به آنها اشاره مي شود جزء ضروريات يك برنامه كاربردي هستند :
- ارتباط با يك پايگاه داده
- سرعت
- كار با رشته ها
- امنيت ( Security )
- تراكنش ها ( Tranaactions )
تراكنش چيست ؟
يك برنامه كاربردي تحت وب اغلب بايد كارهاي مختلفي انجام دهد كه هر يك از آنها براي تداوم اعتبار اطلاعات بايد به طور كامل انجام شوند . هنگام كار با يك پايگاه داده ، معمولا اين كار ها را بصورت يك تراكنش در نظر مي گيريم . يك تراكنش قرار دادي است كه موفقيت يا عدم موفقيت مجموعه اي از عمليات را تضمين مي كند كه در صورت عدم موفقيت ، اطلاعات بايد دست نخورده باقي بمانند . به عنوان يك نمونه كلاسيك ، مي توانيم يك حساب چك ( Checking Account ) را در نظر بگيريم .
هنگامي كه يك چك را به حساب خود مي گذاريد ، بانك مبلغ مشخص شده را از حساب مربوطه برداشته و به حساب شما واريز مي كند . كل اين عمليات در صورتي موفقيت آميز خواهد بود كه برداشت و واريز پول به طور كامل انجام شود . در اين حالت عمل دو گانه برداشت از يك حساب و واريز به يك حساب ديگر را يك تراكنش مي گوييم .

تفاوت ميان برنامه هاي IIS و DHTML
برنامه هاي IIS ، برنامه هايي هستند كه برروي سرويس دهنده و تحت Microsoft Internet Information Server اجرا مي شوند . در مقابل ، برنامه هاي DHTML برنامه Microsoft Internet Explorer استفاده مي كنند و به اين ترتيب به ورودي هاي كاربر پاسخ سريع مي دهند .
اين برنامه ها براي نوشتن بازي ها و شبيه سازي محيط و گرفتن اطلاعات از كاربر مناسب هستند . متاسفانه اين نوع برنامه ها به نسخه چهارم IE يا نسخه هاي بالاتر آن نياز دارند . با توجه به اين كه در اين كتاب به تفصيل در مورد ASP و
مسائل حاشيه اي آن بحث خواهيم كرد ، بد نيست كمي بيشتر در مورد برنامه هاي IIS توضيح دهيم . چون هدف از يادگيري ASP ، نوشتن برنامه هاي IIS مي باشد كه بر روي سرويس دهنده اجرا مي شوند .
برنامه هاي IIS با چندين مرورگر مختلف و نسخه هاي متفاوت آنها سازگاري دارند . همچنين در محيط هاي مختلف Mak يا Unix نيز اجراء مي شوند . بنابر اين اين نوع برنامه ها براي نوشتن برنامه هاي تجاري كه مخاطبين زيادي دارند مناسب هستند ؛ چون دليلي ندارد همه كاربران از ويندوز استفاده كرده و يا نسخه IE را در اختيار داشته باشند.
با توجه به اين كه برنامه هاي IIS برروي سرويس دهنده اجرا مي شوند ، براي به روز در آوردن آنها تنها كافي است كد موجود برروي سرويس دهنده را تغيير داد. اين نوع برنامه ها از هر محلي قابل دسترسي مي باشند . هنگامي كه يك برنامه IIS برروي سرويس دهنده نصب شده و به اجرا در آمد ، هر كامپيوتري كه بتواند به آن سرويس دهنده متصل شود مي تواند از آن برنامه استفاده كند .
شما مي توانيد براي شناسايي كاربران ، به آنها نام و كلمه عبور اختصاص دهيد و هنگام برقراري ارتباط با برنامه كاربردي ، نام و كلمه عبور را در خواست كنيد . با توجه به اين كه تمام اطلاعات بر روي يك كامپيوتر ذخيره مي شوند ،
هنگامي كه كاربر برنامه كاربردي را ترك كند ، هيچ نوع اطلاعاتي را از دست نمي دهد .
در قسمت بعد ، در مورد چگونگي كاركرد برنامه هاي IIS بحث خواهيم كرد .
چگونگي در خواست فايل ها توسط مرورگر :
هنگامي كه شما يك آدرس URL در فيلد آدرس مرورگر خود تايپ مي كنيد ، چند چيز اتفاق مي افتد . مرورگر ، آدرس وارد شده را تحليل كرده و پيغامي به سرويس دهنده نام ( Name Server ) مي فرستد تا نام مشخص شده
(به عنوان مثال ، Microsoft . com ) را به يك آدرس IP ( Internet Protocol ) – (به عنوان مثال ، 207.84.25.32 ) ترجمه كند . سپس مرورگر با استفاده از آن آدرس IP به سرويس دهنده مربوطه متصل شده و فايل را درخواست مي كند . سرويس دهنده فايل را مي خواند و محتويات آن را به مرورگر بر مي گرداند . در اين مرحله مرورگر ، دستورات HTML آن فايل را تحليل و فرمت فايل راتعيين مي كند . بيشتر فايل هاي HTML درون خود به تصاوير گرافيكي اشاره مي كنند. اين اشاره ها به صورت رفرنس (Reference ) بوده كه هريك از آنها نيز بايك آدرس
URL مشخص مي شوند .
بنابراين كل اين عمليات براي تك تك تصاوير و يا فايل هاي ديگري كه با رفرنس به آنها اشاره شده است تكرار مي شود.
به اين ترتيب پروسه نمايش يك فايل HTML شامل تعدادي تراكنش كوچك بين سرويس گيرنده ( يعني مرورگر ) و سرويس دهنده وب مي باشد .
برنامه هاي IIS نيز تقريبا به همين صورت عمل مي كنند. ابتدا يك مرورگر يك صفحه را از سرويس دهنده درخواست مي كند . اين درخواست هميشه براي يك فايل خاص مي باشد . پاسخ سرويس دهنده به نوع فايل درخواستي بستگي دارد. اگر فايل مورد نظر از نوع HTML (با پسوند .htm يا .html ) باشد ، سرويس دهنده به سادگي محتويات فايل را مي خواند و محتويات آنرا به صورت يك رشته در آورده و براساس قوانين URL كد گذاري مي كند و سپس رشته حاصله را به مرورگر برمي گرداند . كل اين پروسه ، از درخواست تا پاسخ ، يك تراكنش مابين سرويس گيرنده و سرويس دهنده تلقي مي شود . سرويس گيرنده همواره تراكنش را شروع مي كند و سپس تا زمان رسيدن پاسخ از سوي سرويس دهنده منتظر مي ماند كه در اين زمان تراكنش كامل شده و خاتمه مي يابد .
درخواست فايل از سرويس دهنده وب مشابه هنگامي است كه در Windows Explorer روي يك فايل شبكه اي ( فايلي كه برروي كامپيوتر سرويس دهنده قرار دارد ) دوبار – كليك مي كنيد ؛ البته با دو تفاوت :
-
- سرويس دهنده وب هيچگاه اجازه نمي دهد كه برنامه محلي شما (يعني مرورگر ) فايل درخواستي را باز كرده يا درآن چيزي بنويسيد ؛ در عوض خودش فايل را باز مي كند و محتويات آن را برميگرداند .
- ارتباط مابين سرويس گيرنده و سرويس دهنده گذرا ( Transient ) است . براي برقراري ارتباط با سرويس دهنده وب نيازي به مشخص كردن نام درايوي كه فايل بر روي آن قرار دارد نيست . پس از اين كه سرويس دهنده وب به درخواست شما پاسخ داد، ارتباط را قطع مي كند.
هنگامي كه تراكنش كامل شد ، سرويس دهنده وب ، سرويس گيرنده را به طور كلي از ياد مي برد . اگر بلا فاصله كليد
Refresh ( موجود برروي نوار ابزار IE ) را كليك كنيد . سرويس دهنده وب ، آن تراكنش را تكرار مي كند و اصلا به خاطر نمي آورد كه 5 ثانيه قبل اين فايل توسط شما درخواست شده است .
اگر ارتباط براساس پروتكل استاندارد HTTP برقرارشود ، بيشتر فايل ها به چندين تراكنش نياز دارند ، يكي براي فايل Html اصلي و بقيه براي يكايك فايل هاي گرافيكي كه در فايل اصلي به آنها اشاره شده است . بنابراين براي نمايش يك فايل كه شامل 5 تصوير گرافيكي است ، مرورگر درخواست جداگانه به سرويس دهنده وب مي فرستد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


نكاتي در مورد برنامه هاي كاربردي تحت وب 2 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۸۶ مراجعه امروز
۵۲۰۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نكاتي در مورد برنامه هاي كاربردي تحت وب 2
نويسنده : مديريت سايت
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۰/۱/۱۳۸۲ اين مقاله ۳۲۳۶ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.
دقت کنيد که در اين شکل , درخواست اول براي يک فايل HTML انجام شده و 5 درخواست بعدي براي يک نوع فايل ديگر که اغلب به آن نوع MIME گفته مي شود و شامل اطلاعات باينري است صورت مي گيرند.
چگونگي پاسخ گويي IIS به درخواست هاي فايل ها به پسوند آنها بستگي دارد . ( فايل هايي که براي سرويس دهنده قابل شناسايي باشند در Registery ثبت مي شوند . ) اين مشابه همان روشي است که Windows Explorer
براي باز کردن برنامه مناسب , هنگامي که بر روي يک فايل دوبار کليک مي کنيد بکار مي برد. در مورد مرورگرها ،سرآيند ( Header ) نوع MIME كه توسط سرويس دهنده برگردانده مي شود ، نحوه برخورد مرورگربا انواع مختلف فايل ها را تعيين مي كند .
MIME مخفف Multipurpose Internet Mail Extension مي باشد . سرويس دهنده نوع MIME را به همراه هر درخواست بر مي گرداند و مرورگر با استفاده از آن چگونگي نمايش آن فايل راتعيين مي كند . در بيشتر موارد كه نوع فايل ها .html ، .gif يا .jpg مي باشد ، مرورگر مي تواند مستقيما آنها را نمايش دهد. براي انواع ديگر فايل ها ، مثل .doc يا .avi ، مرورگر نوع MIME را دريك ليست پيدا مي كند و سپس برنامه مناسب را براي نمايش آن فايل آغاز مي كند .
• توجه : در صورتي كه مي خواهيد اطلاعات بيشتري در مورد MIME بدست آوريد ، مي توانيد ليست كاملي از تمام انواع فايل هاي ثبت شده را از طريق آدرس :
• http://www.isi.edu /in-notes / iana / assignments / media- types / media- types
بدست آوريد .
نكته ديگري كه مي توان به آن اشاره كرد ، نحوه پاسخ گويي IIS به درخواست ها مي باشد .IIS تمام درخواست ها را بر اساس يك جزء زمان پردازش مي كند . هنگامي كه يك درخواست را قبول مي كند ، سرويس دهي به آن را آغاز مي كند و سپس درخواست بعدي را مي پذيرد . زمان را به بخش هاي كوچك تقسيم كرده و در هرجزء زمان به پردازش درخواست هاي متعدد مي پردازد تا زماني كه پاسخ هر يك از آنها را كامل كند . سرويس دهنده مي تواند پاسخ هر دستگاه را بلافاصله پس از شروع پردازش ارسال كند و يا مي تواند تا زمان پردازش يك درخواست ، پاسخ آن را نگه دارد و سپس همه آن را يكباره بفرستد .
مرورگرها مي توانند فايل هاي اجرائي نيز درخواست كنند . نوع كلي فايل اجرائي ، فايل ها يا برنامه هاي CGI
مي باشند . براي نوشتن برنامه هاي CGI مي توان از زبان هايي مثل C++ / C ، Perl ، VB و ... استفاده كرد .
درخواست يك فايل .asp توسط مرورگر:
هنگامي كه فايل درخواستي يك فايل .asp باشد ، نحوه پاسخ گويي به آن توسط سرويس دهنده اندكي تفاوت دارد. سرويس دهنده فايل مورد نظر را از ديسك گرفته و محتويات آن را به موتور مي فرستد .
موتور ASP فايل راتحليل كرده و قسمت هايي را كه شامل اسكريپت باشند مشخص مي كند . كد هاي موجود در فايل هاي ASP درون >% ، % < قرار مي گيرند ؛ مثل
< % this is a code % >
در اين نقطه ، بسته به اين كه كدهاي موجود به چه زباني نوشته شده باشند ( كه اغلب Javascript يا VBScriptمورد
استفاده قرار مي گيرد ) ، موتور مفسر آن زبان فراخواني شده و دستورات را پردازش مي كند . نتيجه كار به صورت يك فايل HTML به مرورگر ارسال مي شود .
اشياء دروني ASP :
در اين قسمت اشياء درون كتابخانه ASP را به طور مختصر معرفي مي كنيم و بيان جزئيات بيشتر را به فصول بعد موكول مي كنيم . ASP داراي 6 شيء مختلف است :
• server
• Application
• Session
• Request
• Response
• Scripting Context

حال هر يك از آنها را به طور خلاصه توضيح مي دهيم .

شيء Server
براي يك سرويس دهنده وب تنها يك شيء Server وجود دارد . تمام برنامه هاي كاربرديي كه برروي يك سرويس دهنده وب اجرا مي شوند ، به طور مشترك از يك شيء Server استفاده مي كنند . براي ساختن نمونه اي از يك شيء خاص در يك صفحه ASP ، مي توانيد از شيء Server استفاده كنيد . اين كار مشابه دستور
Set my Object = new Some Object
در Visual Basic مي باشد . شيء Server ويژگي ها و متدهايي نيز دارد كه آدرس هاي مجازي وب ( Virtual Web Paths ) را به آدرس هاي فيزيكي تبديل مي كنند . به عبارت ديگر ، اگر برنامه كاربردي شما در دايركتوري مجازي my Web قرار داشته باشد ، مي توانيد آدرس فيزيكي محل ذخيره فايل هاي درون دايركتوري my Web را بدست آوريد . به علاوه شيء Server مي تواند اطلاعات رشتهاي را بر اساس پروتكل HTTP كد گذاري كند .

شيء Application
براي هر برنامه كاربردي يك شيء Application وجود . از ديد موتور ASP ، يك برنامه كاربردي مجموعه اي از فايل ها و زير دايركتوري ها ي درون يك دايركتوري است كه شامل فايل Global.asa باشد . پسوند .asa بيانگر Active Server Application مي باشد . شيء Application به گونه اي است كه مي توانداشياء و متغيير هاي ديگر را در برگيرد . در حقيقت اگرچه اين شيء يك ديكشنري (Dictionary ) نيست ، ولي ساده تراست كه آن را به صورت يك ديكشنري در نظر بگيريم . ديكشنري ها مانند كلكسيون هاي Visual Basic ، ليستي از مقادير جفت جفت هستند.
اين مقادير جفتي را جفت هاي وابسته ( Association ) مي ناميم . هر يك از اين جفتهاي وابسته شامل يك كليد (key ) و يك مقدار متناظر آن هستند. كليد يك مقدار رشته اي است و متناظر آن از جنس Variant است . بنابراين هر كليد مي تواند به يك مقدار ديگر از هر نوع ، مثل Integer ، Object و يا Nothing وابسته باشد .
شما مي توانيد شيء Application را مانند بقيه متغيير هاي عمومي ( Global ) برنامه خود به كار بريد. ولي براي ذخيره مقادير به غير از انواع داده هاي ساده و آرايه ها از آن استفاده نكنيد . امكان ذخيره اشيائي كه از مدل ريسماني آپارتمان ( Apartment Threading Model ) استفاده مي كننددر شيء Application وجود ندارد .

شيء Session :
هر برنامه كاربردي مي تواند چندين جلسه كاري داشته باشد كه هر يك از اين جلسات به يكي از كاربران برنامه مربوط مي شود . شيء Session مانند شيء Application مي تواند براي ذخيره كردند متغير ها و اشياء ديگر بكار رودو مانند ديكشنري ، در برگيرنده كليد ها و مقادير متناظر آنها مي باشد . تنها تفاوت اين شيء با شيء Application در اين است كه براي هر كاربر يك شيء Session منحصر به فرد اختصاص داده مي شود در حالي كه شيء Application بين تمام كاربران مشترك است .

تعريف جلسه كاري :
در اين نقطه بهتر است مفهوم جلسه كاري را شرح دهيم . مفهوم يك جلسه در عين سادگي كمي پيچيده به نظر مي رسد. هنگامي كه يك كاربر يكي از صفحات يك برنامه كاربردي تحت وب را درخواست كند و مرورگر آن كاربر يك SessionID ( SessionID يك نوع Cookie است ) معتبر كه توسط ASP توليد شده باشد را به همراه درخواست ارسال نكند، يك جلسه كاري براي آن كاربر آغاز مي شود . هنگامي كه موتور ASP يك درخواست را بدون يك SessionID معتبر از يك مرورگر دريافت مي كند ، يك شيء Session جديد مي سازد ، يك مقدار تصادفي به SessionID اختصاص داده و Cookie ( در مورد Cookie ها بعدا به طور مفصل بحث خواهيم كرد.فعلا همين را بدانيد كه Cookie ها براي نگهداري وضعيت جلسات بكار ميروند. هر Cookie به صورت يك جفت وابسته است كه روي كامپيوتر سرويس گيرنده ذخيره ميشود ) آن را مقدار دهي مي كند . از اين به بعد تمام درخواست ها يي كه از سوي آن مرورگر ارسال مي شوند ، مقدار آن SessionID را به همراه خواهند داشت و موتور ASP با استفاده از SessionID شيء Session مربوط به آن كاربر را شناسايي مي كند . در واقع ASP از اين طريق اطلاعات مربوط به يك كاربر خاص را بين درخواست ها نگهداري مي كند .
اگر مرور گر كاربر از Cookie پشتيباني نكند و يا كاربر آن را به گونه اي تنظيم كرده باشد كه Cookie را قبول نكند ، SessionID توليد شده توسط ASP از سوي مرورگر پذيرفته نمي شود و كاربر مزبور يك شيء Session معتبر نخواهد داشت .
در اين حالت چون مقدار Cookie از بين مي رود ، موتورASP نمي تواند در خواست هاي بعدي رابه شيء Session متصل كند . به علاوه ، با رسيدن هر درخواست از سوي مرورگر ، موتور ASP يك شيء Session جديد خواهد ساخت. بنابراين باز هم مي توانيد متغير هاي دلخواه خود را در شيء Session ذخيره كنيد ، ولي پس از اين كه دستورات موجود در آن صفحه (منظور صفحه اي است كه شيء Session را در آن بكار برده ايد ) به پايان رسيد ، شيء Session مزبور از درجه اعتبار ساقط مي شود و ديگر نبايد از مقادير درون آن استفاده كنيد .

شيء Request :
مرورگر ها براي هر صفحه درخواستي ، اطلاعات زيادي را به سرويس دهنده ارسال مي كنند. معمولا هنگامي كه شما صفحات مختلف يك سايت را مشاهده ميكنيد، هيچ يك از اين اطلاعات را نمي بينيد، ولي اين اطلاعات براي استفاده برنامه هاي كاربردي روي سرويس دهنده در دسترس ميباشند. موتور ASP اين اطلاعات را به شكل زيبايي در يك شيء به نام Request بسته بندي مي كند.
شيء Request تمام اطلاعات سرآيند( Header ) را به همراه درخواست صفحه مورد نظر كاربر و همچنين اطلاعاتي كه ممكن است كاربر در فيلد هاي يك فرم HTML وارد كرده باشد دربر مي گيرد . براي بدست آوردن اين اطلاعات مي توانيد از ويژگي ها و كلكسيون هاي شيء Request استفاده كنيد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دلفي و ASP.NET ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۲۴ مراجعه امروز
۴۱۴۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دلفي و ASP.NET
نويسنده : Inprise
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۳/۱/۱۳۸۲ اين مقاله ۳۰۶۱ بار مطالعه شده است
۲۵ نفر تا به حال به اين مقاله رای داده اند.

پس از مطالعه اين مقاله خواهيد آموخت چگونه از دلفي براي توليد صفحات ديناميك وب مبتني بر تكنولوژي ASP.NET مايكروسافت استفاده كنيد .

مرحله اول : قبل از هركار بايد سيستم ASP.NET را از وجود دلفي به عنوان يكي از زبانهاي اسكريپت نگاري تحت NET. مطلع سازيد .

ASP.NET براي اجراي برنامه ها به دنبال فايلي با نام web.config خواهد گشت كه جزئيات زبانهاي مورد استفاده سيستم در آن ثبت شده است . اين فايل XML-Based بايد براي معرفي دلفي به سيستم تغيير كند .

كد زير نمونه خامي از اين نوع فايل را نمايش ميدهد :

كد:

<configuration>

<configSections>

<section name="appSettings"

type="System.Configuration.NameValueFileSectionHandler,

System, Version=1.0.3300.0,

Culture=neutral, PublicKeyToken=b77a5c561934e089" />

<section name="sessionState"

type="System.Web.SessionState.SessionStateSectionHandler,

System.Web, Version=1.0.3300.0, Culture=neutral,

PublicKeyToken=b03f5f7f11d50a3a"

allowDefinition="MachineToApplication" />

</configSections>

<appSettings>

<add key="dsn" value="localhost;uid=MyUserName;pwd=;" />

<add key="msmqserver" value="server\myqueue" />

</appSettings>

<sessionState cookieless="true" timeout="10" />

</configuration>

فايل مورد نظر براي سازگاري با دلفي بايد به اين شكل باشد :

كد:

<configuration>

<system.web>

<compilation debug="true">

<assemblies>

<add assembly="DelphiProvider" />

</assemblies>

<compilers>

<compiler language="Delphi" extension=".pas"

type="Borland.Delphi.DelphiCodeProvider,DelphiProvider" />

</compilers>

</compilation>

</system.web>

</configuration>

فايل مورد نظر بايد در دايركتوري مجازي معرفي شده براي وب سرور كه محل قرار گرفتن برنامه هاي ASP.NET ساخته شده با دلفي است قرار بگيرد . براي اين مقصود به وب سرور خود دايركتوري مجازي ديگري معرفي كرده و فايل فوق الذكر را آنجا قرار دهيد .

مرحله دوم : در محيط ويژوال استوديو ( .. والبته اگر تمايل داريد Notepad !!!!! ) پروژه وب جديدي باز كنيد و يك تكست باكس - يك كليد - يك ليبل روي فرم خود قرار داده و تابع click را به رويداد OnClick كليد فشاري نسبت دهيد . نام تكست باكس را اديت وان و نام ليبل را مسج بگذاريد . فايل حاصل را بصورت زير ويرايش كنيد :

كد:

<html>

<script language="Delphi" runat="server">

procedure Click(Sender: System.Object; E: EventArgs);

begin

Message.Text := Edit1.Text;

end;

</script>

<body>

<form runat="server">

<asp:textbox id="Edit1" runat="server"/>

<asp:button text="Click Me!" OnClick="Click" runat="server"/>

</form>

<p><b><asp:label id="Message" runat="server"/></b></p>

</body>

</html>

فايل را با نام Test.AspX ذخيره كرده و اجرا كنيد . ( براي اجرا كرده برنامه هاي ASP.NET بايد IIS و NET. Run Times را قبلا نصب و تنظيم كرده باشيد !

... Http://localhost/ur-virtual-delphi-dir/test.aspX)

مجموعه كامپايلر دلفي و ASP.NET كد زير را توليد و كامپايل (!) ميكنند :

كد:

unit ASP;

interface

uses System.Collections, System.Collections.Specialized, System.Configuration,

System.Text, System.Text.RegularExpressions, System.Web, System.Web.Caching,

System.Web.SessionState, System.Web.Security, System.Web.UI, System.Web.UI.WebControls,

System.Web.UI.HtmlControls, System.Globalization;

var

editdemo_aspx___autoHandlers: Integer;

editdemo_aspx___intialized: Boolean = False;

editdemo_aspx___fileDependencies: System.Collections.ArrayList;

type

editdemo_aspx = class(System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState)

protected

Edit1: System.Web.UI.WebControls.TextBox;

__control3: System.Web.UI.WebControls.Button;

__control2: System.Web.UI.HtmlControls.HtmlForm;

Message: System.Web.UI.WebControls.Label;

procedure ButtonClick(Sender: System.Object; E: EventArgs);

public

constructor Create;

function get_AutoHandlers: Integer; override;

function get_ApplicationInstance: System.Web.HttpApplication; virtual;

function get_TemplateSourceDirectory: System.String; override;

procedure set_AutoHandlers(Value: Integer); override;

protected

property AutoHandlers: Integer read get_AutoHandlers write set_AutoHandlers;

property ApplicationInstance: System.Web.HttpApplication read get_ApplicationInstance;

public

property TemplateSourceDirectory: System.String read get_TemplateSourceDirectory;

private

function __BuildControlEdit1: System.Web.UI.Control;

function __BuildControl__control3: System.Web.UI.Control;

function __BuildControl__control2: System.Web.UI.Control;

function __BuildControlMessage: System.Web.UI.Control;

procedure __BuildControlTree(__ctrl: System.Web.UI.Control);

protected

procedure FrameworkInitialize; override;

public

function GetTypeHashCode: Integer; override;

end;

implementation

procedure editdemo_aspx.ButtonClick(Sender: System.Object; E: EventArgs);

begin

Message.Text := Edit1.Text;

end;

constructor editdemo_aspx.Create;

var

dependencies: System.Collections.ArrayList;

begin

inherited Create;

if (ASP.editdemo_aspx___intialized = False) then

begin

dependencies := System.Collections.ArrayList.Create;

dependencies.Add('d:\vslive\editdemo.aspx');

ASP.editdemo_aspx___fileDependencies := dependencies;

ASP.editdemo_aspx___intialized := True;

end;

Self.Server.ScriptTimeout := 30000000;

end;

function editdemo_aspx.get_AutoHandlers: Integer;

begin

Result := ASP.editdemo_aspx___autoHandlers;

end;

function editdemo_aspx.get_ApplicationInstance: System.Web.HttpApplication;

begin

Result := Self.Context.ApplicationInstance as System.Web.HttpApplication;

end;

function editdemo_aspx.get_TemplateSourceDirectory: System.String;

begin

Result := '/vslive';

end;

procedure editdemo_aspx.set_AutoHandlers(Value: Integer);

begin

ASP.editdemo_aspx___autoHandlers := Value;

end;

function editdemo_aspx.__BuildControlEdit1: System.Web.UI.Control;

var

__ctrl: System.Web.UI.WebControls.TextBox;

begin

__ctrl := System.Web.UI.WebControls.TextBox.Create;

Self.Edit1 := __ctrl;

__ctrl.ID := 'Edit1';

__ctrl.Width := System.Web.UI.WebControls.Unit.Parse('300px', System.Globalization.CultureInfo.InvariantCulture);

Result := __ctrl;

end;

function editdemo_aspx.__BuildControl__control3: System.Web.UI.Control;

var

__ctrl: System.Web.UI.WebControls.Button;

begin

__ctrl := System.Web.UI.WebControls.Button.Create;

Self.__control3 := __ctrl;

__ctrl.Text := 'Click Me!';

__ctrl.add_Click(Self.ButtonClick);

Result := __ctrl;

end;

function editdemo_aspx.__BuildControl__control2: System.Web.UI.Control;

var

__parser: System.Web.UI.IParserAccessor;

__ctrl: System.Web.UI.HtmlControls.HtmlForm;

begin

__ctrl := System.Web.UI.HtmlControls.HtmlForm.Create;

Self.__control2 := __ctrl;

__parser := __ctrl as System.Web.UI.IParserAccessor;

__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(''#13#10' '));

Self.__BuildControlEdit1;

__parser.AddParsedSubObject(Self.Edit1);

__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(''#13#10' '));

Self.__BuildControl__control3;

__parser.AddParsedSubObject(Self.__control3);

__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(''#13#10' '));

Result := __ctrl;

end;

function editdemo_aspx.__BuildControlMessage: System.Web.UI.Control;

var

__ctrl: System.Web.UI.WebControls.Label;

begin

__ctrl := System.Web.UI.WebControls.Label.Create;

Self.Message := __ctrl;

__ctrl.ID := 'Message';

Result := __ctrl;

end;

procedure editdemo_aspx.__BuildControlTree(__ctrl: System.Web.UI.Control);

var

__parser: System.Web.UI.IParserAccessor;

begin

__parser := __ctrl as System.Web.UI.IParserAccessor;

__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create('<html>'#13#10' '));

__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(''#13#10' <body>'#13#10' '));

Self.__BuildControl__control2;

__parser.AddParsedSubObject(Self.__control2);

__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create(''#13#10' <p><b>'));

Self.__BuildControlMessage;

__parser.AddParsedSubObject(Self.Message);

__parser.AddParsedSubObject(System.Web.UI.LiteralControl.Create('</b></p>'#13#10' </body>'#13#10'</html>'#13#10));

end;

procedure editdemo_aspx.FrameworkInitialize;

begin

Self.__BuildControlTree(Self);

Self.FileDependencies := ASP.editdemo_aspx___fileDependencies;

Self.EnableViewStateMac := True;

end;

function editdemo_aspx.GetTypeHashCode: Integer;

begin

Result := -764444463;

end;

end.

كد فوق صرفا زماني قابل رويت است كه خطاي دستوري در برنامه دلفي خود داشته باشيد و وب سرور ضمن ارائه Error مربوط سورس كد را نير به شما نشان خواهد داد و در بقيه موارد راهي براي ديدن اين كد وجود ندارد و برنامه شما بصورت اسكريپت AspX كامپايل شده كه به زبان دلفي نوشته شده است قابل استفاده است .

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

به دو مثال زير نيز توجه كنيد :

الف)

يكي از اشيا مفيد همراه ويژوال استوديو براي توسعه وب Calendar ميباشد . يك نمونه از آن را روي فرم وب خود گذاشته و پس از نسبت دادن مقادير مناسب به خواص پايه اي آن كد مناسب دلفي را براي توليد خروجي با عنوان تاريخ انتخاب شده توسط كاربر و حركت به سمت تاريخ مورد نظر كاربر را به شكل زير بنويسيد :

كد:

<script language="Delphi" runat="server">

procedure Calendar1Selected(Sender: System.Object; E: EventArgs);

begin

Label1.Text := 'Delphi for .NET says you picked ' + Calendar1.SelectedDate.ToString('D');

end;

procedure Button1Click(Sender: System.Object; E:EventArgs);

begin

Calendar1.VisibleDate := System.Convert.ToDateTime(Edit1.Text);

Label1.Text := 'Delphi for .NET says you set ' + Calendar1.VisibleDate.ToString('D');

end;

</script>

<body style="font:18pt Verdana">

<form runat="server">

<center>

<h1>Delphi for .NET running in ASP.NET</h1>

<p>Please pick a date</p>

<asp:Calendar id="Calendar1" runat="server" ForeColor="#0000FF" BackColor="#FFFFCC"

OnSelectionChanged="Calendar1Selected">

<TodayDayStyle Font-Bold="True"/>

<NextPrevStyle ForeColor="#FFFFCC"/>

<DayHeaderStyle BackColor="#FFCC66"/>

<SelectedDayStyle ForeColor="Black" BackColor="#CCCCFF"/>

<TitleStyle Font-Size="14pt" Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"/>

<OtherMonthDayStyle ForeColor="#CC9966"/>

</asp:Calendar>

<p><asp:TextBox id="Edit1" width=200 runat="server"/>

<asp:Button text="Set date" id="Button1" OnClick="Button1Click" runat="server" />

</p>

<p><asp:Label id="Label1" runat="server"/></p>

</center>

</form>

</body>

خروجي برنامه ASP.NET اي خواهد بود كه در محيط ويژوال استوديو توليد شده و از كامپوننت تقويم طراحي شده با #C استفاده ميكند و پياده سازي آن توسط دلفي انجام شده است .

ب)

اگر آشنائي مقدماتي با محيط ويژوال استوديو داشته باشيد ميدانيد كه اين محيط براي توليد سريع محتواي وب مبتني بر بانكهاي اطلاعاتي كامپوننتهاي خاصي جهت نمايش و ويرايش داده ها دارد .

يك نمونه از كامپوننت DataGrid را و يك نمونه TextBox را به فرم مثال قبلي ( تقويم ) اضافه كنيد . كد دلفي نوشته شده با بانك اطلاعاتي معروف Northwind موجود در سيستم ارتباط برقرار ميكند . ( بايد اسكوئل سرور 2000 نصب شده باشد ! ) .

حالا تقويم شما با بانك اطلاعاتي اتصال برقرار كرده و اطلاعات لازم استخراج ميگردد .
كد:

<%@Import Namespace="System.Data"%>

<%@Import Namespace="System.Data.SqlClient"%>

<script language="Delphi" runat="server">

const

ProdName = 'Delphi for .NET';

DispFields = 'OrderID, CustomerID, ShipName, ShipCity, ShipCountry';

procedure DateSelected(Sender: System.Object; E: EventArgs);

begin

Label1.Text := ProdName + ' says you picked ' + Calendar1.SelectedDate.ToString('D');

DataGrid1.DataSource := GetOrders(Calendar1.SelectedDate);

DataGrid1.DataBind;

end;

procedure Button1Click(Sender: System.Object; E:EventArgs);

begin

Calendar1.VisibleDate := System.Convert.ToDateTime(Edit1.Text);

Label1.Text := ProdName + ' says you set ' + Calendar1.VisibleDate.ToString('D');

end;

procedure Button2Click(Sender: System.Object; E:EventArgs);

begin

DisplayFields.Text := DispFields;

end;

function GetOrders(Date : DateTime) : DataSet;

var

Adapter : SqlDataAdapter;

begin

Adapter := SqlDataAdapter.Create(

'select ' + DisplayFields.Text + ' from Orders '+

'where OrderDate = ''' + date.ToString('d')+'''',

'Server=(local);Database=Northwind;Trusted_Connection=yes');

Result := DataSet.Create;

Adapter.Fill(Result);

end;

</script>

<body style="font:18pt Verdana">

<form runat="server">

<h1><%=ProdName %> with a Calendar, DataGrid, & SqlClient in ASP.NET</h1>

<table>

<tr valign="top"><td>

<p><b>Pick a date</b></p>

<asp:Calendar id="Calendar1" runat="server" ForeColor="#0000FF" BackColor="#FFFFCC"

OnSelectionChanged="DateSelected">

<TodayDayStyle Font-Bold="True"/>

<NextPrevStyle ForeColor="#FFFFCC"/>

<DayHeaderStyle BackColor="#FFCC66"/>

<SelectedDayStyle ForeColor="Black" BackColor="#CCCCFF"/>

<TitleStyle Font-Size="14pt" Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"/>

<OtherMonthDayStyle ForeColor="#CC9966"/>

</asp:Calendar>

<p><asp:TextBox id="Edit1" width=150 runat="server"/>

<asp:Button text="Set date" id="Button1" OnClick="Button1Click" runat="server" />

</p>

</td><td valign="top">

<p><b>Display fields:</b> <asp:TextBox id="DisplayFields"

text="OrderID, CustomerID, ShipName, ShipCity, ShipCountry" width=500 runat="server"/>

<asp:Button text="Reset fields" id="Button2" OnClick="Button2Click" runat="server" /></p>

<asp:DataGrid id="DataGrid1" runat="server" BorderColor="#FFCC66" ForeColor="#0000FF">

<HeaderStyle ForeColor="#FFFFCC" BackColor="#990000"/>

</asp:DataGrid>

</td></tr></table>

<p><asp:Label id="Label1" runat="server"/></p>

</form>

</body>

بخاطر داشته باشيد كه خطوط :
كد:

<%@Import Namespace="System.Data"%>

<%@Import Namespace="System.Data.SqlClient"%>

درست مانند SqlConnection و ClientDataset محيط دلفي عمل كرده و ارتباط با بانك داده ها و ظرفي براي استخراج داده ها فراهم مي آورند .

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

سال خوبي را برايتان آرزومندم . InpriZ

کيفيت مقاله :
عالی خوب متوسط ضعيف


UDDI چيست ؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۵۹ مراجعه امروز
۴۸۷۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
UDDI چيست ؟
نويسنده : Inprise
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۳/۱/۱۳۸۲ اين مقاله ۶۵۴ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
سوال : UDDI چيست ؟

الف) يكنوع لامپ
ب) جديدترين محصول شركت گلرنگ
ج) جديدترين عنوان مدرك مهندسي مايكروسافت
د) هيچكدام

جواب غير تشريحي) گزينه د !

جواب تشريحي ) مهمترين تغييرات دنياي محاسبه و اطلاعات يكي *منبع-محور* ( Server-Centric ) شدن محاسبات است و ديگري *بي تو بي* ( B2B - خدائيش هر چي فكر كردم نتونستم يه اصطلاح فارسي براش بسازم !!! علي الظاهر اين استعداد فقط در انحصار دوستان عزيزم در فرهنگستان زبان فارسي ست !!! )

در صورتيكه عبارت thin-Client برايتان آشناست ... اگر صفحات ديناميك وب با اسكريپت هاي Server side طراحي كرده ايد ... اگر گرفتار مزاحمتهاي تلفني وقت و بي وقت مدير فن آوري شركت A (!) براي مراجعه مجدد به شركتشان و تغيير در سورس كد تمام برنامه هاي كلاينت آنها به دليل تغيير جناب مدير عامل و نتيجتا (!!) تغيير سياستهاي كلي شركت شده ايد و .... با مفهوم و مزاياي سيستمهاي* منبع-محور* آشنا هستيد ! (... در مورد مثال آخر : دوست داشتيد آشنا ميبوديد !!! )

thin-Client و تفكر * منبع-محور* گرايانه يا به عبارت واضحتر طراحي و توليد سيستمهاي نرم افزاري كه با تفكيك وظايف در لايه هاي متفاوت ضمن كاستن از بار وارده بر تمام مشتريان نرم افزار در صورت تغيير كمترين تغييرات را خواهد داشت و البته كمترين هزينه يكي از مهمترين عوامل موفقيت توليد كنندگان نرم افزار است اگر به پول و وقت خود علاقه داشته باشند . ( و البته به آگهي هاي بازرگاني آب و تاب دار و انچناني در مورد طراحي چند لايه و مستحكم ! )

اما آنچه كه ثمره گسترش فعاليتهاي اجتماعي انسان و انتظار وي از تكنولوژي براي توليد بستر مناسب براي حركت كمتر و كسب درآمد بيشتر (!) است فن آوريهائيست كه به مقوله B2B مي پردازند . ( B2B رو بخونيد : بيزينس تو بيزينس - شركت تو شركت - مغازه تو مغازه - شغل تو شغل ... !!! )

شركتها و صاحبان مشاغل و صنعت براي اينكه به مشتريان يا همكاران يا نمايندگان خود سرويسهاي اطلاعاتي بدهند مجبور نيستند كه به جاي آنها تصميم بگيرند . براي آنها كار كنند يا حتي يك ليزد لاين از واحد نرم افزاري خود تا واحد مديريتي آنها بكشند ! ... مهم نيست چه ميكنيد . خدمات ميدهيد ... توليد ميكنيد ... تبليغ ميكنيد ...و ... ! مهم اين است كه داده ها و *روند* هائي در مجموعه تحت مديريت شما وجود دارد كه برخي از آنها يا وجوهي از انها مورد نياز نمايندگان شما در سراسر دنيا - فروشندگان محصولات شما - مشتريان عمده شما و ... است .

معادله اول : * منبع محور* تفكر ميكني .
معادله دوم : يه جائي تو اين دنيا كسي هست كه به داده هاي تو نياز داره .
معادله سوم : تو نميخاي درگير شرايط اون آدم بشي .
معادله چهارم : تو ميخاي خوب سرويس بدي و موفق بشي .
معادله پنجم : تو داري مقاله من رو ميخوني و منتظري تا راه حل رو بهت بگم !!!

نتيجه :
كد:
Web services technology based on standard methods of description, discovery, and integration
alleviate the implications of this diversity. Web services are self-contained, modular business
applications that have open, Internet-oriented, standards-based interfaces. Web services
communicate directly with other Web services via standards-based technologies. These standardsbased
communications allows Web services to be accessed by customers, suppliers, and partners
independent of hardware, operating system, or even programming environment.

( فكر ميكنم اينقدر اين متن زيبا و هنري (!) نوشته شده كه ترجمه كردنش هم روح لطيف (!!!) برنامه نويسهاي عزيز رو آزرده ميكنه هم تن نويسنده اش رو تو گور ميلرزونه ! )

سوال : وب سرويس رو ميشناسم . چند صفحه اي در موردش خوندم . با يكي از محيطهاي توسعه اش آشنا هستم ( ر.ك مقاله قبلي ) . حالا UDDI با وب سرويس چه ارتباطي داشته بيده ؟؟

الف) ارتباطي نداشته بيد .
ب) گزينه ب و جيم
ج) اطلاعاتي در اين مورد موجود نيست
د) الان ميگم !

جواب غير تشريحي : گزينه د !

جواب تشريحي : همه شما با سرج انجين ( Motor e jostejoogar e internet !!! ) آشنا هستيد . مجموعه نرم افزارهائى حاوي اطلاعات در مورد آدرسهاي اينترنتي كه حاوي كلمه ( كلمات ) يا مفهوم ( مفاهيم ) مورد نظر جستجوگر اند و به وي كمك ميكنند به داده هاي مورد نظر كه نميداند در كدامين آدرس قرار گرفته اند دسترسي داشته باشد ! اما اين موتوهاي جستوجو چگونه و از كجا ميدانند كه كدام اطلاعات در كدام سايت قرار دارد ؟ از كجا ميدانند كدام عكس در كدام صفحه قرار گرفته ؟ از كجا ميدانند ... ؟؟ روشهاي متعددي موجود است . موتور جستجو گر ميتواند يك web crawler داشته باشد كه با حركت ميان وب سايتهاي مختلف اينترنت و ثبت كلمه هاي كليدي موجود در آنها و اطلاعاتي ذي قيمت موجود ( با توجه به نوع طراحي ) آنها را در بانك اطلاعاتي موتور جستجوگر براي استفاده هاي بعدي ثبت كند . موتور جستجو گر ميتواند افرادي را استخدام كند تا با گردش در ميان سايتهاي اينترنت آنها را بر حسب محتوي و كلمه كليدي و ... براي استفاده هاي آتي ذخيره و ايندكس كند يا شركتهائي كه داراي سايتي با محتواي خاص هستند آن را به موتور جستجوگر معرفي كنند و از مزاياي اين تبادل دو طرفه بهره مند گردند و ....

مشكل اينجاست كه :

الف) موتورهاي جستجوگر عموما محدود به صفحات وب هستند يا محدود به آدرسهاي ايميل يا ... ! نبايد انتظار داشته باشيد كه كليه سرورهاي Ftp ... كليه سرويس دهندگان وب و Soap ... كليه صفحات Xml و ... در خروجي جستجوي شما ظاهر گردند .

ب) شما نميتوانيد مطمئن باشد كه هر آنچه در مورد موضوع مورد علاقه شما وجود دارد در خروجي جستجو نيز وجود دارد !

اما اگر شما آدرس ( آدرسهاي ) الكترونيكي خود را در يك محضرخانه UDDI ذخيره و ثبت كنيد ميتوانيد اطلاعات مفيد و دقيقي از سرويسهاي موجود خود را در محيط اينترنت گسترش دهيد و هر زمان كه تمايل داشتيد محتواي انها را تغيير دهيد ! شما مالك اطلاعات خود هستيد !!

پس متوجه شده ايد كه UDDI استاندارد ايست براي ثبت اطلاعات موجود در يك سرويس وب ( يك صفحه اچ تي ام ال ساده تا پيچيده ترين صفحات مبتني بر Xml و ... ) .

UDDI Operator هاي متعددي فعلا در حال فعاليت هستند كه براي نمونه ميتوان از HP , IBM , SAP , Microsoft نام برد .

نكات مهم :

الف) سرويسهاي وب شما ( آنچه آينده اينترنت پر از آنها خواهد بود ! ) ميتوانند بصورت خودكار اطلاعاتي در مورد خود در محضرخانه هاي UDDI ثبت كنند . ميتوانيد خودتان بصورت دستي اينكار را انجام دهيد . ( از طريق بخش مخصوص به اينكار در وب سايت شركت متولي ثبت . مثلا اچ پي ! ) ميتوانيد از طريق نرم افزارهاي متعددي كه با وب سرويسهاي موجود در اين محضرخانه ها در ارتباطند اينكار را انجام دهيد . ميتوانيد نرم افزاري مبتني بر وب سرويس طراحي كنيد كه هر از چند گاهي وب سرويسها - Ftp سرور ها و بانك آدرسهاي ايميل شما را چك كند و محتويات آن را با عنواين از پيش تعيين شده مورد نظر شما در محضرخانه UDDI ثبت كند و ...

ب)اطلاعات موجود در UDDI Registry ها عموما جهت محاسبات كنترل شده رايانه اي مورد استفاده قرار ميگيرد نه توسط افراد مانند انچه در Serach engine ها اتفاق مي افتد . تبادل اطلاعات بين نرم افزارهاي متعدد كه به منظورهاي مختلفي توليد شده اند و ممكن است به يك نوع داده نياز داشته باشند از اولين اهداف طراحي وب سرويس و به تبع آن خلق UDDI است ! ... B2B يعني همين !

اگر دوست داريد يك سرويس UDDI را حضورا (!) ملاقات كنيد اينجا را ببينيد :

http://uddi.microsoft.com/default.aspx

راستي !!! اين UDDI مخفف چيست ؟؟

UDDI = Universal Description ,Discovery and Integration

موفق و مويد و از همه مهمتر آپ تو ديت باشيد ! inpriZ
کيفيت مقاله :
عالی خوب متوسط ضعيف


چند خط درباره وي سي دات نت ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۱۳ مراجعه امروز
۵۲۲۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چند خط درباره وي سي دات نت
نويسنده : Inprise
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۳/۱/۱۳۸۲ اين مقاله ۲۵۳۲ بار مطالعه شده است
۳۰ نفر تا به حال به اين مقاله رای داده اند.
در اين مقاله كوتاه با بخشي از توانائي هاي ويژوال سي دات نت آشنا خواهيد شد .

با توسعه مجموعه دات نت و ويژوال استوديو دات نت تحول بزرگي در عرصه برنامه نويسي ( فعلا ) ويندوز پديد آمده است . آنچه كه اين روزها بر سر زبانهاست تنها بخشي از توانائي هائيست كه دات نت در اختيار گسترش دهندگان نرم افزار قرار ميدهد . ( برنامه نويسان ويژوال بيسيك كه قبلا از نعمت توانائي طراحي برنامه هاي سرويس - چند ريسماني و مد كنسول محروم بودند اين حقيقت را بهتر از ديگران درك ميكنند !!! )

زبان برنامه نويسي در عالم دات نت تنها يك معنا دارد و آن چيزي نيست جز : Syntax ! كلاسهاي واحد و محيط توسعه قدرتمند و قابل گسترش دات نت يكي از بزرگترين تحولاتيست كه در عالم نرم افزار تا كنون رخ داده است . اين تغيير تاثيرات شگرفي بر ويژوال سي برجاي گذارده كه معدودي از آنها ذيلا معرفي ميشود .

هر چند برنامه نويسان ويژوال سي همچنان ميتوانند از MFC و حتي ATL براي توسعه نرم افزار استفاده كنند ( كه اين خود بزرگترين امتياز براي اين محيط محسوب ميشود . برنامه نويسان ويژوال سي مثل برنامه نويسان وي بي لازم نيست لباس جديد و رسمي بپوشند (!) و خود را برنامه نويس معرفي كنند !!! ) اما با باز كردن پروژه هاي قديمي خود در محيط ويژوال استوديو دات نت و دادن پاسخ مثبت به يك سوال و به تبع آن توليد يك فايل sln . توسط محيط توسعه ميتوانند از امكانات جديد و فدرتمند دات نت استفاده كنند و لزومي به تغيير هيچكدام از جزئيات برنامه نيست !

ديگر اثري از ClassWizard نميبينيد ! مايكروسافت با تقليدي (!) هوشمندانه از محيطهاي توسعه شركت اينپرايز اكنون به توسعه دهندگانش اين امكان را ميدهد كه در قالبي سهل و البته عاقلانه تر به گسترش نرم افزار هاي مبتني بر رخداد ( event-Driven ) بپردازند .

در صورتيكه تمايل داريد همچنان از قابليتهاي ميانبر كيبورد نسخه هاي قديمي ويژوال سي و محيط تسوعه نرم آن به جاي محيط جديد استفاده كنيد كافيست از منوي Help گزينه Show Start Page را انتخاب كرده و با دستكاري كردن My Profile در انتهاي صفحه خود را به عنوان Visual C++ Developer معرفي كنيد و بس !!

بزرگترين تغيير از دست رفتن محيط يكدست توسعه رابط كاربري است !!! ( بهتر است بگوئيم غم انگيز ترين تغيير !!! ) . برنامه نويسان ويژوال سي ديگر مثل گذشته هاي دور و دوست داشتني (!) امكان توليد برنامه هاي GUI را با آن قالب سابق ندارند . هر چند مايكروسافت براي اين برخورد خود تفاصيل زيادي آورده است ( ر.ك ام اس دي ان ) اما با تقليدي ديگر ( و هوشمندانه تر از مورد قبل ! ) سيستم ثبت اطلاعات موقعيتي GUI را از اينپرايز قرض گرفته و توسعه دهنده برنامه مبتني بر ويژوال سي ميتواند مولفه هاي ظاهري برنامه خود را در محيطهاي سي شارپ يا وي بي طراحي كرده و مشخصات ضبط شده آن را براي پياده سازي به محيط ويژوال سي وارد كند .

در پايان - هر چند بي ربط - چند سطري هم در مورد تفاوتهاي ويژوال سي و سي شارپ بخوانيد :

الف )سي شارپ ( برادر كوچكتر دلفي !!! ) براي تفكيك subnamespace از Namespace ايضا تفكيك Class از Namespace و همچنين دسترسي به متدها و اعضاي يك كلاس از نقطه ( Dot ) استفاده ميكند در حاليكه ويژوال سي همچنان از :: و <- مثل گذشته استفاده مينمايد .

ب) سي شارپ ( برادر كوچكتر دلفي !!! ) بعد از استفاده از New يك نمونه از شي توليد شده را بر ميگرداند در حاليكه ويژوال سي تنها يك اشاره گر به موقعيت شي را برخواهد گرداند .

ج)براي نوشتن برنامه هاي #C نيازي به ورود دستي منبع توابع به پروژه را نداريد و ميتوانيد از طريق منو هاي موجود اين كار را انجام دهيد در حاليكه در محيط ويژوال سي مجبوريد از Using# استفاده كرده و آدرس منبع ( مثلا System.dll ) را وارد كنيد . ( نگران نباشيد !!! اينبار مايكروسافت مشتريانش را شگفت زده كرده است !!! از طريق راهنماي برخط محيط ميتوانيد بفهميد كه كدام كلاس در كدام اسمبلي و محدوده وجود دارد و در كدام فايل ! )

د) Null در سي شارپ با حروف تمام كوچك و در ويژوال سي با حروف تمام بزرگ نوشته ميشود !

ه) سي شارپ pre-processor ندارد !

و) سي شارپ :

كد:

this.button1.Click += new System.EventHandler(this.button1_Click);

( تعجب نكنيد ! اين اصلا دلفي نيست ! اين سي شارپ است ... Hello world !!!! )

ويژوال سي :

كد:

button1->Click += new System::EventHandler(this, &Form1::button1_Click);

اميد است اين سطوري اطلاعات مفيد ( هر چند اندك ) درباره محيط جديد توسعه نرم افزار مايكروسافت به شما داده باشد ( ... و اي كاش مايكروسافت در حركتي جوانمردانه (!) نام محصول جديد خود يعني سي شارپ را * مايكروسافت دلفي * ميگذاشت !!! )

موفق و سلامت و جوانمرد (!) باشيد ! inpriZ

کيفيت مقاله :
عالی خوب متوسط ضعيف


معرفي #S ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۶۰ مراجعه امروز
۵۰۷۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
معرفي #S
نويسنده : Inprise
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۴/۱/۱۳۸۲ اين مقاله ۵۹۰ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
در يك جمله #S زبان برنامه نويسي و قابليتهاي SmallTalk را به محيط دات نت اضافه ميكند . SmallTalk اولين محيط واقعي توليد و توسعه نرم افزارهاي شي گرا بود كه حتي عده اي وي را پدر جاوا ميخوانند . در محيط SmallTalk حتي Integer ها و String ها هم شي هستند !!! حالا بايد ديد اين زبان محبوب دهه 80 چگونه با قابليتهاي دات نت سازگاري پيدا كرده است .

اس شارپ نه تنها از لحاظ ساختار ظاهري زبان ( SyntaX ) با بقيه محيطهاي توسعه دات نت ( وي بي - سي شارپ و ... ) متفاوت است بلكه طراحي شي گرا و نحوه برخورد آن با كلاسهاي نرم افزار نيز بطور كل فرق ميكند . اي مساله را حتي قبل از مشاهده اس شارپ با خواندن متن سخنراني مدير دپارتمان طراحي و گسترش SmallTalk اقاي سيمونز در همايشي كه سال 99 و به دعوت مايكروسافت از طراحان خبره نرم افزار براي ايده پروري حول دات نت برگزار شده بود ميتوان فهميد . او نميخواست اس شارپ چيزي مثل وي بي يا سي شارپ باشد و با پايه مشترك !

اس شارپ يك زبان اسكريپت نگاري است . حتما بلافاصله كلمه Jscript.Net به ذهنتان خطور ميكند ... عجله نكنيد !

اس شارپ ( مثل اغلب محيطهاي توليد اسكريپت چون PHP يا Perl ) نيازي به تعريف نوع متغير ندارد . ( dynamically typed language ) اس شارپ پشت صحنه تلاش زيادي خواهد كرد تا شما ( به عنوان يك توسعه دهنده نرم افزار ) درگير تخصيص حافظه مناسب - Type Casting هاي متعدد و مديريت فضاي مورد استفاده توسط اشيا نشويد !

( فرض كنيد تابعي داريد كه به عنوان يكي از پارامترهاي ورودي يك String دريافت ميكند و شما در پياده سازي تابع بناست از String.IndexOf استفاده كنيد . فرض كنيد استفاده كننده از تابع بجاي رشته يه Null به تابع شما هديه كند . دات نت تابع را به اين اميد كه شما سيستم مديريت خطاي خود را راخل تابع پياده سازي كرده ايد اجرا ميكند اما ... اما در محيط اس شارپ حتي Null هم يك شي پذيرفته شده است ! كافيست يكبار متد null.indexof را تعريف كنيد و به همراه مجموعه كلاسهايتان عرضه كنيد ... ! )

اس شارپ ميتواند از هر آنچه كه دات نت به وي بي و سي شارپ اعطا كرده استفاده كند . اس شارپ توانائي برقراري ارتباط با Dll ها ( Activex Dll's - win32 API Dll's - other Dll's !!! ) را دارد همچنين توانائي برقراري ارتباط با دات نت اسمبلي و دات نت كامپوننتهائي كه با بقيه زبانها طراحي شده اند . اس شارپ حتي ميتواند اسملي هاي استاندارد دات نت را توليد كند !

هر چند محيط دات نت فعلا بطور صريح و مستقيم از وراثت چندگانه حمايت نميكند اما اين قابليت در عمق مترجم اس شارپ موجود است .

حالا برنامه نويسان اس شارپ ميتوانند سرويسهاي وب - صفحات ASP.NET و حتي برنامه هاي سرويس ويندوز و كنسول توليد كنند و اميدوار باشند با گسترش دات نت روي پلت فرمهاي ديگر اين آنها هستند كه با نگاه عاقل اندر سفيه به برنامه نويسان جاوا خواهند نگريست !!!

موفق و سلامت و آپ تو ديت باشيد . inpriZ

کيفيت مقاله :
عالی خوب متوسط ضعيف


محيطهاي توسعه وب سرويس ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۶۳ مراجعه امروز
۵۰۷۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
محيطهاي توسعه وب سرويس
نويسنده : Inprise
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۴/۱/۱۳۸۲ اين مقاله ۵۴۳ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
الف ) IBM® WebSphere® Studio Application Developer كه به اختصار WASD
خوانده ميشود از شركت آي بي ام .

اين غول نرم افزار و سخت افزار استاندارد Soap و توسعه وب سرويس هاي جاوا را با محيط توسعه جاواي خود ( كه امروزه با محصولات بورلند و سيمانتك حرفي براي گفتن ندارد ) در آميخته كه محصولات آن ضمن دارا بودن شرايط استاندارد ( قابل استفاده براي همه محيطهاي توسعه نرم افزار كه ميتوانند تبادل Soap داشته باشند مثل سي بيلدر - جب بيلدر - سي شارپ - وي بي و ... ) با نرم افزار نه چندان معروف اين شركت يعني IBM WebSphere
Application Server.™ نيز سازگاري خوبي دارد . براي توسعه سرويسهاي وب ميتوانيد از اين محيط استفاده كنيد .

ب) IBM WebSphere
Application Server.™ از شركت bea كه صرفا و تخصصا براي توليد وب سرويسها گسترش يافته و توانائي ديگري ( مثل بقيه محيطهاي توسعه وب سرويس مبتني بر جاوا ) ندارد و صرفا روي BEA WebLogic Server. قابليت اجرا دارد !

ج)XML Spy™ از شركت Altova™ نيز محيطي مطلوب براي توسعه وب سرويس است . محيط اكس ام ال اسپاي نه تنها جوابگوي گسترش دهندگان وب سرويس است بلكه قدرتمند ترين محيط مجتمع توليد محصولات مبتني بر اكس ام ال ( XML - based ) و استيلهاي آن ( Xslt ) ميباشد . من محصولاتي نه چندان مقدماتي با اين نرم افزار توليد كرده ام و تهيه آن ( و همچنين تهيه Crack آن !!! ) را به همه توسعه دهندگان وب سرويس و ساكنان لايه دوم (!) توصيه ميكنم !

د) Microsoft® Visual Studio.NET كه معرف حضور همه ميباشد نيز از محيطهاي مناسب توسعه وب سرويس است . با وجود زبانهاي برنامه نويسي پرطرفدار ويژوال بيسيك و ويژوال سي و زبان جديد سي شارپ در اين محيط توليد وب سرويس كاري سخت تر از طراحي بازي معروف اكس او ( X-O ) نيست !

ه) Borland® JBuilder اولين محيطهاي توسعه وب سرويس مبتني بر جاوا ست كه به محيط قدرتمند اينپرايز براي توليد محصولات J2EE با كمك Web Services Kit قدرت يكتا و بي نظيري ميبخشد .

و) Borland Delphi,™ C++Builder,® and Kylix™ هر سه با محيطهائي بي نظير و يكتا و با قرار دادن كليه استاندارد هاي وب سرويس در اختيار برنامه نويسان اين محيطها در عالم طراحي و توسعه وب سرويس نيز به حق لقب RAD را به خود تخصيص داده اند .

موفق و مويد باشيد . inpriZ

کيفيت مقاله :
عالی خوب متوسط ضعيف


Web Cache ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۶۲ مراجعه امروز
۴۸۷۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Web Cache
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۴/۱/۱۳۸۲ اين مقاله ۶۰۲ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

چكيده

كردن محتويات Cache در دنياي كامپيوتر سابقه طولاني دارد، اما Cacheاگر چه مفهوم

اينترنت و وب يك فن آوري كاملا ً جديد براي كارايي وب ‏‏‍‍‎است. اين ارايه خلاصه ايــسـت از
Cache FORCE ، معرفي Web Cache در اينترنت ، ويژگي هاي Cashingمفاهيم
.Web Cache محصول شركت پركام تكنولوژي ، و نهايتاً بررسي رده هاي داخلي

مقدمه
در وب آن است كه صفحات ومحتويات وب تا حد امكان در مكاني نزديكCachingهدف از

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

كم شدن ترافيك به معناي هزينه كمتر در سطح ملٌي يا بين المللي و كم شدن درنگ وتاخــير بـه معني صرفه جويي در زمان مشتريان و ماشين هاي مورد استفاده(هم در طرف سرور و هم در طرف مشتري) است . كم شـدن بار روي مسير يــاب ها و سرورهاي وب ، يكي از مزايــاي

، افزايش قابليت اطمينان است. بدين معنا كه حتـيCaching مزيت ديگر است.Caching

هنوزCacheوقتي ارتباط با شبكه خارج از سايت قطع باشد، بسياري از درخواست ها توسط

پاسخ داده مي شود.

در وب آشنا مي شويد.Cachingدر ادامه با انواع

Cachingانواع

را در دو موضع متفاوت به شرح زير اعمال كرد:Cachingمي توان عمل

Explorer Caching الف ) برنامه كلاينت (مرورگر) يا

هاCache مستقيم روي سرور Caching ب )

است ، كه مي توان آنرا در دستهProxy server ،Cache قابل ذكر است كه نوعي از وب

دوم جاي داد . ولي ما از ذكر توضيح بيشتر در اي زمينه خودداري مي كنيم.

Explorer Caching الف ) برنامه كلاينت (مرورگر) يا

است . اما مـعايبي دارد كه Web Caching سـاده تريـن حالـت ممكن Cachingاين نوع

عبارتند از : افزونگي ذخيره سازي اطلاعات بين كامپيوترهاي يك سايت و ممكن نبودن اعـمال در كل سـايت وعدم اشتراكِ اطلاعات بين كاربران يك سايت . امــا وقتي Cachingسيـاسـت

درخواسـتهاي يك كاربر، داراي هم مكاني خاصي باشد، اين امكان براي همان كاربر مفيد است.

هاCache مستقيم روي سرور Caching ب )

Cache ، در شبكه محلي قرار مي گيرد . تمام درخواستها ابتدا به Cacheدراين روش ،

موجود بود ، ديگر نيازي به به اتصال به شبكه خارجي Cacheداده مي شود.چنانچه پاسخ در

با سرور اصلي در شبكه Cacheيا اينترنت نيست، اما اگر پاسخ موجود نبود يا كهنه شده بود،

خارجي ارتباط برقرار كرده ، و پس از دريافت جواب آنرا ذخيره مي كند تا در صورت تكرار

همان در خواست ، بلافاصله به كلاينت فرستاده شود. اين گونه سيستم ها معمولا‏‏‎ ً داراي فضاي ذخيره سازي بزرگ و انبوه و توان پردازشي بالا هستند.

ها عبارتند از:Cache Serverمزاياي

1- صرفه جويي در مصرف پهناي باند در خطوط ملي و بين المللي.

2- كاهش زمان پاسخ

3- امكان نظارت و فيلتر كردن اطلاعات وارده به سايت
4- كاهش بار روي سرورهاي وب در اينترنت وساير تجهيزات مياني (مسيرياب ها ، سوئيچها و...)

5- تحمل قطعي شبكه ،به اين معنا كه وقتي ارتباط شبكه داخلي با خارج يا اينترنـت قـطع اسـت مي توان بسياري از درخواستها را پاسخ داد.

6- بهـبود كارآيي برنامه هاي شبكه اي. به اين معنا كه برنامه هاي شبكه اي مـانند برنامه هايي Cacheكه با جاوا نوشته شده اند، در صورتي كه اطلاعات مورد نيازشـــان در شبكه مــحلي،

شده باشد ،سريعتر و بهتر انجام مي شوند.

7- در مقايسه با ساير راه حل ها ، براي بهبود كارآيي وكاهش زمان پاسخ ” مانند افزايش پهناي

باند ، بكارگيري ماشين هاي سرور سريعتر و غيره “ كه داراي محدوديت هــستند، ارزان تر و مقياس پذير تر است.

Cacheويژگي هاي

ها به دو صورت نرم افزاري و سخت افزاري عرضه مي شوند. درCache Serverامروزه

ها به صورت يك بسته حاوي كليه سخت افزار و نرم افزارهاCache Server در حالت دوم

مي باشد .Caching- ي لازم جهت انجام

را به دو دسته كاربردي و ساختاري تقسيم كرد.Cacheمي توان ويژگيهاي

ويژگيهاي كاركردي: آنهايي هستند كه بطور مستقيم براي كاربران نهايي قابل رويت هستند.اما ويژگيهاي ساختاري ؛ ويژگيهاي هستند كه براي كاربران مرئي نبوده، ولي در كارآيي و قابليت اطمينان ، بسيار مطمئن بسيار موثرند.
ويژگيهاي كاركردي پروتكلها:
، بايد پروتكلهاي ابرمتن وب و انتقال فايل را پشتيباني كند. به علاوه ،Cache Serverهر

داشتن امكان” اتصال پايدار“ و”گرفتن شرطي “ از مزاياي عمده هستند.

ويژگيهاي مديريت و پيكربندي:

، بايد ويژگيهاي زير را براي مديريت و تنظيم حافظه داشته باشد. Cache Server هر
1- واسط سريال : براي تنظيم ابتدايي و نيز حالات اضطراري ، بايد بتوان از طريق يك پايانه
را پيكر بندي ، نظارت و مديريت كرد.Cache ، سيستم LCDيا شبيه ساز پايانه و يا صفحه
2- واسط وب : بايد امكان تغيير و تنظيم تقريباً تمامي پارامترهاي سيستم را فراهم آورد.

3- قابليت ارتقا : بايد بتـوان از طــريق واســـط هاي فراهم شده ، بخش نرم افزاري سيـــستم را ترجيحاً از طريق شبكه و اينترنت ارتقا داد.

، بايد در مواقع بحراني ؛ مانند خرابي ،دسترسي غير مجازو ...Cache 4- هشدارها : سيستم

بفرستد.Cache هشدار مناسب را به صورت پست الكترونيك براي مسئول

، بايد اطــلاعات مشروح و مفصلي در مورد مـــيزان Cache Server 5- گزارش گيري :

بـهCache كاركرد و دستيابي، تعداد درخواستهاي انجام شده ، ميزان داده هايي كه از داخل

كاربران داده شده و ميزاني كه از اينترنت آورده شده و مانند آن را نــگهداري كند و بتــوان از آن گزارشهاي متنوعي تهيه كرد.

، بايد ابزارها و تسهيلات لازم براي نظارت بر كارآيي ِ خود را فراهم Cache Server 6-

كند.

(پروتكل نظارت از طريق شبكه) بر كارSNMP7- نظارت : بايد بتوان با ابزارهاي پروتكل

آن نظارت كرد.

،بايد بتواند در صورت بروز خرابي ، تا حــــد امكان بطور Cache Server 8- بازسازي :

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

در شبكه:Cache روشهاي استفاده از

در شبكه استفاده نمود.Cache Server به دو شيوه مي توان از

1- تنظيم مروگرها

در اين حالت ، تمام كاربران ، مرورگر خود را تنظيم مي كنند تا تمام درخواستها را از طــريق

ارسال كنند.Cache

2- تنظيم روترها

به اينترنتCache در اين حالت شبكه طوري پيكربندي مي شود كه تمام درخواستها از طريق

آگاهي ندارند .Cache Server ارسال شوند.در اين حالت ديگر كاربران از وجود

امنيت و محرمانگي
1- بايد بتوان براي تك تك كاربران اجازه دسترسي تعيين كرد. در اين صورت وقتي كاربـــران وصل مي شوند بايد نام كاربر و كلمه عبور را بدهند.Cache به

2- بايد بتوان امكان دسترسي به گروهي ازسايتها يا صفحات وب را ممنوع يامحدود كرد.

را براي ايجاد امنـــيت و SSL ، بايد بتواند پروتكل هاي ايــــمني مانند Cache Server3-

محرمانگي در اطلاعات مبادله شده بكار گيرد.

4- دسترسي به واسط مديريت وپيكربندي بايد محدود و محافظت شده به كمك كلمه عبور باشد.

قابليت اطمينان
تحمل خرابي از مهمترين ويژگيها ست . مخصوصاً در ارتباط با ساير سرورها بايد تشـــــخيص هاي همسايه قطع شده اند و ترافيك را متناسب با آن تنظيم كرد. سيستم ذخيرهCache داد كه

،بايد امكان ديسك كمكي حين كار راداشته باشد. يعني ، وقتي يــكي از ديــسكها Cacheسازي

خراب مي شود ؛ بايد اطلاعات آنرا روي ديسك كمكي منتقل شود؛ تا بدون قـطع كردن سروراز شبكه ، بتوان ديسك خراب را تعويض كرد.

بايد بتواند از منبع برق كمكي استفاده كند؛ تا در صورت خـرابي منبع برق Cache Server

اصلي ، بي وقفه به كار خود ادامه دهد.

هاCache لينك كردن

ها را بهCache يك راه براي رسيدن به كارآيي بيشتر و مقياس پذيري ، آن است كه بتوان

هم متصل كرد و اصطلاحاً يك ” خوشه “ ايجاد كرد.

لينك كردن و خوشه بندي از نظر اقتصادي نيز به صـــرفه اســــت . زيرا مي توان با بستن چند
گران قيمت دســت يـــافت. در Cache ارزان قيمت به يكديگر به كارآيي معادل يك Cache

ضمن ، امكان تحمل خرابي نيز بيشتر است. و ديگر ، نــــــقطه منفرد خرابي نخواهــــيم داشت.

ها طراحي و پياده سازي شدهاست. از جمله :Cache پروتكلهاي براي ارتباط بين

)CARP ها (Cache) ، پروتكل مسـيريـــــابي آرايــه ICPهاي اينــترنت (Cache پروتكل

بايد آنها را Cache Server) ، كه يـــك WCCP هاي وب (Cache و پروتكل ارتـــــباط

پشتيباني كند.

هاي سلسله مراتبيWeb Cache

ها را ايجاد كرد ؛ كه به صــــورت يك گراف يا درخـــت Cache بايد بتوان سلسله مراتبي از

هاي ديـــگر پدر- فرزنــــدي يا برادري دارد. Cache با Cache باشد. در اين حالــــت هر

هاي برادر مي توانند از اطـــلاعات هم استفاده كنند.اما در صورتي كه اطـلاعات در Cache

برادرها نباشد فقط بايد از طريق اجداد از اينترنت آورده شود.

است. اما از معايب آنhit ها وبالا رفتن Cache مزاياي اين حالت امكان اشـــتراك بيشتر بين

را نام برد.Over-downloadمي توان افزايش تا‍‎‌‌‌خير و

Caching استراتژي

هـــــا هر چيزي را كه از اينترنت مي آورند؛ ذخيره مي كنند. اما ، Cache Server معمولاً

مي توان براي بهبود كارآيي و كم شـــدن مصرف ديسك روي اندازه اشياء محدوديت گذاشت، يا روي طول عمر اشيا محدوديت اعمال كرد.

Cache Forceمعرفي

است كه Web Cache يك مجموعه كامــــل سخت افزارو نرم افزار Cache FORCE

بهينهCaching كارآيي بالاو قابليت اطمينان خوبي دارد. تمــــام قسمتهاي آن ، براي منظور

شده است. نرم افزارهاي آن قابليت حمل بر روي سخـــــت افزارهاي مختلف از جمله اسپارك و

آلفا را دارد.زير سيستم اين محصول طوري طراحي شـده است كه مي توان به راحتي ديسكهايي به آن افزود يا ظرفيت ديسكهاي آنرا تغيير داد. سيستم فـــايل اين وسيله نيز مخصوص كارهاي

طراحي شده و بنابر اين از سيستم فايلهاي عمومي به مراتب بهتر است. Caching

نيز يك سيستم عامل تـــك مــــــنظوره است كه در مجموعه Cache FORCE سيستم عامل

بهينه شده است. Caching قرار داده شده كه براي اهداف Cache FORCE

ها Web Cacheساختمان توسعه پذير

متفاوت اسـت. با نصب برد هاي مختلف Web Caching ميزان نياز برنامه هاي مختلف به

در سرور قرار مي گيرند. مي توان Expansion كه در داخل شكاف هاي Web Cache

در سرور افزود . به عنوان مثال با افزودن يك برد 20 ترا بايتيWeb Cacheبر حجم كلي

به يك سرور مجهز به پنتيوم 450 براي عبور هر 3 گيگا بايت اطـــلاعات 3 ثانيه جبران وقت داريم. كه اين صرفه جويي در زمان انتقال بين تمام كلاينت هاي متــــصل به ســـرور تقسيم مي شود.

Web Cacheرده هاي داخلي

Web مجــــــهز شد ؛ عملاً سه رده داخلي از Web Cacheپس از آنكه يك سرور به يــك

در اختيار هر كلاينت آن قرار مي گيرد.به عبارت ديگر سه رده مختلف داخلي پس ازCache

درون آن مستتر خواهد بود . كه بر حسب نياز مي توان از هر يك ازآنهاWeb Cacheنصب

عبارتند از:Web Cacheاستفاده كرد. سه رده داخلي

يا وب كش مرسومConventional Web Cache Area1-

WWIC يا وب كش عر ضي كه آنرا با علات اختصاري Web Width Cache Area2-

نمايش مي دهند.

نيز مشخص مي WHIC يا وب كش عمق كه آنرا با سر نامWeb High Cache Area3-

كنند.

Web عاي سخـــــت افزاري داراي رده چهارمي موسوم به Web Cacheعلاوه بر اين اكثر

يا ناحيه بالا مرتبه وب كــش نيز مي باشند، كه در حالت عادي و به Upper Cache Area

در يك سرور نصب مي شود. Web Cacheطور عادي و خودكار هنگاميكه يك

يا وب كش مرسوم بصورت پيش فرض وارد عمل Conventional Web Cache Area

Conventional Web Cache Area مي شود . هنگاميكه ترافيك در شبكه به اوج رسيد؛

گــاهي از عهده بار ترافيكي موجود بر نـخواهد آمد وآن زما نــيست كه كلاينت هاي متصـــل به سرور زياد بوده از طرفي اكثر اين مشتري ها به طور همزمان در حال برقراري تماس با مورد وWHICو WWIC يعني Web Cache شــبكه هستند. در چنين وضعي دو رده ديگر

و ياWHIC ويا WWIC استفاده قرار مي گيرند. بطور كـــلي براي آنكه برنامه ها بـتوانند از

كه اين دسترسي را ميسر Web Cache نيز بهره بگيرند مي بايد يك برنامه مديـر WUCA

مي Web Cacheمي سازد ؛ نصب شده باشد. در ادامه اين قســمت به شرح رده هاي داخلي

پردازيم.

Conventional Web Cache Area1-

Web Cache نيز نمايش مي دهند؛ درحكم CoW مرسوم كه آنرا با سر نام Web Cache

به حساب مي آيد.اغـلب آنها داراي حداقل Web Cacheپايه و اصلي درسرور هاي مجهز به

را مي توان تا 5 ترابايت ديگرافزايش Web Cache10 ترابايت گنجايش هستند واين رده از

شده در ســـرور مي توانند بدون نــياز به هيچ نوع Cacheداد . با اين توضيح كه برنامه هاي

دستورالعمل خاصي به اين رده دسترسي داشته باشند.

شده در سرور، مقداري از اين رده را اشغال مي كنند. به عبارتCaching هاي URLهميشه

CoW هاي درخواستي به صورت پشته وارد ردهURLديگر هنگام تماس يك مشتري با سرور
مي گردند. و پس از آنكه مشتري به محتويات پشــــته بصورت ترتيبي دست پيدا كرد، به ترتيب از

خارج ميشوند. Cow

Web Width Cache Area2-

در شرايط اضطراري كه ترافيك شبكه به اوج مي رسد Web Cacheيكي از راههاي توسعه

اسـت. كه Web Width Cache Area به نام Web Cacheآزاد سازي رده ديـگري از

بصورت كمكي در اختيار قرار مي گيرد. براي آنكهConventional اين رده به موازات رده

استفاده كنند؛ دستورالعمل هاي خاصي موردWWICمشتري ها بتوانند در مئاقع اضطراري از

اگر بتواند در دسترس كاربران قرار گيرد، بسيار سريع و كارآمد است.WWICنياز است.رده

مي بايستي درايـــوري به نام Web Cacheنكته مهم اينست كه براي استفاده موثر ازاين رده

نصب شود. اين برنامه ، از استفاده همزمان چند مـشتري از يكWeb Width Cache مدير

را براي مشـتري ها آسان مي Cache جلوگيري كرده ، و كاربرد اين نوعWWICقسمت از

كند.

Web High Cache Area3-

نيز مي باشد.مشتري هنگام WHIC قادر به توسعه به رده اي ديگر به نام Web Cacheهر

هنگام اســتفاده از اين نوع رده ، به صورت مســـتقيم به محتويات اين رده دسترســـي ندارد. در

به هر كدام يك صفحه گــفته مي شود، تقسيم بندي شـده است. WHICعوض،

مذكــور ،Cacheهنگامي كه يك مــشتري اطلاعات موجود دراين صفحه را مطالبه كند، مدير

صفحه مورد نظر را در ناحيه اي به نام قاب صفحه كپي مي كند.

نگهداري مي شود و مشتري اطلاعاتCacheالبته خود چارچوب صفحه در قسمت بالا مرتبه

مي كند.Downloadمربوطه را

Web Upper Cache Area4-

محـلي است كه مي توان اطـلاعاتي را كه در قسمت ديگر Web Cacheناحيه بـالا مرتبه در

قرار دارند را بر روي آن كپي كرد.Cache

قرار گرفته است. وConventional Web Cache Areaاين فضا بلافاصله بعداز رده

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

سخن آخر
و انــواع آن بود.Web Cacheآنچه را كه مطالعه نموديد حاصل پــژوهشي كوچـك در زمينه

وچگونگي كاربرد آن را بيان كنيم. اصولاWeb Cacheتلاش ما بر اين بود تا مفاهيم پايه اي

اين زمينه از اشتــغالات وب در پي افزايش سرعت دستـرسي كاربران به محتويات اينـــترنت و همچنين كاهش هزينه ها و نيز ترافيك شبكه است .

اســتفاده شده كه براي همه كاربران رايانه آشـــنا ست.درCacheبراي اين موارد از مفـــــهوم

مي باشد.يعني بــراي افزايـــش Cache در وب مترادف همان مفهـــوم عادي Cacheحقيقت

سرعت با پيش بـــيني اطلاعات درخواستي درآيـنده و ذخيره سازي آن در محلي كه دسترسي به آن سريعتر است؛ تقاضاهاي بعدي به سرعت و بــي نياز از دستيابي به شبكه جهاني پــاسخ داده مي شود.

اشـاره شد. و چهارWeb Cacheهمچنين از ديدگاه فني و البته بسيار گذرا به رده هاي داخلي

رده داخلي آن از لحاظ كاربرد و چگونگي در دسترس قرار گرفتن مورد بررســي قرار گرفت.

اميدواريم اين بحث كوتاه توانسته باشد فــنآوري جديــد وب كش را به صورت مختصر معرفــي نما يـد.

ســربـــلند و پــيروز بـاشــيـد.

مهدي علـيدوست....مجتبي لـطفي كرامتي

بهمن 1379

کيفيت مقاله :
عالی خوب متوسط ضعيف


آنچه سي بيلدر به شما ميدهد ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۶۵ مراجعه امروز
۴۸۸۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آنچه سي بيلدر به شما ميدهد
نويسنده : Inprise
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۷/۱/۱۳۸۲ اين مقاله ۷۱۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

1) قابليت كامپايل كردن برنامه هاي ++ Borland C و دلفي ( Bcc32.exe و dcc32.exe )

2) C++ Win32 preprocessor

3) Borland resource compiler/binder

4) قابليت ويژه براي براي توليد اطلاعات جامع در مورد محتواي Dll هاي استاندارد ويندوز و توليد محصور كننده هاي سي حول آنها جهت استفاده در محيط سي بيلدر . ( impdef و implib )

5) Borland Turbo Assembler

6) Borland Turbo Dump : براي بررسي ساختار فايلهاي اجرائي و ويرايش فايلهاي باينري . ( Tdump )

7) برقراري ارتباط با Type Library هاي استاندارد ويندوز ( tlib )

8 ) داراي Borland Visual Component Library

9) داراي Microsoft Foundation Classes ( نسخه 6 )

10) داراي Microsoft Active Template Library ( نسخه 3 )

11) داراي Borland C/C++ Runtime Library و ANSI/ISO Standard Template Library براي ترجمه صحيح برنامه هاي ++C .

12) داراي Microsoft Platform SDK ( همه فايلهاي هدر به همراه importer libraies )

13) قابليت كامپايل تمام برنامه هاي ويژوال سي .

14) داراي ANSI/ISO template implementation

15) حمايت كامل از COM و +MTS/COM

16) داراي محيط RAD براي توليد محصولات مبتني بر OLE .

17) داراي C++Builder TeamSource براي مديريت جامع كار تيمي و گروهي

18 ) حمايت داخلي از OLE DB , ADO , MSDE

19) حمايت داخلي از Interbase ( همراه با يك نسخه كامل كلاينت -سرور اينتربيس )

20) حمايت كامل از ANSI 92 SQL

21) داراي DbeXpress ( تكنولوژي جديد بورلند براي دسترسي به داده ها - مستقل از سيستم عامل - مستقل از نوع بانك داده ها - سازگار با دلفي و كايليكس)

22) حمايت داخلي براي ارتباط با Oracle , DB2 , MySql , Interbase

23) حمايت كامل از CLX ( كلاسهاي پايه توليد نرم افزار مستقل از سيستم عامل - قابليت كامپايل روي محيط كايليكس- لينوكس )

24) ابزار آلات پيش ساخته براي كنترل محصولات مبتني بر XML .

25) داراي يك نسخه كامل از BDE ( رابط دسترسي به بانك داده بورلند و API مربوط به آن و حمايت داخلي از پارادوكس - ديبيس - اكسس و حمايت از ODBC )

26 ) مجموعه غني ابزار آلات ويژوال براي توليد محصولات Data-Awar ( مبتني بر داده ها - بانكهاي داده - صفحات گسترده و ...)

27) حمايت داخلي و كامل از CORBA ( داراي VisiBroker naming services )

28 ) محيط مجتمع توليد صفحات وب مبتني بر بانك داده ها يا XML

29) حمايت كامل و داخلي از CGI , ISAPI , NSAPI , Aache Serve Madoules

30) داراي تكنولوژي جديد CodeGuard براي بررسي تبادلات نرم افزار با حافظه - رفع باگها و مشاهده فعاليت نرم افزار در حافظه بصورت همزمان ( Realtime )

31) داراي ديباگر JIT

32) داراي بيش از 300 كامپوننت پيش ساخته براي توليد و توسعه نرم افزار شامل : VCL , BaseCLX , netCLX , VisualCLX , DataCLX , Office 2000 wrappers و ...

33) داراي قابليت توليد برنامه هاي سرويس براي ويندوز و لينوكس .

34) داراي Object TreeView براي حركت ميان ساختار كلاسها .

35) داراي IDE قدرتمند و سازمان يافته .

36) XML data packet support

37) توليد وب سرويسهاي مبتني بر SOAP/XML

38 ) Native C++ XML bindings

موفق باشيد . inpriZ

کيفيت مقاله :
عالی خوب متوسط ضعيف


چگونه دانش دلفي را براي يادگيري ويژوال بيسيک به کار بگيريم ... ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۹۷۱ مراجعه امروز
۴۵۶۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چگونه دانش دلفي را براي يادگيري ويژوال بيسيک به کار بگيريم ...
نويسنده : رضا براري سوادکوهي
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۸/۱/۱۳۸۲ اين مقاله ۲۳۱۲ بار مطالعه شده است
۱۶ نفر تا به حال به اين مقاله رای داده اند.

به هر دليل امکان دارد يک برنامه نويس دلفي تصميم بگيرد - يا مجبور شود - که با ويژوال بيسيک برنامه بنويسد. در ابتدا اجازه دهيد به مساله اي بپردازيم که شايد همه ما به نحوي با آن برخورد کرده ايم، اسم اين حالت يا احساس را چه ميتوان گذاشت! مشخص نيست، ولي اجازه دهيد ساده بگوييم احساس برتري برنامه نويسان زبانهاي مختلف نسبت به برنامه نويسان ويژوال بيسيک. هر زبان برنامه نويسي برتريها و ضعفهاي مخصوص به خود را دارد. فرض کنيم قرار بر اين باشد که يک بازي نوشته شود، براي يک بازي جدي استفاده از ويژوال بيسيک با توجه به سرعت پايين برنامه هاي کامپايل شده آن منطقي به نظر نمي رسد، خوب در اين حالت از دلفي استفاده ميشود. يا در زماني که بخواهيم با يک زبان برنامه نويسي بر اساس کلاسها و اشياء (Object Oriented) واقعي کار کنيم، واضح است که دلفي يکي از بهترين انتخابهاست و در اين مورد ويژوال بيسيک بازنده حقيقي است (در ويژوال بيسيک هر چند از اشياء استفاده شده است اما مفهوم کلاسها، ارث بري و ... رعايت نشده اند). حال فرض کنيم قرار بر نوشتن برنامه اي ساده براي کار با يک پايگاه داده اي Microsoft Access باشد وبايد خيلي سريع هم آماده شود، کدام را انتخاب کنيم؟ جواب يک برنامه نويس دلفي کاملا واضح است! اما شايد اگر در کنار دلفي با ويژوال بيسيک هم کار کرده باشد نظر ديگري داشته باشد. در هر دو انتخاب ما کار با پايگاههاي داده اي پيش بيني شده است، هر دو نيز از قابليتهاي معيني براي کار برخوردار هستند که براي نوشتن برنامه ما کافي هستند. اگر با هر دو زبان کار کرده باشيد حتما قبول داريد نوشتن اين برنامه با ويژوال بيسيک به مراتب سريعتر از دلفي پايان ميپذيرد. خواهش ميکنم! قبل از اينکه من هدف حمله کفشهاي شما قرار بگيرم چند دقيقه اي تحمل کنيد و به بقيه بحث هم توجه کنيد...
بد هم نيست اگر يک برنامه نويس دلفي با ويژوال بيسيک هم برنامه نويسي کند، ويژوال بيسيک هم نقاط قوتي دارد که گاهي به برنامه نويس کمک ميکند. بعضي مواقع برنامه ها با ويژوال بيسيک خيلي سريعتر آماده ميشوند و براي برنامه نويسان دلفي يادگيري ويژوال بيسيک آسان است چون به هر حال امکانات و قابليتهاي آن به مراتب کمتر از دلفي است. ويژوال بيسيک يک زبان مبتني بر اشياء به معناي واقعي اينگونه زبانها نيست. ويژوال بيسيک از اشاره گرها استفاده نميکند، و همين آنرا به يک زبان آسان براي کار تبديل کرده است و البته کمي با قابليت! اما در همه برنامه ها وجود اشاره گرها و OOP (Object Oriented Programming) ضروري نيست. VB هم يکي از زبانهاي RAD(Rapid Application Development) است و آماده کردن برنامه ها با آن به نسبت سريعتر از دلفي است. راستي! گاهي نسخه اجرايي برنامه هاي ويژوال بيسيک از معادل دلفي آن کم حجم تر ميشود! البته دليل اينست که مستقل نيستند و يک کتابخانه زمان اجرا با حجمي در حدود يک مگا بايت را يدک ميکشند (مثلا در VB6 فايل msvbvm60.dll) و اين فايل بايد در کامپيوتر مورد نظر براي اجرا باشد.
در هر حال آشنايي با VB به عنوان يک زبان برنامه نويسي هم سطح دانش شما را در زمينه برنامه نويسي بالا ميبرد و هم ميبينيد که ويژوال بيسيک هم بدک نيست و فقط يک بيسيک تحت ويندوز نيست و به مراتب بيشتر از تغيير دلفي در مقايسه با پاسکال تحت DOS نسبت به بيسيک قديمي تغيير کرده است.

با VB آشنا شويم

خوب! ويژوال بيسيک همانگونه که از نام آن پيداست بر پايه BASIC ساخته شده است. اما در واقع بسيار گسترده تر از آن است. اجازه دهيد طرح کلي VB را بررسي کنيم. در VB بر خلاف دلفي بخش مربوط به unitها را نداريم. علاوه بر اين، حتي بخش VAR را براي تعاريف متغيرها نداريم! اين کار در هر جاي برنامه امکان پذير است، حتي اگر تمايل نداريد ميتوانيد اصلا اين کار را انجام ندهيد. مشخص کردن نوع متغير در VB به صورت اتوماتيک انجام ميشود.

بد نيست يک مثال از قطعه برنامه اي در اين دو زبان را بررسي کنيم. يک تابع:
Function AddNumbers( Num1: Integer; Num2: Integer): Integer;
Var
Num3: Integer;
Begin
Num3 := Num1 + Num2;
Result := Num3;
End;

FUNCTION AddNumbers( Num1 AS Integer, Num2 AS Integer) AS Integer
DIM Num3 AS Integer
Num3 = Num1 + Num2
AddNumbers = Num3
END FUNCTION
در کد VB علامت ";" در انتهاي دستورات قرار نميگيرد به اين دليل که VB بر اساس خطوط کار ميکند (اصطلاحا Line Based است) يعني دستورات چند خطي ندارد (البته اين مساله راه حلي دارد که از بحث خارج است). نکته دوم و بسيار مهم Begin و End در کد VB مشاهده نميشود و در واقع مجموعه دستورات پشتيباني نميشوند.
روش معرفي متغيرها در VB که در هر جاي برنامه امکان پذير است به صورت زير ميباشد:
Dim As

نکته ديگر اينست که در VB مانند اکثر زبانها و بر خلاف پاسکال از علامت = استفاده ميشود ( نه از := ). همچنين در VB هم - مانند دلفي - مقدار بازگشتي تابع در متغيري با نام خود تابع بازميگردد.
از بخشهاي مهم يک زبان برنامه نويسي دستورات شرطي آن است. در دلفي دستورات با If … Then شروع شده و دستورات در يک مجموعه که با Begin و End مشخص ميشوند قرار ميگيرند و امکان استفاده از Else هم پيش بيني شده است:
If a = 1 Then
begin
a := 0;
Text := ‘Hello World’;
end
Else
a := a + 1;

IF a = 1 THEN
a = 0
Text = "Hello World"
ELSE
a = a + 1
END IF
تفاوت آشکار است، باز هم عدم استفاده از Begin و End در کد VB، همچنين لزوم وجود END IF در پايان مجموعه شرطي و نکته مهم؛ استفاده از علامت (") در VB براي نمايش عبارات متني با جاي (‘) در دلفي. به نظر ميرسد تنها نکته گيج کننده عدم وجود Begin و End باشد. نوبتي هم باشد بايد حلقه ها را بررسي کنيم:
For i := 1 To 100 Do
Begin
a = i * 2;
Text := ‘Hello World’
End;

FOR i = 1 TO 100
a = i * 2
Text = "Hello World"
NEXT i
اولين تفاوتي که به چشم ميخورد عدم استفاده از Do در قالب دستور FOR در VB است. نکته ديگر مشخص شدن انتهاي حلقه با استفاده از دستور NEXT است. کليه دستورات مابين FOR و NEXT در حلقه قرار دارند. اما در مورد Repeat … Until کافيست از Do … Loop Until استفاده شود!
اما مساله بعد Procedureهاي دلفي هستند. معادل Procedure دلفي در VB از SUB(Subroutine) استفاده ميشود. و باقي مثل تابعي است که در بالا ديديم و در پايان آن هم از END SUB استفاده ميشود.
در توابع VB نکته مهم اينست که متغير Result نداريم و بايد حتما از نام همان تابع براي بازگرداندن مقدار استفاده کرد.
در مورد آرگومانهاي توابع و SUBها بايد دقت کرد به جاي (;) که در دلفي استفاده ميشود، اينجا بايد (,) را به کار برد و باقي مثل تعريف متغير در VB بدون استفاده از DIM است.
شايد بد نباشد مثالي از SUB هم ببينيد:
SUB MakeSound
Beep
END SUB
به نظر ميرسد مسائل اساسي بررسي شدند، باقي به عهده خودتان!
اما نکات زير را به خاطر داشته باشيد:
از (;) در انتهاي خطوط استفاده نکنيد. همانگونه که گفته شد VB به تغيير خط حساس است، يعني عبارت زير نيز ايجاد خطا ميکند:
IF (a = 1) AND (b = 2) AND (c = 3)
AND (d = 4) AND (e = 5) THEN
Beep
END IF
و بايد به صورت زير باشد:
IF (a = 1) AND (b = 2) AND (c = 3) AND (d = 4) AND (e = 5) THEN
Beep
END IF
البته همانطور که گفته شد براي ايجاد دستورات چند خطي راه حلي در نظر گرفته شده است و آن استفاده از (_) (Under-line/Underscore) است:
IF (a = 1) AND (b = 2) AND (c = 3)_
AND (d = 4) AND (e = 5) THEN
Beep
END IF
فراموش نکنيد در VB امکان استفاده از مجموعه دستورات را نداريد و تنها مجموعه ها عبارتند از:
IF…END IF, FOR…NEXT, DO…LOOP UNTIL, DO…LOOP WHILE, FUNCTION…END FUNCTION, SUB…END SUB

خوب فکر کنم کافي باشد، اگر علاقه مند شديد کتب متعدد ويژوال بيسيک راهنماي خوبي براي شما هستند...
http://www.mcp.com

کيفيت مقاله :
عالی خوب متوسط ضعيف


Windows API and API Wrappers ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۶۶ مراجعه امروز
۵۰۸۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Windows API and API Wrappers
نويسنده : رضا براري سوادکوهي
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۹/۱/۱۳۸۲ اين مقاله ۱۱۹۰ بار مطالعه شده است
۲۵ نفر تا به حال به اين مقاله رای داده اند.

مباحثي که در اين نوشته مطرح ميشوند شامل توضيحاتي درباره رابط برنامه نويسي کاربردي (API) و موارد مربوطه ميباشند. لازم به ذکر است که سعي شده است مسائل در حد امکان ساده و قابل هضم براي کليه سطوح باشند و احتمالا براي دوستاني که به صورت حرفه اي در زمينه برنامه نويسي فعاليت دارند سطحي و غير قابل استفاده هستند.

-API چيست؟
حروف A.P.I. در واقع مخفف عبارت Application Programming Interface است. اگر در دايرکتوري سيستم ويندوز نگاهي بياندازيم (در ويندوزهاي برپايه 95/98 در آدرس \Windows\System و در ويندوزهاي مبتني بر NT در آدرس \WinNT\System32) تعدادي فايل کتابخانه اي dll (Dynamic Link Library) مشاهده ميکنيم. اين فايلها مجموعه توابعي را تشکيل ميدهند که براي اجراي سيستم عامل، تامين رابط کاربر (User Interface) و محيط کاربري استفاده ميشوند. اين مجموعه فايلها در واقع Windows API را تشکيل ميدهند.
هدف Windows API اين است که به برنامه نويسان اجازه داده شود تا برنامه هايي مبتني بر سيستم عامل ويندوز و رابط کاربري آن توليد گردند. در واقع به جاي اينکه هر کس با توجه به سليقه هاي شخصي کدهايي جهت توليد اجزاء اصلي ويندوز همچون فرمها، کليدها، منوها و ... تنظيم کند، همه برنامه نويسان ميتوانند توابع اختصاص داده شده مرتبط را که در Windows API وجود دارند صدا کنند و به سيستم عامل اجازه دهند تا آن اجزاء را ايجاد کند.
اهداف توابع API و نحوه استفاده از آنها در پلت فرم SDK (Software Development Kit) آمده است (دوستاني که شيوه هاي قديمي برنامه نويسي براي ويندوز را ميشناسند حتما با اين کيت آشنا هستند) و از طريق اسناد مربوطه قابل دسترسي هستند. به عنوان مثال در پکيج MSDN (MicroSoft Developer Network) ويا در کمک دلفي بخش Windows SDK ميتوانيم ليست اين توابع را مشاهده کنيم. علاوه بر اينها امکان دستيابي به اين اطلاعات از طريق آدرس زير نيز وجود دارد:
http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/msdownload/platformsdk/setuplauncher.htm

دقت شود نحوه صدا زدن اين توابع در زبانهاي برنامه نويسي مختلف متفاوت است اما اصول کار در تمامي آنها يکسان است.

- چرا از Windows API استفاده ميکنيم؟
برنامه نويسان اصولا با هدف اجراي عملياتي فراتر از آنچه که محيطهاي مختلف در حالت استاندارد خود ارائه ميکنند به استفاده از توابع API روي مي آورند.
به عنوان مثال فرض کنيم زماني که بخواهيم به محض ايجاد فوکوس بر روي يک Edit Box زبان نوشتاري به فارسي تغيير کند و به محض اينکه فوکوس تغيير کرد زبان کاربري هم به حالت عادي بازگردد. استفاده از اين توابع در مسائل پيچيده تر گاهي بسيار مفيد ميباشد.

- چگونه توابع API را صدا کنيم؟
با توجه به اينکه اين مطلب به زبان برنامه نويسي خاصي اختصاص ندارد از اين جهت در اين بخش تنها اشاره اي به نحوه کار با توابع Windows API ميشود.
به همراه کليه کامپايلرها و مترجم هاي ارائه شده در بازار که قابليت استفاده از توابع Windows API را دارند اسنادي در رابطه با نحوه استفاده از اين توابع وجود دارد که برنامه نويس ميتواند با مراجعه به آنها با شيوه کار و صدا زدن توابع مورد بحث آشنا شود.
نکته مشترک بين محيطهاي مختلف اينست که براي استفاده از اين توابع ابتدا نياز به وجود بخشي جهت تعريف اين توابع هست و سپس امکان صدا زدن آنها در بين برنامه ايجاد ميگردد. يعني کار با اين توابع دو مرحله دارد:
- تعريف مشخصات تابع مربوطه
- صدا زدن تابع مورد نظر در هر جاي برنامه درست همانند ديگر توابع استاندارد

- API Wrappers
شايد بيان چنين عنواني به صورت مستقل چندان منطقي و قابل قبول نباشد اما چون چنين کلماتي در متون مختلف مورد استفاده قرار گرفته و ميگيرند، توضيحاتي که به درک اين مفاهيم کمک کنند ميتوانند مفيد باشند.
همانگونه که گفته شد امکان توليد کليه اجزاء استاندارد سيستم عامل ويندوز از طريق صدا زدن توابع Windows API وجود دارد، اما صدا زدن مستقيم اين توابع کد برنامه را پيچيده ميکند و امکان توليد خطاهاي غيرقابل پيش بيني را افزايش ميدهد که ايجاد خطاهاي سيستمي ميکنند و حتي احتمال ضربه زدن به سيستم نيز وجود دارد.
از اين رو در نرم افزارهاي برنامه نويسي محيطهايي توليد شده اند تا برنامه نويسان را در اين امر ياري دهند. کامپايلرهاي Delphi و CBuilder و همچنين مترجم Visual Basic و ... همراه خود محيط رابطي دارند که کاربر از طريق آنها به اجزاء استاندارد طراحي دسترسي دارد.
به اين صورت برنامه نويس براي توليد اجزاء در برنامه خود نياز به نوشتن کدهاي طولاني ندارد. در اين محيطها توابع مورد نياز براي ايجاد يک جزء کامل يک جا جمع شده اند و در يک مجموعه قرار گرفته اند و کاربر به راحتي تنها به اين مجموعه اشاره ميکند.
اين مجموعه يک API Wrapper است.
اصولا Wrapperها اختصاصا به اجزاء گرافيکي آنگونه که در بالا گفته شد اشاره نميکنند. هر مجموعه اي مانند: يک ActiveX، يک Component يا يک تابع ايجاد شده در يک فايل dll و ... ميتواند يک API Wrapper باشد.
در حالتي که چنين مجموعه هايي در دسترس باشند پيشنهاد ميشود که در کد برنامه ها از آنها استفاده شود.

نکته: دقت شود تفاوتهايي ميان نسخه هاي مختلف API وجود دارد، مثلا هنگام کار با ويندوز2000 بايد دقت کرد گاهي تفاوتهايي بين توابع API مرتبط با آن و توابع ويندوز 98 وجود دارد.

در پايان توصيه ميشود در استفاده از توابع Windows API در برنامه ها محتاط باشيد و پيش از استفاده اسناد راهنماي تابع مورد نظر خود را به دقت مطالعه کنيد.

موفق باشيد ...

نگارنده: رضا براري سوادکوهي
اسفند 81

کيفيت مقاله :
عالی خوب متوسط ضعيف


چگونه با استفاده از ويژوال بيسيک نمايه (Icon) فايلها را نمايش دهيم؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۸۱ مراجعه امروز
۴۴۹۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چگونه با استفاده از ويژوال بيسيک نمايه (Icon) فايلها را نمايش دهيم؟
نويسنده : رضا براري سوادکوهي
موضوع : Visual Basic [image] نسخه قابل چاپ
تاريخ نشر : ۹/۱/۱۳۸۲ اين مقاله ۱۰۰۲ بار مطالعه شده است
۱۱ نفر تا به حال به اين مقاله رای داده اند.

1. مقدمه
همه ما در صورتي که از کاربران سيستم عامل ويندوزباشيم با محيط کاري آن براي حرکت بر روي پوشه ها و فايلهاي آن آشنا هستيم. ويندوز براي راحتي کار کاربران آن در بررسي فايلهاي موجود در کامپيوتر از نمايه ها (Icon) استفاده ميکند. اين تصاوير کوچک اما مفيد به کاربر سيستم کمک ميکند در يک نگاه بتواند نوع فايلهاي موجود را در صورتي که براي سيستم تعريف شده باشند تشخيص دهد. حال فرض کنيم قرار است نرم افزاري بنويسيد که در آن به هر دليل قرار است کاربر به بررسي يا به اصطلاح Browsing فايلها بپردازد، به عنوان مثال يک برنامه که به عنوان سرويس گيرنده FTP کار ميکند. اگر فايلها با نمايه هاي هماهنگ با باقي سيستم مشخص شوند برنامه به مراتب جذابتر از زماني ميشود که فقط نام فايلها مشخص باشد، موافق نيستيد؟
در اين نوشته سعي بر اين است که با توجه به قابليتهاي موجود در ويژوال بيسيک به مجموعه اين نمايه ها دسترسي پيدا کنيم و از آنها در برنامه هاي خود استفاده کنيم.
با توجه به مطالبي که در اين نوشته بررسي ميشوند، دانش کافي در برنامه نويسي با ويژوال بيسيک و همچنين آشنايي با Registry ويندوز از ضروريات است. همچنين دانستن نحوه استفاده از توابع API ميتواند به فهم کامل مساله کمک کند.
البته مطالب کلي آن براي برنامه نويسان به زبانهاي مختلف مفيد است، شايد نسخه مربوط به زبانهاي ديگر را هم به زودي آماده کردم ولي فعلا با ويژوال بيسيک بسازيم ...

2. ويندوز چگونه نمايه ها (Icons) را ميشناسد؟
Registry ويندوز محلي است که ما بايد براي رسيدن به پاسخ اين سوال به آن نگاهي بياندازيم. در اين سفر همراه ما باشيد...
در Registry شاخه اي با نام HKEY_CLASSES_ROOT وجود دارد که تمام کليدهاي مورد بحث ما در آن قرار دارند. اما ارتباط اين کليدها چگونه است؟
حتما با پسوندها (Extensions) در سيستم نام گذاري فايلها آشنا هستيد. کليدي که حاوي اطلاعات مورد نياز ماست با نام پسوند فايل مربوط به آن در اينجا قراردارد با توجه به اينکه يک نقطه در ابتداي آن قرار ميگيرد. مثلا فايلهاي گرافيکي نقش بيتي (Bitmap) که با پسوند bmp مشخص ميشوند به اين صورت در Registry تعريف ميشوند: HKEY_CLASSES_ROOT\.bmp
اگر اين کليدها را بررسي کنيم داراي يک مقدار (Value) با عنوان default هستند که به کليد يک برنامه کاربردي اشاره دارد. فرض کنيد براي مثال در کامپيوتر من به آن نوشته "Paint.Picture" نسبت داده شده است. هر برنامه کاربردي در اينجا براي خود يک يا چند کليد دارد که البته دقت شود اين کليد لزوما به نام برنامه اجرايي آن اشاره نميکند. در اينجا کليد مربوط به نمايه نوع فايل مربوطه به فايلي اشاره ميکند که حاوي نمايه مربوط به آن نوع از فايل باشد (اين کار از طريق يک کليد در زيرمجموعه يا Sub Key انجام ميگيرد).
توجه کنيد مقادير در Registry کامپيوترهاي مختلف ميتواند متفاوت باشد ولي اصول کلي يکسان هستند.

3. چگونه نمايه يک نوع فايل را پيدا کنيم؟
بياييد کارمان را براي آينده ساده کنيم. با نوشتن يک تابع موافقيد؟ تابعي که با دريافت نام فايل از طريق پسوند آن نمايه مربوط به آن را بيايد و آنرا نمايش دهد. نظرتان چيست؟ با قرار دادن اين کد در يک Module هميشه به آن دسترسي داريد. براي اين تابع يک ورودي براي نام فايل در نظر ميگيريم و يک خروجي که به يک شئ اشاره کند (اين کار را از طريق hDC انجام ميدهيم)
بد نيست از همين الان به فکر آماده کردن يک برنامه آزمايشي هم باشيم. فرمي با يک Picture Box، يک Text Box و يک Command Button آماده کنيد. مشخص است که براي وارد کردن نام فايل از Text Box استفاده ميشود، براي نمايش نمايه مورد نظر از Picture Box استفاده خواهد شد و Command Button هم براي فرمان دادن به کار ميرود.

براي شروع کار با توجه به اينکه از تعدادي توابع API استفاده ميکنيم بايد آنها را مشخص کنيم. بنابراين کدهاي زير را در برنامه خود قرار دهيد:

Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const KEY_READ = &H20019

Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Declare Function DrawIcon Lib "user32.dll" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal hIcon As Long) As Long
Private Declare Function DestroyIcon Lib "user32.dll" (ByVal hIcon As Long) As Long

Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

اگر با توابع فوق آشنايي نداريد ميتوانيد به راحتي از راهنماي موجود در شبکه MSDN ارائه شده از سوي شرکت MicroSoft استفاده کنيد.
خوب با نام GetFileTypeIcon موافق هستيد؟ خوب پس با معرفي اين تابع و متغيرهاي آن کار را آغاز ميکنيم.

Private Sub GetFileTypeIcon(FileName As String, Picture_hDC As Long )
Dim TempFileName As String
Dim lngError As Long
Dim lngRegKeyHandle As Long
Dim strProgramName As String
Dim strDefaultIcon As String
Dim lngStringLength As Long
Dim lngIconNumber As Long
Dim lngIcon As Long
Dim intN As Integer
End Sub

احتمالا اين متغيرها در حال حاضر براي شما مفهوم خاصي ندارند ولي نگران نباشيد خيلي زود با هم آشنا خواهيد شد!
همانطور که گفته شد براي پيدا کردن نوع فايل نياز به دانستن پسوند آن داريم، بنابراين بايد پسوند فايل ورودي به تابع را از نام آن جدا کنيم. متغير TempFileName اينجا استفاده ميشود:

TempFileName = Right(FileName, Len(FileName) - InStrRev(FileName, ".") + 1)

خوب، پسوند را داريم؛ واضح است مرحله بعدي کار ما پيدا کردن آن در Registry است. متغير lngError براي ذخيره عدد بازگشتي نشان دهنده خطا در اجراي توابع به کار ميرود. lngRegKeyHandle شماره handle مربوط به کليد (Registry Key) را نگه ميدارد. strProgramName رشته ارتباطي برنامه کاربردي را نگه ميدارد، همانطور که گفته شد اولين مقداري که کليدهاي Registry باز ميگردانند اشاره به برنامه کاربردي مربوطه دارد.
خوب کدهاي زير اين کار را انجام ميدهند:

lngError = RegOpenKey(HKEY_CLASSES_ROOT, TempFileName, lngRegKeyHandle)
If lngError Then GoTo No_Icon

lngStringLength = 260
strProgramName = Space$(260)
lngError = RegQueryValueEx(lngRegKeyHandle, vbNullString, 0, 0, strProgramName, lngStringLength)

If lngError Then
lngError = RegCloseKey(lngRegKeyHandle)
GoTo No_Icon
End If

lngError = RegCloseKey(lngRegKeyHandle)
strProgramName = Left(strProgramName, lngStringLength - 1)

بد نيست اين کدها را بررسي کنيم؛ در ابتدا با استفاده از RegOpenKey به دنبال کليد مربوطه ميگرديم. سپس اگر کد برگشتي نشان دهد چنين نوع فايلي ثبت نشده است از روال فعلي خارج ميشود. در غير اين صورت با کمک گرفتن از تابع RegQueryValueEx مقدار آن کليد را استخراج ميکند. باز هم بروز خطا کنترل ميشود، اگر خطايي رخ داده بود ابتدا فضاي اشغال شده را با تابع RegCloseKey آزاد ميکنيم (کاري که عموما فراموش ميشود!) سپس از روال عادي خارج ميشويم. اگر خطايي رخ نداده بود باز هم حافظه را آزاد ميکنيم، به هر صورت ما مقدار کليد را در strProgramName ذخيره کرده ايم.
اگر به خاطر داشته باشيد در ابتدا گفته شد که مقدار موجود در کليد اول در واقع به کليد مربوط به برنامه کاربردي مربوطه اشاره دارد که در آنجا ميتوانيم به محل نمايه مورد نظر دسترسي داشته باشيم. مقداري که ما انتظار داريم به آن برسيم در يک کليد در زير مجموعه کليد برنامه تحت عنوان DefaultIcon قرار دارد. بنابراين کار تقريبا همانند بخش قبلي است:

lngError = RegOpenKey(HKEY_CLASSES_ROOT, strProgramName & "\DefaultIcon", lngRegKeyHandle)
If lngError Then GoTo No_Icon

lngStringLength = 260
strDefaultIcon = Space$(260)
lngError = RegQueryValueEx(lngRegKeyHandle, vbNullString, 0, 0, strDefaultIcon, lngStringLength)
If lngError Then
lngError = RegCloseKey(lngRegKeyHandle)
GoTo No_Icon
End If
lngError = RegCloseKey(lngRegKeyHandle)
strDefaultIcon = Trim$(Left(strDefaultIcon, lngStringLength - 1))

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

4. نمايش نمايه مربوط به فايل
تا به حال نمايه يک نوع فايل را در ويندوز تغيير داده ايد؟ حتما ميدانيد که نمايه ها غير از فايلهاي با پسوند .ico ميتوانند در فايلهاي اجرايي (exe Files) يا حتي در کتابخانه هاي ويندوز (dll Files) هم قرار بگيرند. مشکل شد؟ نگران نباشيد راه حل آن اينجاست!
در Registry ويندوز من مقدار اين کليد براي مثال خودمان يعني bmp به صورت "mspaint.exe, 1" ميباشد. اين روش نمايش دادن محل نمايه هاست، بنابراين ابتدا بايد شماره را از محل جدا کنيم. اين شماره را در lngIconNumber ذخيره ميکنيم:

intN = InStrRev(strDefaultIcon, ",")
If intN < 1 Then GoTo No_Icon

lngIconNumber = Trim$(Right(strDefaultIcon, Len(strDefaultIcon) - intN))
strDefaultIcon = Trim$(Left(strDefaultIcon, intN - 1))

تا اينجا که مشکلي نبود! اما بعد...
خوب همانگونه که در ابتدا گفته شد براي نشان دادن نمايه از يک شئ که hDC داشته باشد استفاده ميکنيم که ما در مثال از Picture Box استفاده کرديم. راستي! تابع ExtractIcon کاري را که ميخواستيم براي ما انجام ميدهد:

Draw_Icon:
lngIcon = ExtractIcon(App.hInstance, strDefaultIcon, lngIconNumber)

If lngIcon = 1 Or lngIcon = 0 Then GoTo No_Icon
lngError = DrawIcon(Picture_hDC, 0, 0, lngIcon)

lngError = DestroyIcon(lngIcon)
Exit Sub

با توجه به اينکه به بخشي براي فايلهايي که نمايه معرفي شده ندارند هم نياز داريم براي بخش فعلي برچسب Draw_Icon درنظر ميگيريم و در انتها هم براي اتمام کار از Exit Sub استفاده ميکنيم. در صورتي که تابع ExtractIcon مقادير 0 يا 1 را برگرداند به اين معني است که امکان دستيابي به نمايه مربوطه وجود نداشته است.
اگر همه چيز خوب پيش رفته باشد تا اين مرحله شانس ديدن نمايه مورد نظر خود را داشته ايد. اما اگر نوع فايل مورد نظر تعريف نشده بود.

5. نمايش نمايه نوع فايلهاي تعريف نشده
حتما ميدانيد که در اين حالت خود ويندوز از يک نمايه از پيش تعيين شده خودش استفاده ميکند، چرا ما استفاده نکنيم؟
فايل Shell32.dll که در پوشه سيستم ويندوز قرار دارد اين نمايه را در خود جاي داده است. بنابراين کافيست اين فايل را به عنوان فايل حامل نمايه مورد نظرمان در نظر بگيريم و باقي کارها همانند قبل خواهند بود:

No_Icon:
strDefaultIcon = Space(260)
lngStringLength = GetSystemDirectory(strDefaultIcon, 260)
strDefaultIcon = Left(strDefaultIcon, lngStringLength) & "SHELL32.DLL"
lngIconNumber = 0
GoTo Draw_Icon

بنابراين ابتدا آدرس فايل Shell32.dll را به متغيرهاي مربوطه نسبت ميدهيم سپس همان مجموعه Draw_Icon را مورد استفاده قرار ميدهيم.

اينها اصول کار بودند و تابع شما هنوز براي پيشرفت و گسترش جا دارد.
فکر ميکنم صدا زدن اين تابع پس از فشرده شدن Command Button روي فرم به عهده خودتان باشد بهتر است!

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

به اميد موفقيت شما ...

کيفيت مقاله :
عالی خوب متوسط ضعيف


سوالات و پاسخ هاي راجع به XML ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۶۸ مراجعه امروز
۴۸۸۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
سوالات و پاسخ هاي راجع به XML
نويسنده : محمد باقر معموری
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۹/۱/۱۳۸۲ اين مقاله ۸۴۵ بار مطالعه شده است
۱۶ نفر تا به حال به اين مقاله رای داده اند.
س: XML چيست؟
پ: XML حروف اختصارى eXtensible Markup Language به معناى زبان نشانه گذارى (فرمت بندي) توسعه پذير. اين زبان در كنسرسيوم وب بوسيله گروهى كه مي خواستند HTML و SGML را بهبود ببخشند ايجاد گرديد. مشخصات رسمى آن در فوريه عرضه گرديد.

س: درست، اما چي هست؟
پ: اول از همه بايد بدانيد كه XML يك زبان نيست؛ در واقع سيستمى براى تعريف زبان هاى ديگر است. با اين توضيحات مي توانيد متوجه شويد كه XML چگونه كار مي كند:
1- يك زبان نشانه گذاري مثل HTML شكل و قيافه متن شما را در Browser تعريف مي كند. HTML داراي عناصري مثل FONT و B و I است كه براي تعريف شكل متن استفاده مي شود.
2- اگر از XML براي نشانه گذاري يا فرمت بندي متن خود استفاده كنيد، شما بايد براي Browser / كامپيوتر توضيح دهيد كه متن شما چگونه نمايش داده شود.
3- XML هر گونه اي كه شما بخواهيد قابل تغيير است. در واقع همان جوري نمايش داده مي شود كه شما دستور مي دهيد.

س: آيا XML مي دونه كه چگونه در Browser نمايش داده بشه؟
پ: همان طور كه قبلا هم گفتم تنها در صورتي كه شما به او بگوييد؛ در غير اين صورت نه!

در واقع شما بايد يك بار يك متن XML را نشانه گذاري كنيد و يك بار ديگر به او بفهمانيد كه چگونه بايد در Browser يا بر روي چاپگر خارج شود.
س: نشانه هاي يا Tagهاي اين XML چي هستند؟
پ: در واقع XML هيچ Tag خاص از پيش تعيين شده اي ندارد. شما هر Tag خاصي را كه دوست داريد مي توانيد براي خودتان تعريف كنيد و سپس با استفاده از XSLT كه تقريبا همان CSS براي HTML مي باشد به Browser بگوييد كه XML را چگونه نمايش دهد.

س: چه Browserهاي XML رو پشتيباني مي كنند.
پ: Internet Explorer نسخه 5 XML رو پشتيباني مي كنه. البته نه به طور كامل. قسمتهايي از XML وقتي كه IE 5 عرضه شد هنوز در كنسرسيوم وب در حال بررسي و تجديد نظر بودند. اما IE 6 زبان XML رو به طول كامل پشتيباني مي كنه. Netscape 7 كه تازگي ها عرضه شده نيز همين طور.

س: همه اينها درست؛ ولي چه دليل داره ما HTML رو رها كنيم و بياييم سراغ XML. در واقع XML چه مزيتي براي ما دارد؟
پ: HTML خيلي خيلي ساده بود ولي همين سادگي اون رو شديدا محدود كرده بود. ولي XML اگر چه يك مقدار مشكل است ولي اون رو به يك زبان بسيار انعطاف پذير و قابل اطمينان بدل كرده. به علاوه XML يك مزيت مهم براي Web Server ها داره و به خاطر همين مزيت مهم هستش كه هميشه يكي از اجزاي Web Serviceها XMLها هستند. مزيت XML تعريف يك زبان استاندارد براي انتقال اطلاعات بين Platformهاي مختلف است. تا قبل از XML هميشه نياز به زباني كه با استفاده از اون بشه اطلاعات رو در قالب ساختار بندي شده منتقل كرد ديده مي شد. البته شايد براي كاربران ايراني زياد اين مساله اهميت خودش رو نشان نده چون در ايران اكثرا سرورهاي ويندوز يا Linux فعاليت دارند و ما پروژه هاي بزرگ كاربرد وب را نداريم ولي در بعضي كشورهاي صنعتي بزرگ وب سرورهاي مختلفي استفاده مي شود و گاهي مديران مجبور ميشوند در يك سازمان و يا در يك پروژه از چند وب سرور استفاده كنند و در اين مواقع كه XML خودش رو نشون مي دهد.
از همه اينها كه بگذريم XML يك زبان استاندارد براي انتقال داده است. مهمترين مزيت XML "استاندارد" بودنش است.

س: حالا در صورت امكان يك نمونه از اين فايلهاي XML رو به ما نشون بدهيد؟
پ: اين هم يك نمونه از يك فايل XML:

<?xml version="1.0" standalone="yes" ?>
- <DATAPACKET Version="2.0">
- <METADATA>
- <FIELDS>
<FIELD attrname="ID" fieldtype="i4" SUBTYPE="Autoinc" />
<FIELD fieldname="First Name" attrname="First_Name" fieldtype="string" WIDTH="20" />
<FIELD fieldname="Last Name" attrname="Last_Name" fieldtype="string" WIDTH="20" />
</FIELDS>
<PARAMS CHANGE_LOG="1 0 4 2 0 4 3 0 4" AUTOINCVALUE="4" />
</METADATA>
- <ROWDATA>
<ROW RowState="4" ID="1" First_Name="Muhammad" Last_Name="Mamouri" />
<ROW RowState="4" ID="2" First_Name="Mohandes" Last_Name="Safaiy" />
<ROW RowState="4" ID="3" First_Name="Ahmad" Last_Name="Mosavi Zanjani" />
</ROWDATA>
</DATAPACKET>

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

س: از كجا بايد شروع كنم؟
پ: اين ربط به توانايي هاي شما در زبان انگليسي دارد. اما اگر در اين زمينه مشكلي نداريد و به علاوه تمايل داريد از XML و تكنولوژي هاي هم قطار آن مثل XSLT - XPATH - DTD - DOM - WAP - Schema - XPath - XForms - SOAP - WSDL لذت ببريد از www.w3schools.com استفاده كنيد.
در غير اين صورت شايد بهتر باشد يك كتاب راجع به XML به زبان فارسي تهيه كنيد. البته اگر خيلي عجله نداريد مي توانيد منتظر ساير مقالات راجع به XML سايت www.IranDevelopers.com بمانيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


Export كردن اطلاعات به XML ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۲ بيننده در حال حاضر
۱۹۷۴ مراجعه امروز
۴۵۶۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Export كردن اطلاعات به XML
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۱/۱/۱۳۸۲ اين مقاله ۲۱۳۹ بار مطالعه شده است
۱۴ نفر تا به حال به اين مقاله رای داده اند.

خيلي اوقات در برنامه نويسي اينترنت و همچنين در برنامه هاي بزرگ نياز داريد كه قابليت Export كردن يك Dataset را به XML به كاربرانتان بدهيد.
در اين مقاله مي توانيد شيوه هاي مختلفي براي حل اين مساله بيابيد. البته شايد هم اكنون حس كنيد كه اصولا نياز به همچنين مساله اي در پروژه هاي ايراني محسوس نيست. نگارنده اين مقاله تقريبا با شما هم عقيده است ولي قطعا روزي خواهد رسيد كه اين نياز به خوبي خود را نشان بدهد. به علاوه اگر شما قصد داريد برنامه نويسي اينترنت بكنيد حتما بايد اطلاعات خود را راجع به XML و دلفي گسترش دهيد. همچنين اگر قصد داريد پروژه هاي شبكه بسيار بزرگ براي سازمان هاي بزرگ بنويسيد مطمئن باشيد XML مي تواند در قسمتي از كارهايتان شما را ياري بدهد.
Export كردن يك Table به XML از طريق ADO
انجام دادن اين كار از طريق ADO به راحتي استفاده از متد SaveToFile است.
به كد زير نگاهي بياندازيد:

ADOTable1.SaveToFile('C:\test.xml', pfXML);

همچنين با استفاده از كد زير مي توانيد فايل XML مربوطه را Load كنيد:

ADOTable1.LoadFromFile('C:\test.xml');

البته به جاي pfXML مي توانيد از pfADTG مي توانيد استفاده كنيد كه در اين صورت اطلاعات در يك فايل به صورت Binary نوشته مي شود كه به موضوع مبحث ما ربطي ندارد.
Export كردن يك Table به XML با استفاده از ClientDataSet
براي انجام اين عمل با استفاده از ClientDataSet از مراحل زير استفاده كنيد:
1- يك كمپوننت TDataSetProvider (اين كمپوننت در تب DataAccess قرار دارد) بر روي فرم خود بگذاريد و با استفاده از پراپرتي DataSet آن را به Table يا Query و يا به طور كلي به Dataset مورد نياز خود متصل كنيد.
2- يك كمپوننت TClientDataSet (اين كمپوننت هم در تب DataAccess قرار دارد) بر روي فرم خود بگذاريد و مقدار ProviderName آن را برابر نام كمپوننت TDataSetProviderي قرار دهيد كه در مرحله 2 ساختيد.
3- به سادگي از متد زير استفاده كنيد:

ClientDataSet1.Active := True;
   ClientDataSet1.SaveToFile('C:\1.XML', dfXML);

پارامتر دوم متد SaveToFile مي توانيد شامل مقادير زير باشد: dfBinary, dfXML, dfXMLUTF8.
بررسي راجع به dfBinary به مبحث مقاله ما مربوط نمي شود.
حتما متوجه شده ايد كه تفاوت dfXML و dfXMLUTF8 چيست؟ dfXMLUTF8 براي Export اطلاعات به XML با فرمت Unicode استفاده مي شود.
البته راههاي ديگري هم وجود دارد كه در نسخه هاي قديمي تر دلفي به كار مي آيند.
به عنوان مثال به اين مقاله نگاه كنيد:
http://www.scalabium.com/faq/dct0079.htm

اين مقاله يك Procedure ارائه كرده است كه به خوبي عمل مي نمايد و در صورتي كه شما از نسخه هاي قديمي تر دلفي استفاده مي كنيد يا از نسخه Professional دلفي استفاده مي كنيد كه ClientDataSet در آن موجود نيست مي توانيد از اين مقاله استفاده كنيد. (البته به احتمال زياد در ايران اكثر برنامه نويسان دلفي از دلفي 6 يا 7 و نسخه Enterprise استفاده مي كنند و ديگر از اين نظري مشكلي نخواهند داشت)

موفق و مويد و منصور باشيد
معموري

کيفيت مقاله :
عالی خوب متوسط ضعيف


استفاده از XML به عنوان ذخيره كننده اطلاعات ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۲۷ مراجعه امروز
۴۱۴۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از XML به عنوان ذخيره كننده اطلاعات
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۱/۱/۱۳۸۲ اين مقاله ۲۴۸۶ بار مطالعه شده است
۲۳ نفر تا به حال به اين مقاله رای داده اند.

XML مي تواند دقيقا همچون يك Table براي شما عمل نمايد. در واقع شما مي توانيد با استفاده از XML اطلاعات خودتان را در قالب يك جدول ذخيره كنيد.
براي اين كار مي توانيد از كمپوننت ClientDataSet استفاده كنيد. (اين كمپوننت را مي توانيد در تب DataAccess بيابيد). در واقع اين كمپوننت يك In-Memory Table است. يعني اطلاعات خود را در حافظه نگهداري مي كند و به همين علت نيز فوق العاده سريع است.
نگاهي به كد زير بيانداريد و با Load كردن يك XML و درست كردن آن آشنا شويد:

     ClientDataSet1.FileName := ExtractFilePath(
Application.ExeName) +
 'test.xml';
     if FileExists(ClientDataSet1.FileName) then
        ClientDataSet1.Open
     else
     begin
          //AddFieldDef version
          with ClientDataSet1.FieldDefs do
          begin
               Clear;
               with AddFieldDef do
               begin
                    Name := 'ID';
                    DataType := ftAutoInc;
               end; //with AddFieldDef do
               with AddFieldDef do
               begin
                    Name := 'First Name';
                    DataType := ftString;
                    Size := 20;
               end; //with AddFieldDef do
               with AddFieldDef do
               begin
                    Name := 'Last Name';
                    DataType := ftString;
                    Size := 20;
               end; //with AddFieldDef do
          end; //with ClientDataSet1.FieldDefs
          ClientDataSet1.CreateDataSet;
     end; //else

همان طور كه در اين كد مشاهده مي كنيد در ابتدا سعي شده است كه فايل test.xml را كه در شاخه خود برنامه قرار دارد Load كنيم و در صورتي كه اين فايل پيدا نشد. آنگاه مي توان به سادگي (همان طور كه مي بينيد) اين فايل را از ابتدا تعريف كرد. فيلدهاي مورد نظر و مشخصات مورد نياز خود را وارد كنيم و همچنين در صورتي كه نياز بود با استفاده از IndexDefs يك يا چند Index جديد ساخت.

به چند نكته راجع به اين كد توجه كنيد:
1- با استفاده از متد FieldDefs.AddFieldDef مربوط به ClientDataSet مي توانيد يك فيلد جديد درست كنيد.
2- براي ساخت Index نيز مي توانيد از متد IndexDefs.AddIndexDef مربوط به ClientDataSet استفاده كرد.
2- هر فيلد مي توانيد شامل انواع زير باشد:

type TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd);

بنابراين شما به جاي ftString و يا ftAutoInc مي توانيد از هر كدام از اين ثابت ها استفاده كنيد.
همان طور كه مستحضريد به راحتي مي توانيد در XML حتي از BLOB هم استفاده كرده و در آن صدا يا تصوير ذخيره كنيد.
3- از متد CreateDataSet پس از ساخت فيلدهاي مورد نظرتون استفاده كنيد تا اين تغييرات تثبيت بشود.
4- يك ClientDataSet را مي توانيد به سادگي به يك كمپوننت DataSource وصل كنيد. پس از آن مي توانيد از هر كمپوننت Data-Aware مثل DBGrid براي Browse يا ويرايش اطلاعات استفاده كنيد.
5- با استفاده از Filter و Filtered مي توانيد به سادگي اطلاعات رو فيلتر كنيد و به علاوه به سادگي مي توانيد از Locate و FindKey و FindNearest براي جستجو در Tableتون استفاده كنيد.
6- در ClientDataSet هم مي توانيد از Lookupها و فيلدهاي محاسباتي استفاده كنيد. همچنين مي توانيد دو نوع فيلد ديگه به اسم InternalCalc و Aggregate رو هم استفاده كنيد. راهنماي مربوط به InternalCalc و Aggregate دلفي رو در اين جا آورده ام:

InternalCalc:
Retrieves values calculated at runtime by a client dataset and stored with its data (instead of being dynamically calculated in an OnCalcFields event handler). InternalCalc is only available if you are working with a client dataset. Values calculated for an InternalCalc field are stored and retrieved as part of the client dataset’s data.

Aggregate:
Retrieves a value summarizing the data in a set of records from a client dataset.

موفق و مويد و منصور باشيد
معموري
کيفيت مقاله :
عالی خوب متوسط ضعيف


نوشتن همه كمپوننتهاى در يك فايل XML با استفاده از TXMLDocument ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۳۰ مراجعه امروز
۴۱۴۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نوشتن همه كمپوننتهاى در يك فايل XML با استفاده از TXMLDocument
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۱/۱۳۸۲ اين مقاله ۱۷۶۸ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

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

شيوه كلي كار تقريبا مشخص است:
for k:=0 to MyComponent.ComponentCount-1 do
begin
if not(MyComponent.Components[k] is TControl) then
Continue;
// Here create node of the XML-document
end;

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

// Writing all controls of given component to TXMLDocument
according parent-child relations
Procedure Get_Component_as_XML
(AXMLDoc : TXMLDocument; AComponent : TComponent);
Var
k : Integer;
Ctrl : TControl;
List : TList;
XMLNode : IXMLNode;
GrCtrl : TGraphicControl;

Procedure Add_WinControlAttributes(AWCtrl :
TWinControl; AXMLNode : IXMLNode);
begin
with AXMLNode do
begin
Attributes['Name'] := AWCtrl.Name;
Attributes['Owner'] := AWCtrl.Owner.Name;
Attributes['Left'] := IntToStr(AWCtrl.Left);
Attributes['Top'] := IntToStr(AWCtrl.Top);
Attributes['Width'] := IntToStr(AWCtrl.Width);
Attributes['Height'] := IntToStr(AWCtrl.Height);
// ... add all needed properties
end;
end;

Procedure Add_GraphicsControlAttributes(AGCtrl : TGraphicControl;
AXMLNode : IXMLNode);
begin
with AXMLNode do
begin
Attributes['Name'] := AGCtrl.Name;
Attributes['Owner'] := AGCtrl.Owner.Name;
Attributes['Left'] := AGCtrl.Left;
Attributes['Top'] := IntToStr(AGCtrl.Top);
Attributes['Width'] := IntToStr(AGCtrl.Width);
Attributes['Height'] := IntToStr(AGCtrl.Height);
// ... add all needed properties
end;
end;

Procedure Add_XML_Node(AWCtrl : TWinControl; AXMLNode : IXMLNode);
Var
i : Integer;
WinC : TWinControl;
SubIXMLNode,
NewStock : IXMLNode;
SubCtrl : TControl;
SubGrCtrl : TGraphicControl;
begin
NewStock := AXMLNode.AddChild(AWCtrl.ClassName);
Add_WinControlAttributes(AWCtrl, NewStock);

if AWCtrl.ControlCount > 0 then
for i:=0 to AWCtrl.ControlCount-1 do
begin
SubCtrl := TControl(AWCtrl.Controls[i]);
if List.IndexOf(SubCtrl) >= 0 then
Continue;

// take a special look at this list
List.Add(Pointer(SubCtrl));

if SubCtrl is TGraphicControl then
begin
SubGrCtrl := TGraphicControl(SubCtrl);
SubIXMLNode := NewStock.AddChild(SubGrCtrl.ClassName);
Add_GraphicsControlAttributes(SubGrCtrl, SubIXMLNode);
end

else if SubCtrl is TWinControl then
begin
WinC := TWinControl(SubCtrl);
Add_XML_Node(WinC, NewStock);
end;
end;
end;

begin
AXMLDoc.XML.Clear;
AXMLDoc.XML.Add(Format('<%s>', [AComponent.Name]));
AXMLDoc.XML.Add(Format('</%s>', [AComponent.Name]));

AXMLDoc.Active := True;

List := TList.Create; // special list to hold controls added to XML
try
for k:=0 to AComponent.ComponentCount-1 do
begin
if not(AComponent.Components[k] is TControl) then
Continue;
Ctrl := TControl(AComponent.Components[k]);
if List.IndexOf(Ctrl) >= 0 then
Continue;

// take a special look at this list
List.Add(Pointer(Ctrl));

if Ctrl is TGraphicControl then
begin
GrCtrl := TGraphicControl(Ctrl);
XMLNode := AXMLDoc.DocumentElement.AddChild(GrCtrl.ClassName);
Add_GraphicsControlAttributes(GrCtrl, XMLNode);
end

else if Ctrl is TWinControl then
// Recursive process for child controls
Add_XML_Node(TWinControl(Ctrl), AXMLDoc.DocumentElement);
end;
finally
List.Clear;
List.Free;
end;
end;

همان طور كه گفتم شايد اصولا نياز به انجام اين كار آن چنان وجود نداشته باشيد ولي با استفاده از اين مقاله شما به خوبي ياد خواهيد گرفت كه از TXMLDocument استفاده كنيد.
انشاء الله در آينده مقالات ديگري را براي آشنايي با كمپوننت فوق العاده جذاب و قوي TXMLDocument ارائه خواهم داد.

موفق و مويد و منصور باشيد
معموري

 کيفيت مقاله :
 عالی   خوب   متوسط   ضعيف


چرخش Bitmap ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۳۳ مراجعه امروز
۴۱۴۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چرخش Bitmap
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۱/۱۳۸۲ اين مقاله ۲۲۸۷ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

مرجع: http://www.delphi3000.com/articles/article_3592.asp

چرخش Bitmap يك Effect گرافيكي است كه دلفي به طور پيش فرض پشتيباني نمي كند. اين مقاله به شما نشان مي دهد كه چگونه يك تصوير را تا 90 درجه بچرخانيد. اين كد به شما اجازه مي دهد كه هر تصويري را 0 - 90 - 180 يا 270 درجه بچرخانيد. با كمي كار مي توان اين كد را به گونه تغيير داد كه براي هر درجه اي كار كند:

procedure RotateBitmap(var hBitmapDC : Longint; var lWidth : Longint;
var lHeight : Longint; lRadians : real);
var
I : Longint; // loop counter
J : Longint; // loop counter
hNewBitmapDC : Longint; // DC of the new bitmap
hNewBitmap : Longint; // handle to the new bitmap
lSine : extended; // sine used in rotation
lCosine : extended; // cosine used in rotation
X1 : Longint; // used in calculating new
// bitmap dimensions
X2 : Longint; // used in calculating new
// bitmap dimensions
X3 : Longint; // used in calculating new
// bitmap dimensions
Y1 : Longint; // used in calculating new
// bitmap dimensions
Y2 : Longint; // used in calculating new
// bitmap dimensions
Y3 : Longint; // used in calculating new
// bitmap dimensions
lMinX : Longint; // used in calculating new
// bitmap dimensions
lMaxX : Longint; // used in calculating new
// bitmap dimensions
lMinY : Longint; // used in calculating new
// bitmap dimensions
lMaxY : Longint; // used in calculating new
// bitmap dimensions
lNewWidth : Longint; // width of new bitmap
lNewHeight : Longint; // height of new bitmap
lSourceX : Longint; // x pixel coord we are blitting
// from the source image
lSourceY : Longint; // y pixel coord we are blitting
// from the source image

begin
// create a compatible DC from the one just brought
// into this function
hNewBitmapDC := CreateCompatibleDC(hBitmapDC);

// compute the sine/cosinse of the radians used to
// rotate this image
lSine := Sin(lRadians);
lCosine := Cos(lRadians);

// compute the size of the new bitmap being created
X1 := Round(-lHeight * lSine);
Y1 := Round(lHeight * lCosine);
X2 := Round(lWidth * lCosine - lHeight * lSine);
Y2 := Round(lHeight * lCosine + lWidth * lSine);
X3 := Round(lWidth * lCosine);
Y3 := Round(lWidth * lSine);

// figure out the max/min size of the new bitmap
lMinX := Min(0, Min(X1, Min(X2, X3)));
lMinY := Min(0, Min(Y1, Min(Y2, Y3)));
lMaxX := Max(X1, Max(X2, X3));
lMaxY := Max(Y1, Max(Y2, Y3));

// set the new bitmap width/height
lNewWidth := lMaxX - lMinX;
lNewHeight := lMaxY - lMinY;

// create a new bitmap based upon the new width/height of the
// rotated bitmap
hNewBitmap := CreateCompatibleBitmap(hBitmapDC, lNewWidth,
lNewHeight);

//attach the new bitmap to the new device context created
//above before constructing the rotated bitmap
SelectObject(hNewBitmapDC, hNewBitmap);

// loop through and translate each pixel to its new location.
// this is using a standard rotation algorithm
For I := 0 To lNewHeight do begin
For J := 0 To lNewWidth do begin
lSourceX :=
Round((J + lMinX) * lCosine + (I + lMinY) * lSine);
lSourceY :=
Round((I + lMinY) * lCosine - (J + lMinX) * lSine);
If (lSourceX >= 0) And (lSourceX <= lWidth) And
(lSourceY >= 0) And (lSourceY <= lHeight) Then
BitBlt(hNewBitmapDC, J, I, 1, 1, hBitmapDC,
lSourceX, lSourceY, SRCCOPY);
end;
end;

// reset the new bitmap width and height
lWidth := lNewWidth;
lHeight := lNewHeight;

// return the DC to the new bitmap
hBitmapDC := hNewBitmapDC;

// destroy the bitmap created
DeleteObject(hNewBitmap);

End;

يك مثال از طريقه استفاده از اين تابع را ببينيد:

procedure TForm1.RotateTest(Sender: TObject);
var
lRadians : real;
DC  : longint;
H, W : integer;
Degrees : integer;
begin
Degrees := 45;
lRadians := PI * Degrees / 180;
DC := Image1.Picture.Bitmap.Canvas.Handle;
H := Image1.Picture.Bitmap.Height;
W := Image1.Picture.Bitmap.Width;
RotateBitmap(DC, W, H, lRadians);
Image1.Width := W;
Image1.Height := H;
Image1.Picture.Bitmap.Width := W;
Image1.Picture.Bitmap.Height := H;
BitBlt(Image1.Picture.Bitmap.Canvas.Handle, 0, 0, W, H,
          DC, 0, 0, SRCCopy);
Image1.Refresh;
end;
موفق و مويد و منصور باشيد
معموري
 کيفيت مقاله :
 عالی   خوب   متوسط   ضعيف


چگونه يك HotKey يا ميان بر سيستم درست كنيم؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۳۶ مراجعه امروز
۴۱۵۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چگونه يك HotKey يا ميان بر سيستم درست كنيم؟
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۱/۱۳۸۲ اين مقاله ۲۲۵۲ بار مطالعه شده است
۱۳ نفر تا به حال به اين مقاله رای داده اند.

چگونه يك HotKey يا ميان بر سيستم درست كرده و آن را مديريت كنيم؟ (كه در تمامي برنامه ها كار كند)
مرجع: http://www.delphi3000.com/articles/article_3529.as p

{**********************

Copyright © by Jim McKeeth Licensed under LGPL
( http://www.gnu.org/licenses/licenses.html#LGPL )

Demo of creating a system wide hotkey or shortcut
This was written in Delphi 7,
but should work in most other versions
(but obviously not Kylix)
You need a form with
1) a THotKey named HotKey1
2) a TCheckBox named CheckBox1
To demo
1) Change the hotkey in the value
2) Check the box
3) Minimize the application
4) Press the hot key
5) Be impressed
---------}
unit SystemHotKeyUnit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, StdCtrls, ComCtrls, Dialogs,
// Menus need to be added for calls in the code
Menus;

type
TForm1 = class(TForm)
HotKey1: THotKey;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
protected
// Handle the global hot key
messages when they are sent to the window
procedure HotyKeyMsg(var msg:TMessage); message WM_HOTKEY;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var
myAtom: integer;

function ShiftState2Modifier(const Shift: TShiftState):Word;
begin
Result := 0;
if ssShift in Shift then
Result := Result or MOD_SHIFT;
if ssAlt in Shift then
Result := Result or MOD_ALT;
if ssCtrl in Shift then
Result := Result or MOD_CONTROL;
end;

function GetShortCutKey(ShortCut: TShortCut):Word;
var
shift: TShiftState;
begin
ShortCutToKey(ShortCut,Result,shift); // call in Menus!
end;

function GetShortCutModifier(ShortCut: TShortCut):Word;
var
key: Word;
shift: TShiftState;
begin
ShortCutToKey(ShortCut,key,shift); // call in Menus!
Result := ShiftState2Modifier(shift);
end;

function RegisterHotShortCut(const h:THandle; const Atom: integer;
const ShortCut: TShortCut):Boolean;
var
key : Word;
Shift: TShiftState;
begin
UnregisterHotKey(h,Atom); // call in Windows
ShortCutToKey(ShortCut,key,shift);
Result := RegisterHotKey(h,Atom,ShiftState2Modifier(Shift),key);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// you need to type cast it as a pChar if you are using a string
myAtom := GlobalAddAtom(pchar('HotKeyDemo'));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Handle,myAtom);
GlobalDeleteAtom(myAtom);
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
RegisterHotShortCut(Handle,myAtom,HotKey1.HotKey)
else
UnregisterHotKey(Handle,myAtom);
end;

procedure TForm1.HotyKeyMsg(var msg: TMessage);
begin
if (msg.LParamLo=GetShortCutModifier(HotKey1.HotKey))
and (msg.LParamHi=GetShortCutKey(HotKey1.HotKey)) then
begin
Application.BringToFront;
Showmessage('Hey, now that is a system wide hot key!')
end;
end;

end.

موفق و مويد و منصور باشيد
معموري
 کيفيت مقاله :
 عالی   خوب   متوسط   ضعيف


جاوا و UML ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۷۸ مراجعه امروز
۴۴۹۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
جاوا و UML
نويسنده : Inprise
موضوع : Java [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۱/۱۳۸۲ اين مقاله ۱۸۶۴ بار مطالعه شده است
۲۳ نفر تا به حال به اين مقاله رای داده اند.
طراحي و توليد برنامه هاي سازمان مقياس ( Enterprise-Level -- منظور نرم افزارهائي است كه با تكنولوژي هاي چند لايه [N-tier ] و براي محيطهائي وسيع با كاربردهاي مختلف - پلت فرمهاي متفاوت و كاربران غير همگن طراحي ميشوند ) با استفاده از تكنولوژي نه چندان جديد J2EE برخلاف محيطهاي ديگر ( ابزارهاي مايكروسافت و بورلند ) فوق العاده پيچيده و دشوار است و عملا هزينه اي كه بر دپارتمان نرم افزار تحميل ميكند در مقابل ديگر ابزارهاي به هيچ وجه توجيه پذير نيست و شايد تنها كليد حياتي و راز بقاي جاوا مستقل از محيط بودن ( Platform-independent ) آن است . برنامه نويسان حرفه اي جاوا بسيار نادر و حرفه اي هاي EJB بسيار كمياب هستند . ( EJB = enterprise Jaba beans -- با قدري تسامح و بيان غير دقيق تكنولوژي مشابه COM مايكروسافت در عالم جاوا )

اما هر چه بود گذشت !!! امروز جاوا به لطف آپتيمال جي ( OptimalJ ) داراي ابزاري براي توسعه سريع نرم افزار ها و كامپوننتها ( اجزاي مستقل توليد نرم افزار ) است كه با ابزارهاي مشابه مايكروسافت و بورلند قابل مقايسه و در برخي موارد برتر است !

آپتيمال جي داراي محيط توسعه اي Model-Driven است . به اين مفهوم كه شما درست مثل يك گرافيست ( شايد هم درست مثل يك مدير با تدبير !!! ) نرم افزار خود را نقاشي (!) ميكنيد و آپتيمال جي زحمت نگارش كد جاوا را خواهد كشيد آنهم نه پس از صدور دستوري شبيه به كامپايل ! خير ! .. درست همزمان ! ... شما مولفه هاي نرم افزار و رابطه بين آنها و همچنين مجموعه وظايف هر قطعه را * طراحي* ميكنيد و همزمان محيط آپتيمال جي براي شما كد مينويسد .

مژده اي هم براي توسعه دهندگان برنامه هاي وب ( Web Application ) ! آپتيمال جي به همراه خود يك وب سرور قدرتمند دروني و همچنين يك موتور اجراي سرولت ( Servlet Engine ) دارد كه شما را از همه چيز غير از خود بي نياز ميكند . ضمن اينكه نگران توسعه نرم افزار خود روي محيطهاي اجراي آن نباشيد ! ( Deployment ) آپتيمال جي با توجه به نوع پروژه و مواد مورد نياز آن براي آماده سازي محيط اجرا همه كارها را خودكار كرده است . شما ميتوانيد برنامه هاي خود ( به عنوان مثال سيستم مديريت اي ميل يك وب سايت ) را روي محيط خود بنويسيد و تست كنيد و با يك كيليك به محيط مورد نظر منتقل كنيد بدون اينكه درگير تهيه پكيجهاي كامل از امكانات نرم افزار و انتقال آنها باشيد .

آپتيمال جي درست مثل محيطهاي توسعه نرم افزار مبتني بر كامپوننت ( Component - Based ) مثل سي شارپ - ويژوال سي - دلفي - ويژوال بيسيك و ... داراي يك محيط توسعه مجتمع نرم افزار ( IDE ) قدرتمند است ( بسيار شبيه به محيط دات نت ) اما آنچه شما با آن سر و كار داريد اجزاي UML است نه كامپوننتهاي ويژوال و غير ويژوال و توابع و پراسيجر ها و كلاسها ! اين ابزار با بقيه محيطهاي توليد UML مثل رشنال رز يا مدل ميكر كاملا سازگار بوده و اگر طرحي براي برنامه دات نت خود آماده كرده ايد حالا ميتوانيد فقط با استفاده از همان طرح و قابليتهاي بي نظير آپتيمال جي با چند كيليك ساده و نهايتا نوشتن چند سطر كد مجموعه برنامه را با جاوا هم داشته باشيد !!!

آپتيمال جي همچنين رابطهاي قدرتمندي به نرم افزارهاي مديريت بانكهاي اطلاعاتي ( RDBMS ) معروف مثل اوراكل - اسكوئل سرور و ... دارد و همچنين با استاندارد JDBC براي برقراري هر بانك اطلاعاتي ( خصوصا JdataStore بورلند كه اولين بانك اطلاعاتي طراحي شده با جاوا بود ) سازگار با جاوا دارد .

قابليت توليد شي گرا و مبتني بر مدل EJB ها و همچنين صفحات ديناميك وب مبتني بر جاوا ( Java server pages ) از ديگر توانائي هاي قابل ذكر اين مجموعه است . ( نكته قابل توجه اين است كه محيط مبتني بر مدل آپتيمال جي براي طراحي كلاسهاي پايه اي مثل EJB ها بر خلاف محصولات مايكروسافت و بورلند فقط بدنه و رابطهاي كلاس را توليد نميكند ! بلكه زحمت نگارش كد را هم از دوش شما برداشته و بطور كامل كدهاي جاواي كلاس مورد نظر را طبق طراحي شما مينويسد ! .. بدين وسيله حتي بدون نگارش يك خط كد جاوا و داشتن آشنائي مقدماتي با جاوا و تخصص در زمينه UML ميتوانيد حرفه اي ترين EJB ها را جهت استفاده سازماني يا كاربردهائي مثل JSP توليد كنيد ! شعار *پروداكتيويتي اصل است* اينبار واقعا تحقق پيدا كرده است ! )

نكته قابل ذكر ديگر قدرت و سرعت توليد برنامه هاي رابط بانك اطلاعاتي ست . با ابزارهاي كارآمد موجود در اين مجموعه ( Domain Model و توليد Database Model از آن ) حتي آپتيمال جي كدهاي اسكوئل لازم براي توليد بانكها - جدولها و View هاي شما را هم خواهد نوشت . نيازي به دانستن SQL براي طراحي بانك اطلاعاتي نيست !

آپتيمال جي ( درست مثل ويژوال استوديو دات نت ) در يك محيط يكتا به شما امكان توليد برنامه هاي كاربردي ( فرض كنيد يك برنامه گرافيكي يا ويرايش فيلم يا حتي JphotoShop !!!! ) و برنامه هاي وب ( فرض كنيد سيستم ثبت نام آنلاين دانشجويان براي انتخاب واحد ) و همچنين نرم افزاهائي سازگار با Portal Device ها ( مثل موبايلهاي نه چندان جديدي كه وارد ايران هم شده اند يا PDA ها ) ميدهد . چه صفحه وب توليد كنيد چه رابط بانك اطلاعاتي براي يك كامپيوتر بزرگ ( Main Frame ) چه براي يك موبايل كوچك برنامه بنويسيد محيط و ابزار شما يكتاست .

قابليتهاي بسيار زياد و البته شگفت انگيز اين محيط چون سازگاري با Struts Framework و Controller checks in an XML resource file و Model View Controller و Remote View Manager و Presentation Model و plug-in to Macromedia’s Dreamweaver و ..و..و.. را با مراجعه به وب سايت Compuware و مطالعه توضيحات موجود خواهيد ديد . ( www.compuware.com )

اميدوارم اين مقاله راهگشاي برنامه نويسان علاقه مند به توليد كاربردهاي جاوا بوده باشد . موفق و سلامت و آپ تو ديت باشيد . inpriZ

کيفيت مقاله :
عالی خوب متوسط ضعيف


UML و برنامه نويسان ويژوال بيسيك ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۱ بيننده در حال حاضر
۶۸۴ مراجعه امروز
۴۵۰۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
UML و برنامه نويسان ويژوال بيسيك
نويسنده : Inprise
موضوع : Visual Basic [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۱/۱۳۸۲ اين مقاله ۱۶۸۹ بار مطالعه شده است
۳۳ نفر تا به حال به اين مقاله رای داده اند.
سوال : UML چيست ؟

الف) جديدترين قطعنامه سازمان ملل در مورد عراق
ب) يكي از شاخه هاي علم شيمي
ج) نام كامپوننتي براي كپي كردن فايل در ويژوال بيسيك !
د) موارد الف و ب و ج غلط است !

جواب غير تشريحي : گزينه د .
جواب تشريحي : هر چند متدهاي توليد شي گراي نرم افزار ( مثلا توليد مبتني بر كامپوننتي كه ويژوال بيسيك از آن حمايت ميكند ) راه حل كارآمدي براي حل مسائل نرم افزاري ( از يك ماشين حساب ساده تا يك سيستم پيچيده اطلاعاتي براي يك بانك آنلاين ) است اما هيچ كدام از اين روشها تا كنون توانائي ايجاد رابطي * استاندارد * براي طراحي شي گراي *مفهوم* يك نرم افزار فارغ از پياده سازي آن ( كد نويسي ) نداشته اند .

UML مجموعه اي از استاندارد هاست براي طراحي شي گراي يك نرم افزار با ديد مفهوم گرا ! يك طراحي UML با كدنويسي كاري ندارد . به او ميگويند برنامه بايد * چه* كاري انجام دهد و او اجزاي برنامه را * طراحي* ميكند و البته هميشه يك تيم خوب برنامه نويسي در كنار او هستند تا با استفاده از اين مدل استاندارد كد برنامه را بنويسند .

استاندارد امروزي UML ( كه مخفف Unified Modeling Language است ) در سال 1997 توسط شركت صاحب نام رشنال ( www.Rational.com ) به ثبت رسيد و به علت قاعده مند بودن - سادگي و جذابيت زياد آن به زودي توسط تعداد زيادي از بزرگان عرصه نرم افزار چون سان - بورلند - آي بي ام و ... پذيرفته و پايه توليد محصولاتي استراتژيك و مفيد و البته پول ساز (!) چون آپتيمال جي و رشنال رز و مدل ميكر و ... شد . ( آنچه كه در بخش دوم اين نوشته به آن پرداخته خواهد شد نرم افزار ويژوال يو ام ال است كه ابزاري مناسب و كارآمد براي برنامه نويسان وي بي محسوب ميشود . )

سوال : در معرفي UML بارها از كلمه *مدل* استفاده كرديد ! اين مدل چي چي بيده ؟

الف) مدل لباس
ب) جديدترين مدل عينك ريبون
ج) نام رمز سيستم عامل آينده مايكروسافت (!)
د) گزينه د صحيح ميباشد !

جواب غير تشريحي : گزينه د
جواب تشريحي : در تعريف كنوني مدل شكل ظاهري * مسئله* اي است كه براي حل آن به UML متوسل شده ايم ! ... مدل به ما نشان ميدهد مسئله از چه بخشهائي تشكيل شده - ورودي ها چيست - خروجي چه بايد باشد - ورودي از كجا مي آيد - خروجي به كجا بايد برود و ...

نتيجتا modeling language با استفاده از ابزارهاي ظاهرگرائي مثل diagram ها اجزاي برنامه و رابطه و منطق حاكم بين آنها را تعريف ميكند .

سوال : ما كه بلديم با ويژوال بيسيك برنامه بنويسيم . ديگه دليل استفاده از اين يو ام ال چي چي بيده ؟

الف) دليل خاصي ندارد .
ب) دليل خاصي دارد كه از گفتن آن معذوريم .
ج) گزينه الف و ب ! ( Recommended by microsoft !!! )
د) هيچكدام !

جواب غير تشريحي : گزينه د
جواب تشريحي : يكي از لازمه هاي برنامه نويسي در دنياي پيچيده امروز * سازگاري* با استاندارد هاست . به عنوان يك برنامه نويس ويژوال بيسيك ممكن است از طراحي و پياده سازي يك فرانت اند ساده براي يك بانك اكسس راضي به نظر بياييد اما اگر براي شركتي با 30 برنامه نويس كار ميكنيد كه براي پلت فرمهاي مختلف نرم افزار توليد ميكنند ... اگر مجموعه شما بطور يكنواخت از ويژوال بيسيك استفاده نميكنند و در اين سي نفر از برنامه نويس ويژوال سي گرفته تا Python و پرل هم يافت ميشود ... اگر قرار است هر كدام از برنامه نويسان فقط قسمتي از برنامه را طراحي كنند ( كه هميشه اينگونه است !!! ) .. و اگر قرار باشد طرحي جامع براي پياده سازي برنامه موجود باشد كه همه برنامه نويسان از آن تبعيت كنند و هماهنگي خوبي بين تيم موجود باشد و همچنين تفاوت زبانها و پلتفرمها روي ساختار پروژه تاثير سوء نگذارد ... فقط و فقط UML چاره كار است !

براي پياده سازي شي گراي يك پروژه ( فارغ از اينكه از چه ابزاري استفاده كنيم ) همواره چهار عامل حياتي وجود دارند :

الف) كسب اطلاع در مورد نيازمندي هاي سيستم كه موجب درخواست توليد نرم افزار شده است ! ( Requirements Analysis )

ب) تجزيه و تحليل اين نيازمندي ها و تقسيم آن به بخشهاي كوچك و منطقي براي توليد ابزارهاي موچك و منطقي براي پاسخگوئي به آنها ( Analysis )

ج) طراحي نرم افزار و مولفه هاي سازنده آن و همچنين منطق حاكم بين رابطه اين اجزا با حل مسئله توسط يكي از ابزارهاي طراحي ( Design )

د) پياده سازي نرم افزار با استفاده از زبانهاي برنامه نويسي شي گرا ( Implementation - Coding and Testing )

شما اگر در راستاي يكي از وظايف تعريف شده در بخشهاي ب يا ج فعاليت داريد يقينا بايد از امكانات UML براي بهينه سازي توليد نرم افزار استفاده كنيد .

نكته كنكوري : يك زبان برنامه نويسي شي گرا داراي مشخصات زيادي است كه برخي از انها در ويژوال بيسيك وجود ندارد . بارزترين آنها inheritance است . ارث بري يك كلاس از كلاس ديگر .

حال كه با مفاهيم ابتدائي UML و نقش آن در مهندسي نرم افزار آشنا شديد ضمن اينكه توصيه ميكنم چند مقاله خوب در مورد جزئيات يو ام ال از قبيل دياگرامهاي مختلف آن و نحوه ارث بري آنها از هم و تعريف منطق نرم افزار و ... دعوت ميكنم با نرم افزاري كه در طراحي و تجزيه و تحليل شي گراي پروژه هاي شما نقش زيادي خواهد داشت ( ان شاء الله ... ) آشنا شويد : Visual UML .

ويژوال يو ام ال يكي از قدرتمندترين ابزارهاي طراحي نرم افزار است كه بطور مشخص يكي از بهترين گزينه ها براي برنامه نويسان ويژوال بيسيك ميباشد . اين نرم افزار حتي كدهاي وي بي دات نت كلاسهاي شما را هم خواهد نوشت ! بعد از اين دستان شما كيبورد را لمس نخواهد كرد !

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

كد:

Code generation and reverse-engineering of Visual Basic, C#, Java and Visual Basic.NET (VB.NET) code. Plus, C++ code generation

Database schema (SQL DDL) generation and reverse-engineering of several database types.

Runs as an add-in to Visual Studio.NET. Generate and reverse-engineer C# and Visual Basic.NET (VB.NET) projects & files while running as an add-in to Visual Studio.NET.

Runs as an add-in to Visual Basic. Generate and reverse-engineer Visual Basic projects & files while running as an add-in to Visual Basic.

Includes Models of the .NET Framework

و حتي :

Adds integration of Microsoft Visual Basic for Applications (VBA) version 6.3.

با استفاده از اين ابزار قدرتمند كه به شكل خاصي با ويژوال بيسيك سازگار است خواهيد توانست به بهترين وجه به مديريت روند توليد نرم افزارهاي خود پرداخته با بهره گيري از قدرت يكتاي آن از توان و هزينه خود بهتر استفاده كنيد .

اميدوارم اين اطلاعات براي شما مفيد واقع گردد . موفق و سلامت و آپ تو ديت باشيد . inpriZ

کيفيت مقاله :
عالی خوب متوسط ضعيف


چگونه يك TRichEdit با پس زمينه Tile بسازيم؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۳۹ مراجعه امروز
۴۱۵۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چگونه يك TRichEdit با پس زمينه Tile بسازيم؟
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۱/۱۳۸۲ اين مقاله ۱۹۵۴ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

به نظر مي آيد راهي براي Transparent كردن يك RichEdit عادي يا نقاشي كردن يك تصوير در پس زمينه آن به صورت Tile وجود ندارد.

اما در ويندوز 2000 يك راه عقبي وجود دارد كه با كمك آن مي شود اين كار رو انجام داد. در اين ويندوز شما مي توانيد كنترل خود را با استفاده از مقدار دهي ثابت WS_EX_LAYERED به استيل(Style)هاي توسعه يافته ويندوز و سپس فراخواني تابع APIي به نام SetLayeredWindowAttributes به صورت Transparent در بياوريد.

مثال پايين يك كنترل TRichView با پراپرتي DrawStyle است. بسته به مقدار آن، كنترل پس زمينه Transparent خواهد داشت يا خودش را با alpha transparency نقاشي مي كند.

constructor MyTransparentRichEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDrawStyle := dsNormal;
end;

procedure MyTransparentRichEdit.CreateParams(var Params:
TCreateParams);
begin
inherited CreateParams(Params);
if not (csDesigning in ComponentState) then
begin
Params.Style := Params.Style or WS_POPUP;
Params.ExStyle := Params.ExStyle + WS_EX_LAYERED;
end;
end;

procedure MyTransparentRichEdit.CreateWnd;
var
XPoint: TPoint;
begin
if not (csDesigning in ComponentState) then
begin
XPoint := TWinControl(Owner).ClientToScreen(POINT(Left, Top));
Left := XPoint.X;
Top := XPoint.Y;
end;
inherited CreateWnd;
case FDrawStyle of
ds_Transparent:
SetLayeredWindowAttributes(Handle, ColorToRGB(Color), 255, LWA_COLORKEY);
ds_NotDistinctly:
SetLayeredWindowAttributes(Handle, 0, 150, LWA_ALPHA);
end;
end;

procedure MyTransparentRichEdit.SetDrawStyle(AValue: TDrawStyle);
begin
if FDrawStyle <> AValue then
begin
FDrawStyle := AValue;
RecreateWnd;
end;
end;

موفق و مويد و منصور باشيد
معموري

 کيفيت مقاله :
 عالی   خوب   متوسط   ضعيف


استفاده از اشاره گرها در Object Pascal (دلفي) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۴۲ مراجعه امروز
۴۱۵۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استفاده از اشاره گرها در Object Pascal (دلفي)
نويسنده : رضا براري سوادکوهي
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۵/۱/۱۳۸۲ اين مقاله ۱۹۹۶ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.

1. اشاره گرها چيستند؟
هيچ وقت نفهميدم چرا وقتي افراد وارد حيطه برنامه نويسي ميشوند، با شنيدن نام اشاره گرها (Pointers) وحشت ميکنند؛ شايد چون هنوز خودم اشاره گرها را نشناخته ام!!!
اشاره گر را ميتوان به معناي واقعي يک مفهوم اساسي در برنامه نويسي دانست، درک آن مشکل است ولي زماني که آن را بشناسيم واقعا بهتر برنامه مينويسيم، شايد چون در خيلي از موارد عملکردها را حس ميکنيم!
اشاره گرها يک نوع داده هستند مثل Integer،Char و همانند اينها که در واقع آدرسهاي حافظه را ذخيره ميکنند. مساله از اين جهت مهم است که هر چيزي که استفاده ميکنيم حتما يک محل دارد و بنابراين راه دسترسي به آن همين اشاره گرها هستند. ساده؛ اشاره گر به يک رشته (String) اشاره ميکند، وقتي از يک شئ (Object) استفاده ميکنيم يا حتي زماني که يک رويداد (Event) را صدا ميزنيم، همه و همه اشاره اي به يک اشاره گر هستند. فرض کنيد ميخواهيم در صفحه نمايش ايجاد افکتهاي گرافيکي کنيم، اين کار از طريق نوشتن مقادير مورد نظر در نقاط صفحه نمايش (Pixels) امکان پذير است، پس کافي است اشاره گري به اولين نقطه داشته باشيم و کل نقاط در اختيار ما هستند.
البته اشاره گرها در دلفي آنگونه که در زبانهاي C و C++ مورد توجه هستند، استفاده نميشود، خصوصا به اين دليل که در Object Pascal سعي شده تا حد امکان از درگيري مستقيم برنامه نويس با اشاره گرها جلوگيري شود.

2. چرا به اشاره گرها نياز داريم؟
خوب! واقعا من به عنوان يک برنامه نويس چه نيازي به دانستن محل حافظه يک متغيير دارم!؟
يک جا نوشته بود: "اشاره گرها ميتوانند به هر چيزي اشاره کنند، پس به آنها نياز داريم!!!!!!!!!!"
شايد بد نبود به ايشان ميگفتيم: چقدر باهوش!!!!
اما با کمي دقت ميتوان فهميد که همين حرف در واقع اصلي است که به ما ميفهماند چرا اشاره گرها را به کار ميگيريم! شما ميتوانيد با اشاره گري به يک شئ اشاره کنيد و آنرا تغيير دهيد. بعد به راحتي با تغيير آدرس اشاره گر مربوطه به يک شئ ديگر اشاره ميکنيد و آنرا تغيير ميدهيد و داستان ادامه دارد تا خسته شويد! هر چيزي -و به معناي واقعي هر چيزي- که در يک برنامه استفاده ميشود در محلي از حافظه قرار گرفته است.
جالب است اگر به اين صورت به اشاره گرها نگاه کنيم که آدرس داده هاي برنامه را در زمان اجرا در اختيار ما قرار ميدهند، حتي آنهايي که در زمان اجرا ايجاد شده اند و شايد حتي نام مشخصي هم نداشته باشند.

3. استفاده از اشاره گرها در دلفي
گفته شد اشاره گرها هم يک نوع داده هستند، پس بايد امکان تعريف کردن آنها را داشته باشيم، اما چگونه؟
براي تعريف اشاره گرها از علامت ^ استفاده ميشود. مثال زير تعريف اشاره گري به يک داده از نوع Integer را نمايش ميدهد:

Var
pntMyInt: ^Integer;
اما بعد از تعريف اشاره گر چگونه يک آدرس به آن نسبت دهيم؟ گفته شد اشاره گرها ميتوانند به هر چيزي اشاره کنند، يک متغيير، يک تابع يا هر چيز ديگري، براي نسبت دادن هر کدام از اينها به يک اشاره گر از علامت @ استفاده ميشود:
Var
tmpInt: Integer;
pntMyInt: ^Integer;
Begin
…
pntMyInt := @tmpInt;
…
End;

دقت شود کد فوق مقدار متغيير tmpInt را به pntMyInt منتقل نميکند، بلکه فقط آدرس محل حافظه اي که tmpInt در آن قرار دارد را در pntMyInt ذخيره ميکند. فرض کنيد بخواهيم مقدار ذخيره شده در tmpInt را تغيير دهيم. کد زير را ببينيد:
Var
tmpInt: Integer;
pntMyInt: ^Integer;
Begin
…
tmpInt := 100;
…
pntMyInt := @tmpInt;
…
pntMyInt^ := 102;
…
End;

کد فوق را بررسي ميکنيم؛ در ابتداي کار با استفاده از روش مقدار دهي مستقيم عدد 100 را به متغيير tmpInt نسبت داديم. سپس در مراحل بعدي آدرس محل حافظه اين متغيير را در اشاره گر pntMyInt ذخيره کرديم، توجه توجه! اين کار با مساوي قرار دادن دو متغيير کاملا متفاوت است و در اينجا عدد 100 در اشاره گر ما قرار نميگيرد.
اما pntMyInt^ := 102 به چه معني است؟ خيلي راحت: عدد 102 را در محل حافظه اي که pntMyInt به آن اشاره دارد ذخيره کن، و آن محل حافظه جايي نيست جز متغيير tmpInt. چه اتفاقي افتاد؟ tmpInt := 102 ، به همين راحتي! هر گاه علامت ^ بعد از اشاره گر قرار گرفت مقدار ذخيره شده در آن محل حافظه مد نظر است.
خوب! پس ما ميتوانيم محل حافظه اي که اشاره گر به آن اشاره ميکند را بخوانيم يا بنويسيم (تغيير دهيم)، همچنين مقدار متغيري که در محل حافظه اي که اشاره گر به آن اشاره دارد را بخوانيم يا بنويسيم.
گفته شد که اشاره گرها به اشياء هم اشاره ميکنند پس نبايد عجيب باشد اگر جايي ببينيم:
formPointer : ^TForm1;
اجازه دهيد کمي درگيرتر شويم! با يک کد شروع ميکنيم:
…
type
TMyObject = record
MyCode: Integer;
MyText: String;
end;

pntMyObject = ^TMyObject;
…
procedure CheckMyObjectPointer;
var
Object1, Object2: TMyObject;
Pointer2Object: pntMyObject;
begin
Pointer2Object := @Object1;
Pointer2Object^.MyCode := 25;
Pointer2Object^.MyText := 'First';

Pointer2Object := @Object2;
Pointer2Object^.MyText := 'Second';
end;
…

صبر کنيد! هنوز براي فرار کردن خيلي زوده!
به نظر پيچيده هست ولي اگر کمي دقت کنيم خيلي هم مشکل نيست. بياييد با هم اين کد را بررسي کنيم:
در قسمت تعريف داده ها يک نوع شئ شخصي تعريف شد، خيلي هم مهم نيست، شما ميتوانيد از اشياء موجود دلفي استفاده کنيد. اما در قسمت دوم تعريف انواع داده ها هم اتفاق خاصي نيافتاده است. اين قسمت را اينجا آوردم تا با اين حالت هم آشنا شويد. شما ميتوانيد انواع اشاره گرها را به اين صورت استفاده کنيد، در واقع در اينجا هر وقت در برنامه بخواهيم اشاره گري به TMyObject تعريف کنيد به جاي ^TMyObject به راحتي از pntMyObject استفاده ميکنيد. اما در رويه (Procedure) نوشته شده، ابتدا در بخش تعريف متغيرها دو شئ از نوع TMyObject تعريف ميشود ونيز يک اشاره گر به همان نوع شئ. در ابتداي رويه اشاره گر با آدرس شئ اول تنظيم ميشود و خيلي راحت بااستفاده از مواردي که در بالا گفته شد مقدار دهي ميشود. سپس اشاره گر ما به شئ دوم نسبت داده ميشود و آدرس محل حافظه شئ دوم در آن قرار ميگيرد و باقي ماجرا...
خواص (Property) يک شئ را در نظر بگيريد که به اين صورت قابل تغيير هستند!
شايد از خودتان بپرسيد چرا من مسير خود را طولاني کنم؟ گفته بودم که دردلفي نياز به اشاره گرها مانند C و C++ احساس نميشود، اما به شما ميگويم گاهي اين کار مسير شما را خيلي بيشتر از آن چيزي که فکر ميکنيد کوتاه ميکند، استفاده از بعضي توابع API را در نظر بگيريد...
4. اشاره گرهاي عمومي در دلفي
تا اينجا از اشاره گرهايي استفاده کرديم که به نوع داده مشخصي اشاره داشتند، در اين حالت دلفي به اندازه کافي باهوش هست که اشتباهات ما را در استفاده از اشاره گر به ما گوشزد کند. اما گاهي مجبوريم از اشاره گرهاي بي نام و نشاني استفاده کنيم که به آنها اشاره گر عمومي ميگوييم و قادرند به هر چيزي بدون در نظر گرفتن نوع آن اشاره کنند. اين نوع اشاره گرها در دلفي به نوع داده اي Pointer اطلاق ميشوند. به مثال زير توجه کنيد:
…
procedure CheckGenericPointer( const pntGPointer: Pointer);
var
tmpInt: ^Integer;
MyCode: Integer;
begin
tmpInt := pntGPointer;
MyCode := tmpInt^;
…
end;

procedure CallCheckProc;
var
MyInt: Integer;
begin
MyInt := 100;
CheckGenericPointer( @MyInt);
end;
…

در کد فوق دو مورد در نظر گرفته شده است، هم از اشاره گرهاي عمومي استفاده شده و هم نشان داده شده است که چگونه ميتوانيم از اشاره گرها به عنوان پارامتر توابع استفاده کنيم. نکته اي که بايد در نظر بگيريم نحوه استفاده از اشاره گر عمومي است. يک اشاره گر عمومي ابتدا بايد به يک اشاره گر ديگر نسبت داده شود تا قابل استفاده باشد. باقي موارد پيش از اين بررسي شده اند. قبول دارم که استفاده از اشاره گرها در اين کد منطقي نيست، پس کجا از اشاره گرهاي عمومي استفاده کنيم؟ تا به حال از آرايه هاي پويا استفاده کرده ايد؟ هر جايي که به نوعي با مفهوم حافظه پويا (Dynamic Memory) سر و کار داشته باشيم اشاره گرها به کمک ما مي آيند، هر چند دلفي در اکثر اين موارد نيز کار ما را آسان نموده است. براي نمونه TList را در نظر بگيريد، نگاهي به مثالهاي همراه دلفي براي اين کلاس بياندازيد، ضرر نميکنيد...

5. اشاره گرهاي Nil
فکر نميکنم کلمه مناسبي براي بيان اين مفهوم پيدا شود. يک اشاره گر که به هيچ عنصري نسبت داده نشده باشد ميتواند خطرناک باشد. اشاره گرها به ما اجازه ميدهند مستقيما با حافظه کامپيوتر کار کنيم. خوب پس با اشاره گرهايي که -فعلا- به چيزي اشاره نميکنند چه کنيم؟ راه حل اين مشکل nil است. nil ثابتي (Constant) است که ميتوانيم آنرا به هر اشاره گري نسبت دهيم. وقتي nil به اشاره گري نسبت داده شود، آن اشاره گر به جايي رجوع نميکند مثل يک آرايه پوياي خالي! به اين صورت از بروز حوادث نامطلوب پيشگيري ميکنيم. کد زير نمونه اين کار را نمايش ميدهد:
pntMyPointer := nil;
طبيعي است که شما قصد استفاده از اين اشاره گر را داريد بنابراين قرار نيست همواره به اين حالت باقي بماند، بنابراين نياز به کنترل آن در قسمتهاي ديگر برنامه داريد، کد زير را ببينيد:
If pntMyPointer <> nil then
…
اگر nil بود آنرا به محل مورد نظر خود نسبت دهيد. راه ديگر استفاده از تابع Assigned است:
If Assigned( pntMyPointer) Then
…
اين مورد نيز در راهنماي همراه دلفي با مثال بررسي شده است.

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

موفق باشيد...

کيفيت مقاله :
عالی خوب متوسط ضعيف


XML و ده نکته مهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۶۹ مراجعه امروز
۵۰۸۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
XML و ده نکته مهم
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۱۵/۱/۱۳۸۲ اين مقاله ۶۵۷ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

دنياي XML مملو از تکنولوژي هاي ديگر، نظير XLink,Namespace,DTD,Schema,CSS,XSL,XHTML و ... است .افراديکه قصد آشنائي با XML را دارند، همواره با اين سوال مشکل مواجه هستند که از کجا مي بايست آغاز نمايند. در اين مقاله به بررسي ده نکته مهم بمنظور آشنائي با XML پرداخته تا از اين رهگذر مسيري مناسب براي علاقه مندان به فراگيري اين تکنولوژي مهم ، مشخص گردد.

نکته اول : XML گزينه اي براي ارائه ساختار داده ها

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

نکته دوم : XML شباهت زيادي به HTML دارد

XML ، همانند HTML از تگ ها و خصلت ها استفاده مي نمايد.در HTML ، هر تگ و يا خصلت داراي عملکرد و معني از قبل مشخص شده اي بوده وبا بکارگيري هر تگ ، نحوه نمايش اطلاعات ( بين تگ ها ي استفاده شده) براي مرورگر تبين مي گردد. XML ، با استفاده از تگ ها ، محدوده مشخصي براي داده ها را تعيين و عملا" مسئوليتي در رابطه با تفسير تگ ها و داده هاي همراه آنها را نداشته و اين عمليات را به برنامه هائي که يک فايل XML را مي خوانند، واگذار مي نمايد . مثلا" در صورتيکه از تگ

در يک سند XML استفاده شده باشد ، نمي توان اين ادعا را داشت که تگ فوق نشاندهنده يک پاراگراف است . ممکن است تگ فوق، نشاندهنده price ، parameter و يا يک person باشد .

نکته سوم : XML بصورت متن است .

برنامه هائي که داده هاي ساختيافته توليد مي نمايند، اغلب داده هاي خود را برروي ديسک ذخيره مي نمايند . فرمت ذخيره سازي اطلاعات ممکن است بصورت متن و يا باينري باشد . مهمترين مزيت ذخيره سازي داده ها بصورت متن ، امکان مشاهده داده ها بدون نياز به برنامه اي است که اطلاعات را توليد کرده است . حتي مي توان اطلاعات فوق را با استفاده از يک ويرايشگر متني تغيير داد . فرمت هاي اطلاعاتي مبتني بر متن، به پياده کنندگان نرم افزار قابليت هاي بيشتري را در خصوص اشکال زدائي برنامه ها نيز مي دهد. فايل هاي XML ، مشابه HTML بصورت متن مي باشند . قوانين موجود در XML ، با صراحت و شفافيت بيشتري ارائه شده است . فراموش کردن يک تگ و يا عدم قرار دادن خصلت بين علامت "" باعث مي گردد که يک فايل XML غيرقابل استفاده گردد . در صورتيکه در فايل هاي HTML مسائل فوق تحمل و اغلب مجاز خواهد بود . اگر يک فايل XML داراي مشکل باشد ، برنامه استفاده کننده پس از مواجه شدن با مشکل ، عمليات خود را در محل بروز خطاء متوقف و يک پيام خطاء را ارائه خواهد داد .

نکته چهارم : ظرفيت فايل هاي XML زياد است .

با توجه به اينکه فرمت فايل هاي XML ، بصورت متني بوده و از تگ ها بمنظور مرزبندي داده ها استفاده مي شود ، اين نوع فايل ها معمولا" داراي حجم بيشتري نسبت به فايل هائي با فرمت باينري مي باشند . همانگونه که در نکته سوم اشاره گرديد، مهمترين مزيت يک فرمت مبتني بر متن ، قابليت مشاهده آن و مهمترين اشکال ، اشغال حجم بيشتري از فضاي ذخيره سازي است . از طرف ديگر با توجه به وجود برنامه هاي فشرده سازي نظير Zip ، امکان فشرده سازي فايل ها بخوبي و با سرعت بالا فراهم مي گردد . پروتکل هاي ارتباطي نظير پروتکل هاي مربوط به مودم و يا HTTP/1.1 ( پروتکل اصلي در وب ) قادر به فشرده سازي داده ها و صرفه جوئي در پهناي باند استفاده شده مي باشند .

نکته پنجم : XML خانواده اي از تکنولوژي ها است

XML 1.0 ، مشخصات ، ماهيت و قوانين موجود در رابطه با تگ ها و خصلت ها را تعريف مي نمايد . خانواده XML ، شامل مجموعه اي در حال رشد از ساير ماژول هائي است که سرويس هاي مفيدي را در خصوص انجام عمليات و خواسته هاي مهم بر عهده دارند . XLink ، روشي استاندارد براي افزدون ابر لينک ها به يک فايل XML را مشخص مي نمايد . XPointer ، گرامري مناسب براي اشاره به بخش هاي متفاوت يک سند XML است . يک XPointer ، شباهت زيادي به يک URL داشته ، با اين تفاوت که در مقابل اشاره به سندهائي بر روي وب ، به بخش هاي متفاوت در يک سند XML اشاره مي نمايد . CSS ، زبان style sheet قابل استفاده براي XML و HTML است . XSL ، يک زبان پيشرفته براي ارائه style sheet است . تکنولوژي فوق بر اساس XSLT است . XSLT ، يک زبان تبديل بمنظور سازماندهي مجدد ، افزودن و يا حذف تگ ها و خصلت ها است . DOM ، استانداردي با مجموعه اي از توابع براي انجام عمليات برروي يک سند XML ( يا HTML) از طريق يک زبان برنامه نويسي است . XML Schema ، به پياده کنندگان ، امکان تعريف دقيق ساختار اطلاعات را ارائه مي نمايد . در اين رابطه ماژول هاي متعدد ديگري نيز وجود داشته که در خانواده بزرگ XML داراي جايگاه خاص خود مي باشند .

نکته ششم : XML جديد است اما نه خيلي جديد

پياده سازي XML از سال 1996 آغاز و در فوريه سال 1998 توسط کنسرسيوم وب عرضه گرديد . ممکن است ابهامي در خصوص جوان بودن تکنولوژي فوق در ذهن ايجاد گردد . در پاسخ مي بايست به اين نکته اشاره گردد که تکنولوژي فوق ، خيلي هم جديد نيست . قبل از XML ، تکنولوژي SGML وجود داشت . پياده کنندگاه در اوايل دهه 80 در مقياس وسيعي از آن براي پروژه هاي بزرگ مستند سازي استفاده مي نمودند . پياده سازي HTML از سال 1990 آغاز گرديد. طراحان XML ، بهترين بخش هاي SGML را بهمراه تجارب موجود در رابطه با HTML ، ترکيب و محصولي را توليد نموده اند که قدرتي کمتر از SGML ندارد . SGML اغلب براي مستند سازي فني استفاده شده و از آن براي ساير موارد مربوط به داده ها بندرت استفاده مي گردد . XML دقيقا" برخلاف وضعيت فوق است .

نکته هفتم : XML باعث هدايت HTML بسمت XHTML مي گردد .

يکي از موارد مهم کاربرد XML ، تکنولوژي XHTML است . XHTML ، گزينه بعدي نسبت به HTML است . XHTML داراي المان هاي مشابه المان هاي استفاده شده در HTML است . گرامر استفاده شده در XHTML ، بگونه اي تغيير پيدا کرده که منطبق بر قوانين مربوط به XML باشد . سندهاي مبتني بر XML ، گرامر خود را از XML به ارث برده و آن را با روش هاي خاصي محدود مي نمايد . ( مثلا" XHTML امکان استفاده از

را داده ولي امکان استفاده از را نخواهد داد ) در XHTML به گرامر موجود ، مفهوم نيز اضافه شده است . ( مثلا" XHTML از تگ

براي يک پاراگراف استفاده مي نمايد نه براي price و يا person )

نکته هشتم : XML ماژولار است .

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

در يک فرمت، مفهوم پاراگراف را داشته در صورتيکه در فرمت ديگر، داراي مفهوم person باشد ) . بمنظور حل مشکل فوق ( وجود اسامي مشابه با مفهوم متفاوت ) ، namespace ارائه شده است . XSL و RDF نمونه هاي مناسبي از فرمت هاي مبتني بر XML بوده که از namespace استفاده مي نمايند .

نکته نهم : XML پايه و اساس RDF و سمنتيک وب است .

RDF)Resource Description FrameWork ) يک فرمت متني مبتني بر XML بوده که تشريح منابع و برنامه هاي متاديتا ( نظير يک برنامه موزيک playlist و يا آلبوم عکس ) را حمايت مي نمايد . مثلا" RDF مي تواند اين امکان را فراهم آورد که يک آلبوم عکس وب را با استفاده از اطلاعات مربوط به ليست تماس شخصي ، ايجاد و در ادامه برنامه سرويس گيرنده پست الکترونيکي قادر به ارسال يک پيام بصورت خودکار براي افراد موجود در آلبوم باشد . همانگونه که HTML باعث ترکيب سندها و برنامه هاي مبتني بر فرم ها در وب مي گردد ، RDF با يکپارچگي برنامه ها و آژانس ها ، يک وب سمنتيک ( وبي که تعامل اطلاعاتي بين اجزاي آن کاملا" مشهود و مدون است ) ايجاد مي نمايد.

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

با انتخاب XML ، براي پياده سازي يک پروژه از امکانات حمايتي متنوع و گسترده اي در رابطه با ابزارها و مهندسين با تجربه بهره مند خواهيد شد . انتخاب XML ، مشابه انتخاب SQL براي بانک اطلاعاتي است . در اين حالت همچنان نياز به ايجاد بانک اطلاعاتي ، نوشتن برنامه ها و روتين هاي لازم بمنظور انجام عمليات دلخواه خواهد بود . با توجه به اينکه حق استفاده از XML رايگان بوده مي توان نرم افزار خود را با استفاده از آن ، بدون پرداخت هزينه اي طراحي نمود .
منبع = http://www.srco.ir

کيفيت مقاله :
عالی خوب متوسط ضعيف


ده نکته در رابطه با XML - DOM ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۷۲ مراجعه امروز
۵۰۸۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ده نکته در رابطه با XML - DOM
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۱۵/۱/۱۳۸۲ اين مقاله ۴۸۵ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
يکي از مهمترين مفاهيم موجود در رابطه با XML ، تکنولوژي DOM)Document Object Model) است . XML نظير برنامه Word و يا DHTML ( مربوط به شرکت ماکروسافت ) ، داراي يک مدل مبتني بر شي ، براي برنامه نويسي است . در اين مقاله به بررسي ده نکته مهم در رابطه با تکنولوژي XML - DOM خواهيم پرداخت .

نکته اول ? تکنولوژي DOM ، يکي از ابزارهاي برنامه نويسي موجود بمنظور استقرار يک سند XML در حافظه ، تفسير و پردازش است . ابزار فوق ، اغلب توسط برنامه هاي VB و ASP بمنظور پردازش فايل هاي XML استفاده مي گردد . DOM بمنزله يک شي بوده که برنامه نويسان با استفاده از آن ، امکان فعال نمودن ، ويرايش و ذخيره يک فايل XML را بدست مي آورند .

نکته دوم ? ساختار داخلي DOM مشابه چيست ؟ ساختار فوق مشابه يک درخت با شاخه ها و برگ هائي است . برخي از شاخه ها ممکن است داراي شاخه هاي ديگري باشند. همانگونه که در مقاله ده نکته در رابطه با XML ، اشاره گرديد ، يک سند XML داراي المان هائي است که مناسب است در اين مقطع و از اين زاويه به آنها شاخه گفته شود. بنابراين DOM شامل مجموعه اي از المان ها است . البته ، اغلب برنامه نويسان به آنها " گره " و يا " گره فرزند " مي گويند. گره ها ممکن است داراي يک مقدار، تهي و يا شامل ساير گره هاي فرزند باشند . المان ، گره ، گره هاي فرزند عملا" در بردارنده مفاهيم مشابه اي مي باشند .

نکته سوم ? تکنولوژي DOM ، داراي اشياء متفاوتي است . DOMDocument يکي از اشياء موجود بمنظور دستيابي به DOM ( شامل اطلاعات مربوط به سند XML ) است . DOMElement و DOMNode نمونه هائي ديگر از اشياء موجود مي باشند . بمنظور انجام عمليات و پردازش هاي مورد نظر در DOM ، دوازده شي متفاوت پيش بيني شده است . شي DOMDocument ، اولين شي استفاده شده براي فعال نمودن يک سند XML بوده و داراي مجموعه اي از متدها و خصلت ها براي استفاده توسط برنامه نويسان است . مثلا" شي فوق، داراي خصلتي بمنظور بازيابي firstChild ( اولين فرزند ) ، lastChild ( آخرين فرزند ) ، nextSibling ( برادر بعدي ) و previousSibling (برادر قبلي ) است . در حقيقت شي DOMDocument ، تصويري از سند XML را با توجه به قوانين مربوطه در خود نگهداري کرده و با استفاده از خصلت هاي متعدد موجود ، امکان حرکت در طول سند با روش هاي متفاوت ميسر مي گردد .

نکته چهارم ? شي DOMDocument ، داراي تعداد زيادي متد مفيد نيز مي باشد . مثلا" متد insertBefore براي درج يک گره قبل از موقعيت جاري استفاده مي گردد. براي ايجاد يک المان جديد، مي توان از متد createElement استفاده کرد . براي افزودن يک المان جديد به شي DOMDocument مي بايست دو مرحله عمليات را دنبال نمود . مرحله اول : با استفاده از متد createElement المان ايجاد مي گردد ( در اين حالت يک شي DOMNode ، ايجاد مي گردد ) . مرحله دوم : با استفاده از متد appendChild شي DOMNode را به DOMDocument اضافه مي نمائيم . ( DOMDocument و DOMNode دو شي مجزا با عملکردهاي خاص خود مي باشند و نبايد آنها را بمنزله اشياء مشابه در نظر گرفت ) .

نکته پنجم ? در مقاله ده نکته در رابطه با XML ، به اين نکته اشاره گرديد که مي توان يک سند XML را به Html ، WML و يا يک سند XML ديگر با يک ساختار متفاوت ، تبديل کرد . براي تحقق خواسته فوق ، مي توان از متد transformNode استفاده کرد . بدين منظور لازم است از دو شي DOMDocument استفاده گردد. يکي از آنها توسط سند XML فعال و ديگري توسط XSL فعال خواهد شد. با استفاده از متد transformNode ، خروجي بصورت يک رشته خواهد بود . رشته فوق شامل نتايج مورد نظر بمنظور استفاده در WML, Html ، متن و يا ساير موارد دلخواه است .

نکته ششم ? تمام اشياء DOMDocument ، داراي يک گره ريشه مي باشند . گره فوق تنها ريشه موجود بوده که ساير گره ها مستقيما" و يا غير مستقيم به آن متصل مي گردند. در يک سند XML ، دوازده گره متفاوت وجود دارد . NODE_ELEMENT ، NODE_ATTRIBUTE ، NODE_TEXT و NODE_COMMENT نمونه هائي در اين زمينه مي باشند . برخي از گره ها ، داراي فرزند و برخي ديگر فاقد فرزند مي باشند . مثلا" NODE_ELEMENT مي تواند داراي شش فرزند متفاوت ! باشد . ( نگران نباشيد وضعيت فوق در رابطه با يک المان است نه انسان ) و يا NODE_TEXT فاقد فرزند است .

نکته هفتم ? يکي ديگر از اشياء بسيار مفيد ، شي HTTPRequest مي باشد. شي فوق امکان گفتگوي برنامه هائي که در سمت سرويس گيرنده اجراء مي گردند را با سرويس دهنده وب فراهم مي نمايد . اين شي شامل تمامي روتين هاي مورد نياز بمنظور برقراري ارتباط و مبادله اطلاعات است . پس از ارتباط با سرويس دهنده ، از طريق متدهاي POST و يا GET ، با استفاده از متد Send مي توان يک ارتباط را برقرار کرد. در ادامه با استفاده از خصلت هاي متعددي نظير : responseXML و يا responseText مي توان اقدام به بازيابي XML و يا متن مورد نظرنمود . شي HTTPRequest بهمراه اشياء XML در IE ارائه شده است .

نکته هشتم ? پاس دادن رشته هاي XML در برنامه ها و بين برنامه ها ، يکي از خواسته هاي مورد نيار است . در اين راستا متدهاي Load و LoadXML ازشي DOMDocument مطرح مي باشند . متد Load، باعث فعال نمودن يک فايل XML شده ، در صورتيکه متد LoadXML يک رشته را فعال مي نمايد . براي توقف فعال نمودن يک سند XML ، مي توان از متد abort استفاده کرد . خصلت parseError يک امکان در دسترس ، براي کنترل خطاء و متد save براي ذخيره نمودن XML بصورت يک فايل استفاده مي گردد . مثلا" در صورتيکه يک رشته XML را که " خوش شکل " نمي باشد ، فعال نمائيم ، خصلت parseError شامل يک کد خطاء بوده و مي توان با استفاده از آن برخورد مناسبي با وضعيت پيش آمده را انجام داد .

نکته نهم ? يکي از انواع گره هائي که مي توان در يک DOMDocument درج کرد ، DOMProcessingInstruction است . يک PI)Processing Instructing) ، شامل دستورالعمل هائي است که تمايلي به تفسير آنها را نداريم . مثلا" شايد بخواهيم جزئيات مربوط به نسخه خاصي از برنامه RealAudio را که از اطلاعات آن يک المان در سند استفاده مي نمايد ، ارسال نمائيم ، در چنين مواردي مي توان يک دستورالمل PI بصورت زير در سند درج کرد :

نکته دهم ? در صورتيکه قصد ارسال اطلاعاتي را داشته باشيم که شامل عباراتي نظير < ، # و يا > باشد ، و نياز است که آنها را از طريق پارسر ارسال نمائيم ، ( استفاده از حروف فوق باعث بروز خطاي پارسر خواهد شد ) مي توان اطلاعات فوق را در يک گره خاص با نا م NODE_CDATA_SECTION قرار داد . مثلا" عبارت زير مقدار '#91' را بهمراه يک المان استفاده کرده است . پارسر اطلاعات موجود در بخش CDATA را مي خواند ولي آنها را تفسير نخواهد کرد .

< ![CDATA[#91]] >< house_number >

منبع = http://www.srco.ir
کيفيت مقاله :
عالی خوب متوسط ضعيف


ده نکته در رابطه با XSL ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۷۱ مراجعه امروز
۴۸۸۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ده نکته در رابطه با XSL
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۹/۱/۱۳۸۲ اين مقاله ۵۴۰ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

تکنولوژي XSL ، از CSS)Cascading Style Sheets) اقتباس شده است . CSS از يک Stylesheet بمنظور فرمت يک فايل HTML استفاده مي نمايد .XSL و CSS در موارد متعددي با يکديگر تفاوت دارند. CSS ، امکان تعريف رنگ ها ، مشخص نمودن زمينه ها ، نوع فونت ها و ... را براي فايل هاي مبتني بر Html فراهم مي نمايد. XSL امکان تبديل يک فايل XML را به يک فايل Html ( و يا ساير فرمت هاي دلخواه نظير متن ) فراهم مي نمايد. در اين مقاله ده نکته مهم در رابطه با تکنولوژي XSL بيان مي گردد .

نکته اول ? همزمان با ارائه تکنولوژي XML توسط کنسرسيوم وب ، تکنولوژي XSLT)Extensible StyleSheet Language for Transformation )، براي تبديل يک سند به نوع ديگر ، مطرح گرديد. در زمان پياده سازي XSLT ، تکنولوژي ديگر و مرتبط با XML با نام XPointer نيز ارائه گرديد. XPointer ، مکانيزمي براي اشاره به بخش هاي متفاوت يک سند XML است . يکي ديگر از تکنولوژي هاي مرتبط با XML ، با نام XPath مطرح و ارائه گرديد. XSLT,XPointer و XPath جملگي تکنولوژي هاي مبتني بر XML مي باشند .

نکته دوم ? تکنولوژي XSLT ، مشابه يک زبان برنامه نويسي بوده و داراي توابع و متدهاي فراواني است که نمونه آنها را مي توان در ساير زبان هاي برنامه نويسي مشاهده نمود. مثلا" XSLT داراي يک حلقه تکرار با نام for-each است . .تکنولوژي فوق داراي برخي امکانات خاص ديگر است که نمونه آنها در ساير زبانهاي برنامه نويسي وجود ندارد . مثلا" با استفاده از المان ، مي توان در هر مکان دلخواه ، اقدام به درج اسکريپت هاي مورد نظر نمود. براي درج محتويات يک فايل نيز مي توان از المان استفاده کرد . در صورتيکه XML را بمنزله داده ها در نظر بگيريم ، XSL ، زبان برنامه نويسي مناسب ، بمنظور انجام عمليات دلخواه بر روي داده ها است .

نکته سوم ? با اينکه XSLT مشابه يک زبان برنامه نويسي است ولي داراي يک تفاوت اساسي با زبانهاي برنامه نويسي است . زبان XSLT مبتني بر تمپليت ها مي باشد . با استفاده از تمپليت ها مي توان نحوه پردازش يک المان را مشخص نمود. قوانين تمپليت مي توانند با اولويت هاي متفاوت و بصورت دلخواه تعريف و استفاده گردند. XSLT يک زبان تعريفي است . (در صورت مواجه شدن با يک الگو ، خروجي به چه صورت توليد مي گردد ) . روش برنامه نويسي در XSLT ، مشابه زبانهاي VB و يا جاوا نمي باشد . زبانهاي فوق بصورت "رويه اي " مي باشند . ( XSLT زباني تعريفي است )

نکته چهارم ? در تمام فايل هاي XSL ، مي بايست XSL namespace مشخص گردد. بدين ترتيب پارسر از نوع نسخه XSLT آگاهي پيدا خواهد کرد . براي مشخص نمودن namespace ، عموما" از عبارت زير استفاده مي گردد. با معرفي namespace مربوطه ، مي توان يک XSLT را بگونه اي طراحي و پياده سازي کرد که هم با نسخه هاي قبلي و هم با نسخه هاي بعدي ، سازگار باشد .

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

نکته پنجم ? همانگونه که اشاره گرديد ، XSLT يک زبان مبتني بر تمپليت است . با تعريف يک تمپليت خاص و دلخواه ، عمليات تطبيق آن با اطلاعات موجود در فايل XML انجام خواهد شد. با توجه به اينکه تکنولوژي XSLT از تمپليت ها استفاده مي نمايد ، هر فايل XSL مي بايست داراي حداقل يک تمپليت تعريف شده باشد . تمپليت تعريف شده عموما" بصورت زير است :

< xsl:template match ="/" >

ريشه تمپليت شامل عبارت "/" = match مي باشد ( ريشه سند XML است ) . در صورتيکه المان ريشه در سند XML با نام PEOPLE باشد ، عبارت فوق بصورت " match="PEPOLE ، خواهد بود . تعداد تمپليت هاي موجود در XSLT داراي محدوديت نمي باشد .

نکته ششم ? در زمان انجام عمليات در XSLT ، محدوده مورد نظر براي يک پرسو جو (query) ، گره (node ) در حال پردازش است . بنابراين در تمپليت "/" = xsl:template match،محدوده عملياتي ريشه سند XML است . زمانيکه با استفاده از xsl:for-each در يک حلقه تکرار مستقر مي گرديم ،محدوده عملياتي شامل هر يک از گره هائي خواهد بود که در حلقه ايجاد مي گردند . " محدوه عملياتي " (Context) ، يکي از مشخصه ها ي مهم تکنولوژي XPath است . يک برنامه XSLT بسيار مشابه برنامه اي خود بازگشتي بوده ( داراي چندين حلقه تکرار است ) و بدفعات از کدهاي موجود در تمپليت استفاده خواهد شد .

نکته هفتم ? " مکان " (Location) ، يکي از مشخصه هاي مهم XPath است . مثلا" / ، بمنظور انتخاب المان ريشه در سند جاري و يا گره موجود در محدوده عملياتي است . article/ ، باعث انتخاب المان "article" که خود فرزند ريشه است ، مي گردد . x/article ، باعث انتخاب تمام المان هاي "article" که فرزند x مي باشند ، خواهد شد . آدرس PERSON/PEOPLE ، باعث انتخاب تمام المان هاي PEPOLE که ريشه آنان PERSON است ، مي گردد .

نکته هشتم ? آدرس دهي مبتني بر مکان ، امکان استقرار بر روي گره هاي مورد نظر براي پردازش را فراهم مي نمايد .مثلا" با معرفي آدرس PEPOLE/PERSON امکان يافتن تمام المان هاي PERSON در المان PEPOLE فراهم مي گردد . با استفاده از مسيريابي مبتني بر مکان ، مي توان موقعيت خود را در سند XML تغيير و بسمت بالا و يا پائين حرکت کرد . براي يافتن تمام المان هاي PERSON با عمق دلخواه ( فاصله المان تا ريشه ) و ريشه PEOPLE از آدرسي مشابه PERSON//PEOPLE / استفاده مي گردد .

نکته نهم ? تکنولوژي XPath ، الگوهاي مناسب براي فيلتر نمودن داده ها را با استفاده از امکاناتي نظير AND, + - > <=, mod ، فراهم مي نمايد . مثلا" [" article[author="Ali" and author="Reza، گره هاي article را که نام author آنان Ali و Reza است برمي گرداند . XPath داراي توابعي نظير : Count,position,substring و sum است . مثلا" عبارت زير ،باعث برگرداندن مقدار Total Price مي گردد . در مثال فوق از تابع sum براي محاسبه مجموع قيمت هاي ذخيره شده توسط المان price ، استفاده شده است .. تکنولوژي XSLT و XPath عموما" در کنار يکديگر استفاده مي گردند .

Total Price = < xsl:value-of select="sum(//price)"/>

نکته دهم ? تکنولوژي XSLT ، از معماري مبتني برقانون که در آن تمپليت ها داراي نقشي کليدي هستند، استفاده مي نمايد . برنامه نويسي XSLT ،عموما" بصورت خود بازگشتي بوده و بدين دليل همواره مي بايست در رابطه با محدوده عملياتي که تمپليت اجراء خواهد شد ، دقت لازم را انجام داد . XSLT و XPath داراي پتانسيل هاي زيادي بوده که بمنظور پردازش سندهاي XML ، مي توان از آنها استفاده کرد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


149 راز در Internet Explorer ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۷۴ مراجعه امروز
۴۸۹۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
149 راز در Internet Explorer
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۱/۱۳۸۲ اين مقاله ۹۹۸ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

اينترنت اکسپلورر يا مرورگر وب ميکروسافت پر کاربرد ترين مرور گر وبي است که مليونها نفر از سراسر جهان به وسيله آن به جستجو در اينترنت مي پردازند. اين نرم افزار در عين سهولت استفاده که رمز موفقيت آن نيز مي باشد رمز و رازهاي فراواني را نيز به همراه خود دارد که با دانستن آنها زندگي اينترنتي شما راحت تر و دلپذير تر مي گردد. 149 راز در مرور گر وب ميکروسافت را جاي ديگري نخواهيد يافت! پس فرصت را از دست ندهيد:

1 – وقتي ماوس را روي تصويري از يك صفحه وب مي بريم، خط جديدي به نام lmage Bar ظاهر مي شود كه داراي آيكون هايي براي ذخيره چاپ، ارسال از طريق Email و باز كردن فولدر My Picture (شايد براي اين كه ببينيم آيا قبلاً تصوير را ذخيره كرده ايم يا نه) مي باشد.

اگر معمولاً تصاوير را ذخيره نمي كنيد و فكر مي كنيد lmage Bar مزاحمت ايجاد كرده ، مي توانيد از طريق منوي Tools ،گزينه Internet Options و صفحه Advanced آن را غير فعال كنيد. در اين صفحه، به قسمت Multimedia برويد و علامت گزينه Enable lmage Toolbar را برداريد.

2 – بعضي از سايت هاي عكس هاي ديجيتالي داراي تصاويري با وضوح و كيفيت بالا هستند، ولي اگر عكس در پنجره مرورگر جا نشود توليد دردسر مي كند. در صورت مواجهه باتصويري كه به علت بزرگ بودن آن نتوانستيد تمام عكس را يكجا در صفحه مشاهده كنيد، به جاي اين كه صفحه را به بالا يا پايين (يا به چپ و راست) اسكرول كنيد،كمي صبر كيند تا 6IE اندازه آن را براي شما تنظيم كند. اگر ترجيح مي دهيد عكس را در اندازه واقعي خود ببينيد، ماوس را به گوشه پائين در سمت راست برده و روي دكمه مربوطه كليك كنيد.

3 – وقتي تصويري را از طريق پست الكترونيك مي فرستيد، مي توانيد آن را كوچكتر كنيد تا سريعتر به مقصد برسد. در اين راستا، مي توانيد وضوح 480×640،600×800 يا 768×1024 را انتخاب و كاري كنيد كه تمام تصاويري كه مي فرستيد كوچكتر شوند. دوستاني كه به صورت تلفني با اينترنت ارتباط دارند حتماً از اين توجه شما ممنون خواهند شد.

4 – اگر براي خود صفحه وبي را دست و پا كرده ايد و از ايده ظاهر شدن خط ابراز تصاوير و تشويق بازديدكنندگان به ذخيره تصاوير شما خوشتان نمي آيد، مي توانيد اين خط ابراز را براي تك تك تصاوير يا همه آنها غير فعال كنيد، براي اين منظور با دستور خط ابراز را به طور كامل از كار بيندازيد و يا خط GALLERYIMG=”no” را در برچسب هاي IMG خود اضافه كنيد.

5 – خط ابراز Lmage براي تصاوير كمتر از 130×130 پيكسل ظاهر نمي شود،به همين دليل براي ذخيره اين نوع تصاوير بايد از همان روش مرسوم كليك راست استفاده كيند.

6 - IE6 ابزارهايي بهتري براي كار با كوكي ها دارد تمام امكانات موجود را مي توانيد از صفحه Privacy كادر محاوره Internet Options (كه از طريق منوي Tools باز مي شود) مشاهده كنيد . به علاوه، بد نيست سري به آدرس www.w3.org/P3P بزنيد و اطلاعات بيشتري درباره P3P (قوانين زير بنايي براي اولويت هاي حفظ حريم خصوصي) كه مايكروسافت ابزارهاي جديدش را بر اساس آنها بنا نهاده به دست بياوريد.

7 – بعضي كوكي ها مفيد هستند . مثلاً سايتهاي فروشگاهي از جمله Amazon.com به كمك اين كوكي ها از خريدهاي شما مطلع شده و محصولات جديد را به شما پيشنهاد مي دهند، يا سايت Microsoft Support با استفاده از آنها اطلاعات كاملي از جستجوهاي اخير شما به دست مي آورد. اين كوكي ها به كوكي هاي «شخص اول» موسومند. كوكي هاي طرف سوم از وب سايتي متفاوت (طرف سوم) پديد مي آيند كه معمولاً جنبه تبليغاتي دارند (مثل Double Click يا AOL) . اين شبكه هاي تبليغاتي براي بسياري از سايت هاي وب تبليغات مي كنند، پس مي توانند بفهمند كه شما به كدام يك از اين سايت ها سر زده ايد. اگر دوست نداريد چنين اطلاعاتي درباره شما در جايي نگهداري شود، IE6 مي تواند كوكي هاي تمام شركت هاي طرف سوم، يا شركت هايي كه تعهدي در رعايت حفظ اطلاعات خصوصي شما نمي دهند را مسدود كند.

8 – وقتي IE پيامي ظاهر مي كند مبني بر اينكه كوكي خاصي را بپذيرد يا رد كنيد، به IE بگوئيد اين كوكي را براي دفعات بعد در خاطر خود حفظ كند تا هر دفعه مجبور نباشيد كوكي هاي همان سايت را قبول يا رد كنيد.

9 – با تعيين سطح امنيتي مناسب براي خود مي توانيد مشخص كنيد كه چه نوع كوكي هايي را دوست داريد دريافت كنيد. براي اين منظور، از طريق منوي Tools، گزينه Internet Options صفحه Privacy و دكمه Settings اقدام نمائيد. پيش فرض اين سطح امنيتي Medium است، كه كوكي هاي طرف سومي را مسدود مي كند كه يا از هيچ قانوني براي حفظ اطلاعات خصوصي تبعيت نميكنند يا از اطلاعات معرفي كننده شما بدون كسب اجازه از خود شما بهره برداري مي نمايند. سطح Medium كوكي هاي شخص اول را كه از اطلاعات معرفي كننده شما بدون كسب اجازه از خود شما استفاده مي كنند مي پذيرد، اما در پايان جلسه آنها را حذف ميكند.

10 – سطوح امنيتي در خصوص حفظ حريم خصوصي در شش دسته ارائه مي شوند كه از پذيرش تمام كوكي ها تا رد تمام كوكي ها متغيرند . به علاوه، چهار استراتژي از پيش تعيين شده ارائه مي شوند كه مي توانيد براي پذيرش يا رد انواع كوكي ها مورد انتخاب قرار دهيد.

11 – اگر هيچ يك از اين سطوح رضايت شما را جلب نمي كند، روي Advanced و پس از آن Override automatic cookie handling كليك كنيد . سپس مي توانيد كوكي هاي شخص اول و سوم را قبول يا مسدود كنيد و يا از IE بخواهيد هر دفعه از خود شما سوال كند.

12 – كادر محاوره Advanced علاوه بر كوكي هاي شخص اول و سوم، از كوكي هاي «جلسه اي» هم سوال مي كند؛ يعني كوكيهاي موقتي كه فقط تا زماني نگهداري مي شوند كه حداقل يكي از پنجره هاي IE باز باشد. اين كوكي ها خطري ندارند، زيرا بعد از قطع ارتباط و بستن برنامه IE به كلي حذف شده و در نتيجه سايت نمي تواند بعدها به آنها مراجعه كند.

13 – اگر نظرتان درباره سايتي خاص تغيير كرد و خواستيد به آن اجازه ساخت كوكي در كامپيوتر خود را بدهيد، مي توانيد به صفحه Per Site Privacy برگشته و آن را از ليست حذف كنيد.

14 – اگر مي خواهيد براي سايت هاي Favorite خود استثناء قائل شويد، از طريق منوي Tools كادر محاوره Internt Options را باز كرده و به صفحه Privacy برويد. سپس روي دكمه Web Sites و پس از آن Edit كليك كنيد. در اين حالت، URL هايي را وارد كنيد كه مي خواهيد كوكي ها از آنها«هميشه» قبول يا رد شوند.

15 – اگر سايتي هيچ حرفي از خط مشي خود در حريم خصوصي بازديدكنندگان نزده يا خط مشي آن باتنظيمات و اولويت بندي شما مطابقت نداشته باشد، آيكون كوچكي به شكل يك چشم باعلامت ايست در خط وضعيت (پائين پنجره) ظاهر مي شود كه با كليك مضاعف روي آن، گزارشي تحت عنوان Privacy Report به نمايش در مي آيد كه ضمن نشان دادن تمام محتويات آن صفحه، ليستي از كوكيهاي ارسالي از طرف آن سايت و پذيرش يا عدم پذيرش آنها از طرف شما نمايش داده مي شود. اگر چنين آيكوني را نديديد، از منوي View گزينه Privacy Report را انتخاب كنيد.

16 – تنظيمات مربوط به حريم خصوصي شما فقط در وب سايت هايي عمل مي كنند كه در منطقه امن اينترنت تعريف شده باشند. اگر سايتي را در منطقه سايت هاي معتمد (Trusted) قرار دهيد، IE تمام كوكي هاي آن سايت را پذيرفته و اجازه خواندن كوكي ها را از كامپيوتر شما به سايت مي دهد و اگر سايتي را در منطقه سايت هاي «ممنوعه» (Restricted) بگذاريد، IE تمام كوكي هاي ارسالي آن سايت را بر مي گرداند.

17 – تعداد سايت هايي كه تاكنون نسبت به ارائه خط مشي خود در زمينه حفظ حريم خصوصي بازديدكنندگان اقدام كرده اند بسيار كمتر از آن چيزي است كه بايد باشد (اولين آمار 53 مورد را گزارش داد). اين خط مشي بايد نشان دهد كه سايت با اطلاعات كاربر چه خواهد كرد،كاربر چگونه مي تواند از تعهدات سايت مطمئن شود، آيا كسي سايت را ضمانت مي كند، در صورت تشكيك با چه كسي بايد تماس بگيريد و او در اين باره چه اقدامي خواهد كرد . سايتي كه بخواهد خط مشي خود را ارائه دهد بايد آن را به دو زبان تهيه كند: يكي به زبان انسان براي مطالعه بازديدكننده و ديگري به زبان XML براي مطالعه Internet Explorer.

18 – اگر واقعاً بخواهيد كنترل كاملي روي كوكي ها داشته باشيد، بايد خواسته ها و اولويت هاي خود را به زبان XML در قالب يك فايل نوشته و از IE بخواهيد از آن فايل به عنوان قانون شما در حفظ حريم خصوصي شما از طرف سايت ها استفاده كند. براي اين منظور، از منوي Tools گزينه Internet Options را انتخاب و روي دكمه Import كليك كنيد. در سايت هايي از قبيل www.privacy.org چنين اولويت هايي به صورت از پيش تهيه شده ارائه مي شوند كه شما را به مطالعه آنها دعوت مي كنيم.

20 – اگر مي خواهيد براي وب سايت خود يك خط مشي حريم خصوصي تعريف و تنظيم كنيد،از ويزارد Privacy Statement مايكروسافت در آدرس www.microsoft.com/privacy/wizard/ استفاده نمائيد.

21 – اگر از سايت هاي مورد علاقه خود انتظار ارائه خط مشي حريم خصوصي را داريد، براي آنها email بفرستيد، اگر همه مردم اين خواسته را داشته باشند، سايت هاي بيشتري وادار به ارائه چنين خط مشي هايي خواهند شد.

22 – خيلي تعجب نكنيد، شايد يك سايت وب اطلاعات شخصي شما را كاملاً مطمئن نگهداري كند، ولي چون خط مشي حريم خصوصي خود را ارائه نداده IE كوكي هاي آن را نمي پذيرد (البته با اين فرض كه تنظيمات شما چنين چيزي را از IE خواسته باشد).

23 – اگر مطمئن نيستيد كه چه تصميمي در مورد كوكي ها بگيريد يا نمي دانيد وسعت نشر آنها تا چه حداست، از IE بخواهيد كه براي چند هفته اي پذيرش يا رد كوكي هاي طرف سوم رااز خود شما سوال كند، شايد تعجب كنيد از اين كه ببينيد اين همه سايت در حال ردگيري شما هستند.

24 – اگر تنظيمات حريم خصوصي خود را به نحوي تغيير بدهيد كه تمام كوكي ها برگشت بخورند، وب سايت ها نمي توانند كوكيهاي قبلي موجود در كامپيوتر شما را بخوانند.

25 – اگر مي خواهيد به بررسي كوكي هايي بپردازيد كه قبلاً پذيرفته ايد، از منوي Tools ،گزينه Internet Options را كليك كرده و به صفحه General برويد،سپس روي Settings و پس از آن View Files كليك كنيد. كوكي ها در راس ليست فايل هاي اينترنتي موقت قرار دارند. براي خلاص شدن از دست يك كوكي، كافي است آن را از ليست مزبور حذف كنيد.

26 – اگر مي خواهيد تمام كوكي هاي موجود دركامپيوتر خود را پاك كنيد، از منوي Tools ،گزينه Internet Options را انتخاب و از صفحه General روي دكمه Delete Cookies كليك كنيد.

27 – تنظيمات مربوط به سطوح امنيتي منطبق محتوايي وب در IE6 فرق كرده اند، ولي اگر در نسخه قبلي IE تغييراتي را در مناطق امنيتي داده باشيد، Setup آنها را حفظ كرده و يك منطقه تحت عنوان «سطح امنيتي سفارشي» براي شما مي سازد.

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

29 – (جديد نيست) راه ديگري كه هكرها از طريق آن مي توانند بدون اين كه بدانيد شما را به سايت ديگري بفرستند اين است كه جهت حركت اطلاعاتي را كه خود شما در فرم هاي وب پر كرده ايد عوض كنند. اگر مي خواهيد وقتي اطلاعات شما به سايتي مي روند كه با آن چه در فرم تعيين كرده ايد فرق دارد، از منوي Tools،گزنيه Internet Options را كليك كرده و به صفحه Security برويد. سپس گزينه، Wam if submittal is being redirected را علامت بزنيد. البته، توجه داشته باشيد كه بعضي سايت ها ممكن است براي پردازش فرم هاي كاربران از خدمات يك شركت يا وب سايتي رايگان استفاده كنند كه اين موضوع نگران كننده نيست.

30 – اگر وب سايتي مكان خود را عوض كند URL آن تغيير مي يابد. براي جلوگيري از گم شدن بازديدكنندگان ،اين وب سايت هايي كه جابه جا شده اند از فرماني موسوم به META REFRESH استفاده مي كنند كه به طور خودكار مرورگر وب شما را بعد ازچند ثانيه به موقعيت جديد هدايت مي كند. (معمولاً پيامي روي صفحه ظاهر مي شود كه توضيح مي دهد آدرس تغيير كرده و توصيه مي كند Bookmark خد را به روز كنيد). ولي هكرها هم مي توانند با استفاده از فرمان فوق الذكر شما را به جاي ديگري ببرند كه تحت كنترل آنها قرار دارد، پس حالا اين اختيار را داريد كه اين ويژگي را فعال كنيد ياغير فعال. حالت پيش فرض اين ويژگي «فعال» در تمام مناطق است . به جز منطقه ممنوعه (Restricted) از منوي Tools ، گزينه Internet Options را انتخاب كرده و به صفحه Security رويد. منطقه مورد نظر خود را انتخاب و روي دكمه Custom كليك كنيد تا كادر محاوره ديگري باز شود. در اين حالت، گزينه Allow META REFRESH را خواهيد ديد كه اگر بخواهيد مي توانيد آن را عوض كنيد.

31 – اگر تا به حال به وب سايتي رفته باشيد كه يك پنجره شناور را بر روي بقيه وب سايت ها باز مي كند، چيزي را ديده ايد كه به Iframe يا «فريم شناور» موسوم است. شايد فكر كنيد Iframe بخشي از سايت جديد باشد. ول چنين نيست. برنامه نويسان وب ميتوانند براي جلوگيري از سرقت Iframe توسط هكرها امكان كدنويسي در Iframe ها را ازكار بيندازند، ولي اگر آنها اين كار را نكرده باشند، خودتان مي توانيد آنرا غير فعال كنيد. از منوي Tools، گزينه Internet Options را كليك و در صفحه Security منطقه مربوطه راانتخاب كنيد. سپس، روي دكمه Custom كليك كرده و گزينه Launching Programs and Files in a IFRAME را علامت بزنيد.

32 – (جديد نيست) بااستفاده از منطقه «سايت هاي ممنوعه» مي توانيد جلوي باز شدن پنجره هاي تبليغاتي درسايتهاي خاص را بگيريد. از منوي Tools،گزينه Internet Options را كليك كرده و به صفحه Security برويد. سپس با انتخاب Restircted Sites روي دكمه Site كليك و URL مربوطه را تايپ كنيد.

33 - (جديد نيست) اگر كامپيوتر خود را به صورت اشتراكي با ديگران استفاده مي كنيد،احتمالاً دوست نداريد كه اطلاعات كار اعتباري و ساير اطلاعات شخصي تان در فولدر TemporayInterent Files باقي بماند. براي اين منظور، از منوي Tools، گزينه Internet Options راانتخاب كرده و در صفحه Avanced زير قسمت Security ، گزينه Do not save encrypted page to disk راعلامت بزنيد تا صفحاتي كه با http آغاز مي شوند (از جمله فروشگاههاي اينترنتي و صفحات بانك هاي اينترنتي) در ديسك شما ذخيره نشوند.

34 – اگر مي خواهيد همه چيز را از فولدر فايل هاي موقتي اينترنت پاك كنيد، مي توانيد گزينه بعدي يعني when browser is closed Empty Temporay Internet Files-Folder راعلامت بزنيد و به علاوه فضاي خالي بيشتري را در ديسك خود باقي بگذاريد.

35 – آيا دوست داريد بدانيد يك سايت وب با اطلاعاتي كه از خود ارائه مي دهيد چه مي كند؟ از منوي View، گزينه Privacy Report را كليك و URL سايت مورد نظر را تعيين كنيد. سپس روي دكمه Summary كليك كنيد تا ببينيد سايت مربوطه با اطلاعات شما چه مي كند.

36 – راه پي بردن به هويت و اعتبار افراد در اينترنت بررسي گواهي نامه ها و امضاهاي ديجيتالي است. از منوي Tools گزينه Internet Options را كليك كرده و به صفحه Content برويد. سپس روي دكمه Certificates كليك كنيد تا گواهي نامه هاي امنيتي سايت هايي را كه بازديد كرده ايد ببينيد.

37 – يك تغيير خاص در تنظيمات منطقه امنيتي اين است كه مانع از اجراي برنامه ها توسط جاوا اپلت هايي بشويم كه در سايت هاي قرار گرفته در منطقه ممنوعه وجود دارند. با اين كار، نه تنها جاوا ازكار مي افتد، بلكه كنترل هاي اكتيوايكس هم غير فعال مي شوند.

از منوي Tools ،گزينه Internet Options راانتخاب كرده و به صفحه Security برويد. حال Restricted Sites را انتخاب و روي Custom Level كليك كنيد. سپس ،گزينه Script Active X controls marker as save for scripting را به حالت Disable تغيير دهيد.

38 – آيكون Privacy نشان مي دهد كه آيا سايت مورد بازديد در حال ارسال كوكي هايي است كه با تنظيمات Privacy شما مطابقت دارند يا نه. با كليك مضاعف روي اين آيكون، ليستي از كوكي هايي را كه نسبت به ارسال آنها تلاش شده تحت عنوان Privacy Report مشاهده كنيد (اين گزارش به علاوه، نشان مي دهد كه تصاوير از كجا آمده اند). براي تغيير سريع تنظيمات مربوط به كوكي آن سايت، روي كوكي كليك راست كرده و گزينه مورد نظر را انتخاب نمائيد.

39 – در هنگام سازمان دهي و مرتب كردن Favorites، فقط يك فولدر رادر آن واحد مي توانيد باز كنيد، مگر اين كه تنظيمات موجود در صفحه Advanced كادر محاوره Internet Options را تغيير داده باشيد، ولي براي جابه جا كردن يك ليست از Favorites مجبور نيستيد از طريق دكمه Move the Folder عمل كنيد، بلكه مي توانيد به روش Drag-and drop (همراه با كليد Ctrl، يا بدون گرفتن اين كليد) استفاده نمائيد. براي تغيير نام يك آيكون كليك راست كنيد يا با استفاده از Send to Desktop آن را بر روي Desktop ويندوز بيندازيد.

40 – درحالي كه مشغول سفارشي كردن تنظيمات، ناحيه Search خود هستيد، مي توانيد نحوه انجام جستجوها در خط Address (به قول مايكروسافت : Autosearch) رانيز مشخص كنيد. تنظيمات اين دو ناحيه يكسان بوده و از طريق منوي Tools، گزينه Internet Options و صفحه Advanced قابل دسترسي هستند. ناحيه Search فقط زماني قابل سفارشي كردن است كه روي خط باشيد، ولي دستكاري Internet Options در هر زماني امكان پذير است براي Autosearch هم فقط يك انتخاب وجود دارد و آن MSN است.

41 – اگر در ناحيه Search روي Customize كليك و چند ماشين جستجوگر را انتخاب كنيد، نتايج را از ماشيني مي گيريد كه قبل از بقيه درليست معرفي شده باشد. با كليك روي Next ماشين جستجوگر بعدي مورد استفاده قرار مي گيرد.

42 – اگرچه مي توانيد آيكن Internet Explorer را از سيستم خود پاك كنيد، ولي اين برنامه فقط يك قطعه نرم افزار نيست. ناحيه Folder همان خط Explorer است كه امكان گشت زدن در هارد ديسك كامپيوتر و وب را از يك پنجره فراهم مي سازد. اگر درصدد بارگذاري يك فايل باشيد و به دنبال فولدر خاصي مي گرديد، دكمه Folder راه سريعي براي اين كار است . تا وقتي كه فولدري راازكامپيوتر خود انتخاب نكرده باشيد، آيكون ها و منوهاي IE را در اين ناحيه خواهيد ديد.

43 – ناحيه History بهترين راه براي برگشتن به صفحه اي است كه مي دانيد قبلاً ديده ايد ولي فراموش كرده ايد آن را Bookmark كنيد (اگر قرار باشد همه چيز را Bookmark بكنيم، ليست Favorites آن قدر بزرگ مي شد كه استفاده از آن عملاً امكان پذير نبود). با كليك روي يك لينك يا كشيدن آن به ناحيه اصلي پنجره، آن را باز كنيد. اگر مي خواهيد سايتي را به ليست Favorites منتقل كنيد يا آن را در پنجره جديدي باز نمائيد. روي آن كليك راست كنيد.

44 – با انتخاب Hotmail به عنوان برنامه مديريت پست الكترونيك از طريق صفحه Programs در كادر محاوره Internet Explorer و كليك روي دكمه Mail واقع در خط ابزار، مي توانيد Hotmail را به IE خود بياوريد. ولي چنين كاري براي Instarnt/Messaging به اين آساني ها نيست. Messenger MSN با IE6 عرضه نمي شود، ولي درويندوز XP وجود دارد. با بارگذاري و نصب اين برنامه از سايت مايكروسافت ، اين آيكون رادر خط ابزار IE خود خواهيد ديد.

45 – اگر واقعاً مشكلي از طرف مناطق امن وجود نداشته باشد، فقط آيكن اينترنت در خط وضعيت ظاهر خواهد شد. با كليك مضاعف روي اين آيكون، كادر محاوره Internet Security Proprites را باز و سايتي را به منطقه «سايت هاي معتمد» اضافه كنيد از آن جا كه امكان كشيدن URL به داخل كادر محاوره وجود ندارد، به خاطر داشته باشيد كه قبل از كليك URL صفحه را كپي كنيد و سپس به انتخاب منطقه مورد نظر بپردازيد . روي دكمه Sites كليك كرده و URL را بچسبانيد.

46 – با كليك راست روي هر نقطه اي از خط ابزار، مي توانيد به سفارشي كردن آن بپردازيد. در اين راستا، مي توانيد فقط آيكون هاي استاندارد IE را برگزينيد و يا آيكون هايي را به نمايش درآوريد كه مربوط به برنامه هاي افزودني از قبيل AOL Instant Messenger يا Net2Phone هستند. با انتخاب آيكون هاي كوچك جاي بيشتري را روي صفحه باز مي كنيد، هر آيكون مي تواند به همراه نوشته برچسب آن يا بدون نوشته برچسب ظاهر شود.

47 – چقدر سريع است؟

وقتي صفحه اي را از وب دريافت مي كنيد، آن چه موجب تاخير در نمايش صفحه مي شود بيشتر مربوط به تصاوير موجود در آن صفحه يا سرعت انتقال داده ها در مودم شماست، نه مدت زمان (ناچيزي) كه مرورگر براي تبديل كد HTML به صفحه وب صرف مي كند، حتي در صفحات پيچيده اي كه ده ها جدول تو در تو دارند ، Internet Explorer6 سرعت زيادي دارد و جاوا را هم با همين سرعت اجرا مي كند. البته IE6 در نمايش صفحات ذخيره شده اي كه قبلاً دريافت كرده ايد كمي كندتر (نسبت به IE5.5) عمل مي كند، ولي در عوض در نمايش صفحاتي كه تصوير دارند باافزايش سرعت چشم گيري مواجه هستيم. بعض صفحات حتي با سرعتي دو برابر نسبت به گذشته بارگذاري مي شوند.

48 – چقدر سريع است؟

اگر فكر مي كنيد IE6 كندتر عمل مي كند، به تنظيمات «تاخير در منو» در Registry نگاهي بيندازيد. اين تنظيمات باعث مي شود فكر كنيم نسخه جديد كندتر پاسخ مي دهد، به ويژه هنگامي كه به مشاهده منوهاي تو در تو (از قبيل (Favorties مي پردازيم. ويندوز هميشه مكث كوتاهي در اين منوها مي كند تا كاربر بتواند بفهمد چه مي گذرد . سعي كنيد سرعت منوها را بالا ببريد و ببينيد آيا فرقي در نمايش صفحات وب مي كند. با استفاده از برنامه Regedit كليد HKEY_CURRENT_USERControl Panel/Desktop\MensuShowDelay را پيدا كنيد (يا اگر نيست ايجاد نماييد) و مقدار آن را به 100 (يعني 100 ميلي ثانيه) تغيير دهيد. اين مقدار مي تواند هر عددي بين 0 تا 999 باشد براي اعمال تغييرات بايد ويندوز را Restart بكنيد.

49 – اگر گزينه Always trust content from this compary را به هنگام نصب يك كنترل اكتيوايكس علامت بزنيد، در واقع تصريح كرده ايد كه به گواهي نامه امنيتي آنها (به عنوان مدرك معتبر بودن شركت) اعتماد داريد. با كليك روي دكمه Publisher حداقل ببينيد به چه كسي اعتماد كرده ايد.

50 – امضاهاي ديجيتالي و گواهي نامه ها فقط در صورتي مطمئن هستند كه افراد درستي آنها را داشته باشند و از وقتي Verisign گواهي نامه مايكروسافت را به كسي داد كه عضو مايكروسافت نبود (ولي چند كاغذ سربرگ دار از اين شركت در اختيار داشت). بايد يك درجه احتياط را بيشتر كنيم. از منوي Tools، گزينه Internet Options راانتخاب كرده و به صفحه Advanced برويد. در قسمت Security دقت كنيد كه گزينه Check for Publisher’s certificate revocation و Check for sever certificate revocation علامت خورده باشند.

منبع ( مجله شبکه )
کيفيت مقاله :
عالی خوب متوسط ضعيف


149 راز در Internet Explorer ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۷۷ مراجعه امروز
۴۸۹۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
149 راز در Internet Explorer
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۱/۱۳۸۲ اين مقاله ۹۲۹ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
51 – حالا كه دولت ايالات متحده پذيرفته كه رمزنگاري ترافيك وب «سلاح» محسوب نمي شود، مايكروسافت اجازه پيدا كرده از روش رمزنگاري 128 بيتي استفاده كند كه شكستن آن خيلي سخت است. اگر ويندوز ام اي داشته باشيد، پس از قبل به اين روش مجهز هستيد، ولي اگر از IE5 يا ويندوز98 به IE6 ارتقاء پيدا كرده ايد، از اين پس با اين رمزنگاري جديد كار خواهيد كرد.

52 – براي سفارشي كردن محيط كار IE امكانات زيادي در اختيار نداريم، ولي اگر بخواهيم خط ابزارها را جابه جا كنيم، به طوري كه خط Address پائين باشد و خط Links در كنار منوها، مي توانيم به سادگي روي خط جدا كننده كليك كرده و آن را با ماوس به هركجا كه مي خواهيم بكشيم. بعد از اين كه همه چيز مطابق سليقه شما شد، از منوي View، گزينه Toolbars و سپس Lock the Toolbars راانتخاب كنيد تا مطمئن شويد خط ابزارها تصادفاً جابه جا نخواهند شد.

53 – پنجره هاي سريعتر

وقتي روي يك لينك در پنجره Emial يا هر سند ديگري كليك مي كنيد، سريعتر به آن جا مي رسيد اگر IE از پنجره اي استفاده كند كه قبلاً باز بوده، ولي اگر بخواهيد به صفحه اي برگرديد كه در حال انتخاب گزينه آن بوديد، بايد روي Back كليك كنيد. باانتخاب گزينه مناسب در قسمت Reuse Windows از صفحه Advanced در كادر محاوره Internet Options تعيين كنيد كه IE كدام شيوه را به كار ببريد.

54 – اجراي سريعتر

اگر ميخواهيد IE را به اجرا در بياوريد، ولي در زمان اجرا به سايت ديگري متفاوت از آن چه به عنوان سايت شروع تعيين كرده ايد برويد، يك راه سريعتر وجود دارد. از دكمه Start گزينه Run را انتخاب و URL سايت مورد نظر خود را تايپ كنيد. وقتي Enter را بزنيد، برنامه IE بلافاصله اجرا شده و شروع به بارگذاري سايت مربوطه مي كند.

55 – اگر نمي توانيد خط ابرازها را حركت بدهيد، نگاه كنيد ببينيد IE آنها را قفل نكرده باشد. روي خط ابراز مورد نظر كليك راست كنيد و ببينيد گزينه Lock the Toolbars علامت خورده يا نه.

56 – اگر خط ابراز Links را خيلي كوچك كرده باشيد، يك سري فلش ظاهر مي شوند كه با كليك روي هر كدام يك منوي كشويي باز خواهد شد، اين منو، مكان خوبي براي جاي دادن وب سايت هايي است كه زياد با آن سروكار داريد و مجبور نيستيد كل Favorties را به دنبال آنها بگرديد. كافي است URL را از خط Address از خود صفحه وب گرفته و به خط ابزارLinks بكشيد.

57 – براي بعضي انواع فايل ها از قبيل فايل هاي EXE و COM. نمي توانيد علامت گزينه Always ask before opening this type of file را برداريد. زيرا ممكن است حاوي ويروس باشند به همين دليل، اين سوال را هميشه خواهيد ديد.

58 – اگر بخواهيد مي توانيد تمام خط ابزارهاي IE را باهم آشكار يا پنهان كنيد، يا با استفاده از كليك راست، بعضي دكمه ها را حذف يا اضافه نمائيد.

59 – تصميم بگيريد كه كدام دكمه ها را دوست داريد روي خط ابزارها ببينيد و به چه ترتيبي، اگر برنامه هاي افزودني خاصي را به IE اضافه كرده ايد، دكمه هاي اضافي رااز طريق كليك راست مشاهده خواهيد كرد. با استفاده از خطوط جدا كننده، دكمه ها را سازمان دهي كنيد.

60 – براي باز كردن جاي بيشتر روي صفحه نمايش دكمه هاي كوچك را انتخاب كنيد بدون اين كه برچسب داشته باشند. انتخاب گزينه Selected Text on Right دكمه ها را خواناتر مي كند.

61 – كادر محاوره مربوط به بارگذاري فايل ها در IE6 ظاهر جديدي نسبت به IE5 دارد: به جاي گزينه هاي راديويي،از دكمه هاي Save و Open استفاده كرده است.

62 – به جاي كليك روي دكمه هاي Back و Farward مي توانيد روي فلش رو به پايين آنها كليك كنيد تا ليستي از چند صفحه قبلي ظاهر شود. اين كار خيلي سريعتر از اين است كه چند بار روي Back كليك كنيد و صبر كنيد تا هر صفحه ظاهر شود. البته اين ويژگي جديد نيست و در IEهاي قبلي هم وجود داشت، ولي چيزي كه جديد است لينكي است كه در انتهاي ليست براي باز كردن History اضافه شده است تا اگر صفحه اي كه به دنبالش هستيد عقب تر بود، بتوانيد آن را پيدا كنيد. اگر History قبلاً باز باشد، اين لينك ظاهر نخواهد شد.

63 – اگر مي خواهيد يك مرحله به عقب برويد، از كليد BackSpace روي صفحه كليد استفاده كنيد. به علاوه، مي توانيد ضمن گرفتن كليد Alt، كليدهاي فلش چپ يا راست را فشار دهيد.

64 – ناحيه History ليست صفحات وب مشاهده شده را به صورت امروز، هفته گذشته، دو هفته گذشته و غيره مرتب مي كند كه بستگي به تعداد روزهايي دارد كه خودتان تنظيم كرده ايد. با استفاده از كليد View اين ليست را بر اساس تاريخ، اسم سايت، تعداد مراجعات و سايت هايي كه در آن روز مشاهده كرده ايد، مرتب نمائيد و يا با استفاده از دكمه Search به جستجوي URLها و عناوين صفحات بپردازيد. اگر جاي خالي روي ديسك داريد، از طريق منوي Tools ، گزينه Internet Options و صفحه General تعداد روزها رادرجلوي Days به 90 روز تنظيم كنيد.

65 – اگر مي خواهيد فقط يك فريم را پرينت كنيد، بهتر است بدون Preview اين كار را بكنيد، زيرا در اين حالت نمي توانيد يك فريم تنها را انتخاب كنيد.

66 – وقتي از طريق ليست History به مشاهده صفحاتي مي پردازيد كه قبلاً بازديد كرده ايد، اين اختيار را داريد كه هر ليست از صفحات را باز نگه داريد، يا وقتي روي سايت ديگري كليك مي كنيد، ليست فعلي را ببنديد. براي تنظيم اين گزينه، از منوي Tools، گزينه InternetOptions راكليك كرده و به صفحه Advanced برويد. در قسمت Browsing ، گزينه Close unusd folders in History Favorites را علامت بزنيد تا وقتي از سايتي به سايت ديگر مي رويد، جلوي چشم تان زياد شلوغ نشود.

67 – ويژگي Print Preview ويژگي جديدي در IE6 نيست، ولي با اضافه شدن دكمه هايي براي زوم كردن خيلي بهبود پيدا كرده است. اگر صفحه اي كه قصد چاپ آن را داريد از چند فريم تشكيل شده مي توانيد از منوي كشويي ديگري تعيين كنيد آيا تك تك چاپ بشوند يا كل صفحه چاپ بشود. به علاوه، مي توانيد سربرگ و ته برگ چاپ رانيز عوض كنيد.

68 – وقتي پرينت خود را دريافت كرديد، قاعدتاً بايد بهتر از گذشته به نظر برسد،زيرا IE6 كنترل بهتري روي عمليات چاپ دارد. مثلاً نبايد با خطوط شكسته مواجه بشويد، يا فاصله بين كلمات و حروف نبايد غير عادي باشد.

69 – اگر قصد چاپ صفحه اي را داريد كه لينك هاي بسياري دارد، گزينه Print tabel of links را علامت بزنيد تا ليستي از لينك ها در يك برگه اضافي به چاپ برسد.

70 – پس زمينه هاي رنگي يا تصويري در صفحات وب به طور پيش فرض در چاپ لحاظ نمي شوند (چرا كه اكثر افراد آنها را نمي خواهند و در ضمن جوهر كمتري مصرف مي شود).ولي اگر واقعاً مي خواهيد كل صفحه با ظاهري كامل به چاپ برسد از منوي Tools، گزينه Internet Options را كليك كرده و به صفحه Advanced برويد. سپس، زير قسمت Printing گزينه Print background colours images را پيدا كرده و علامت بزنيد.

71 – اگر هنوز هم از ويندوز 98 يا ويندوز ان تي استفاده مي كنيد يا اگر با IE5.5 ويژگي Web Folders را نصب نكرده ايد، در IE6 هم Web Folders نخواهيد داشت. اگر مي خواهيد در Windows Explorer به مديريت فايل ها در سرورهاي وب بپردازيد، بايد ابتدا IE6 را Uninstall بكنيد، سپس IE5.5 را با استفاده از حالت Customize و انتخاب Web Folders (زير

(Web Autoring componets IE6 نصب كنيد و دوباره IE6 رانصب نمائيد. راه ديگر اين است كه اگر office 2000 داريد، office server Exlensions Support را نصب كنيد تا Web Folders فعال شود.

72 – هنگام كار با سايت هاي FTP هميشه مي توانيد به يك حالت Windows Explorer گونه سايت دست پيدا كنيد، ولي متاسفانه در اين حالت امكان استفاده از Drag-and – drop وجود ندارد، اما در عوض مي توانيد با استفاده از كليك راست به كپي انتقال فايل ها بپردازيد.

73 – اگر ترجيح مي دهيد به جاي ساختار درختي فولدرها در يك سايت FTP، ليستي از لينك هاي دايركتوري رامشاهده كنيد، از منوي Tools، گزينه Internet Options را انتخاب كرده و به صفحه Advanced برويد. سپس در قسمت Browsing، گزينه Enable Folder view for FTP sites را خاموش كنيد.

74 – وقتي با تايپ كلمات در خط Adress به جستجوي سايت ها مي پردازيد، ماشين جستجوگر توكار MSN ليستي از سايت هاي مشابه را نشان داده و سپس شروع به دريافت بهترين سايت منطبق با كلمات شما مي كند. اين روند، از طريق منوي Tools، گزينه Internet Options صفحه Advanced قسمت Search قابل تغيير است.

75 – اگر دركار خود وارد هستيد از طريق Windows Explorer خيلي راحت تر مي توانيد به مديريت سايت هاي Favorites خود بپردازيد (چرا كه آنها فقط يك سري فولدر و ميان بر هستند كه در دايركتوري ويندوزنگهداري مي شوند). پس اگر مي خواهيد به تغيير نام يا حذف آنها بپردازيد، Explorer كارها را خيلي راحت تر مي كند.

76- اگر مي خواهيد سريع به سراغ يك فولدر برويد، كليد Shift را بگيريد و از منوي Favorties گزينه Organise را كليك كنيد تا يك پنجره Explorer باز شود كه فولدر Favorties را نشان مي دهد.

77 – اگر مي خواهيد Favorties و كوكي هاي خود را به مرورگري ديگر يا حتي كامپيوتري ديگر منتقل كنيد، از منوي File، گزينه Import and Explorer را كليك كنيد تا ويزاردي فعال شود كه براي انجام اين كار به شما كمك مي كند. از مرورگرهاي ديگرهم مي توانيد سايت هاي Favorties را به IE وارد كنيد، موقع صدور نمي توانيد فولدر ايجاد كنيد و مجبوريد از فولدرهاي موجود يكي راانتخاب نمائيد.

78 – ليست هاي اكسپلورروگونه از قبيل History Bar, Search Bar و Folder View در سمت چپ پنجره IE باز مي شوند. علاوه بر اين Bar ها ، در IE6 «بار» اكسپلوررگونه جديد اضافه شده كه Media Bar نام دارد. البته، نسخه آزمايشي اين نرم افزار چند «بار» جديد ديگر هم داشت، ولي به عدم استقبال كاربران، نسخه نهايي بدون وجود آنها بيرون آمد.

79 – يك «بار» اسكپوررگونه ديگر كه هنوز هم وجود دارد، «بار» Related Sites شركت Alex است كه براي دستيابي به آن بايد از منوي Tools و گزينه Show Related Links اقدام كنيد. اين گزينه، سايت هاي مشابه را با آن چه در حال حاضر پيش روي شاست، نشان مي دهد. ولي وقتي از سايتي به سايت ديگر مي رويد، به روز نمي شود (مگر اين كه نسخه كامل آن را كه رايگان است، از شركت درخواست نمائيد).

80 – اختيارات زيادي در «بار» Search وجود ندارد، زيرا مايكروسافت فقط چند ماشين جستجوگر را درون آن گذاشته است. با كليك روي دكمه Search اين «بار» را باز و روي دكمه Customise كليك كنيد تا ترتيب جستجو را انتخاب نمائيد (براي تغيير تنظيمات بايد روي خط باشيد). پيشنهاد مي كنيم خط ابزار بسيار عالي Google را نصب كنيد، اما توجه داشته باشيد كه IE6 با آن قاطي مي كند؛ يعني هم در ليست خط ابزارها گزينه اي ظاهر مي شود كه Google را در بالاي صفحه به نمايش در مي آورد و هم در «بار» Explorer مدخلي به وجود مي آيد كه خط ابزار Google را در پائين صفحه ظاهر مي كند (اما هر دو درست كار مي كنند).

81 - Outlook Expres

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

براي آشنايي با امكانات موجود، از منوي Tools، گزينه Options راانتخاب كرده و به صفحه Security برويد. باانتخاب گزينه Restericted در قسمت Select the internent security zone to use جلوي جاوا، اسكريپت ها و كنترل هاي نامطمئن اكتيوايكس را بگيريد. در Email عملاً هيچ نيازي به اين ها نيست و غير فعال كردن آنها باعث جلوگيري از ورود ويروس مي شود.

امكان دارد ويروسها از طريق فايل هاي ضميمه وارد شوند، پس جلوگيري از ورود فايل هاي ضميمه هم مي تواند مانع از آلودگي سيستم شود، ولي اين كار كمي غير عادي است. به هر ترتيب، با انتخاب گزينهDo not sllow attachments to be saved or opened that could potentially be a virus ضمائم رااز كار بيندازيد. البته با اين كار باز هم مي توانيد ليست فايل ها را ببينيد، ولي نمي توانيد آنها را ذخيره يا باز كنيد.

و يك كار خوب ديگراين است كه مانع از انتشار ويروس ها بشويد. ويروس ها مي توانند مثل آتشي كه در خرمن مي افتد گسترش پيدا كنند (و اين كار با فرستادن خودشان به تمام طرف هاي تماس شما در كتابچه آدرس ها انجام مي دهند) . پس براي جلوگيري از نشر آنها، گزينه Wam me other applications try to send mail as me راعلامت بزنيد. باانتخاب اين گزينه اگر بخواهيد اطلاعات رااز طريق يك وب با Email ارسال كنيد يا برنامه هايي را به اجرا در بياوريد كه از كتابچه آدرس هاي شما استفاده مي كنند، كادر محاوره اي ظاهر خواهد شد كه از شما مي پرسد واقعاً مي خواهيد نامه اي را بفرستيد. در صورت مشاهده اين ادر محاوره، اگر مطمئن نيستيد، به سراغ Outlook برويد و ببينيد نامه كدام است.

اگر ميخواهيد براي حسابي كه از Hotmail گرفته ايد از OE6 استفاده كنيد، مي توانيد نامه هاي خود را بخوانيد، ولي بايد Hitmail راتنظيم كنيد. براي اين منظور، از منوي Tools، گزينه Accounts و سپس Add راانتخاب و روي Mail كليك كنيد. سپس، نوع سرور پستي را HTTP تعيين نمائيد.

1 – از اين جا ، ويزارد Internet Account را به اجرا در آوريد.

2 – اسناد Word ممكن است حاوي ويروس ماكرو باشند، پس بهتر است ضمائم خطرناك را بلوكه كنيد.

3 – با گذاشتن نامه در منطقه Restricted اسكريپت نويسي را ازكار بيندازيد.

4 – جلوي كرم هاي پست الكترونيك را بگيريد و نامه هاي ارسالي را از همين جا معاينه كنيد.

5 – جلوي فايل هاي خطر آفرين را بگيريد.

82 – بار Media اصوات و تصاوير «جاري» (Steaming) رادر پنجره كوچكي در سمت چپ پنجره اصلي پخش مي كند. بدين ترتيب مي توانيد به آساني تراك سي دي يا ايستگاه راديويي در حال پخش را بدون ترك وب سايت مشاهده كنيد.

83 – اگر مي خواهيد كنترل هاي اين ابزار پخش كننده (Player) را از «بار» بيرون بياوريد، روي دكمه سفيد كوچك undock كليك كرده و Player را به مكان مورد نظر بكشيد. اين پنجره قابل كوچك و بزرگ كردن است اگر ميخواهيد Player در جاي خود ميخ كوب شود، دوبار روي دكمه سفيد رنگ كليك كنيد.

84 – اگر ترجيح مي دهيد موسيقي يا فيلم را از طريق برنامه استاندارد ويندوز، يعني Windows Media Player مشاهده يا گوش كنيد، با كليك روي دكمه Media Options و سپس Settings گزينه Play Web media in the bar را خاموش كنيد.

85 – اگر از Media Bar خارج بشويد تا مثلاً جستجويي را به راه بيندازيد يا پنجره History را باز كنيد، موسيقي قطعي در پشت صحنه به پخش ادامه مي دهد. براي خاموش كردن آن بايد دوباره به Media Bar برگرديد.

86 – وقتي موسيقي يا فيلمي از اينترنت در حال پخش است، روي اسم تراك كليك كنيد تا به ليست Favorties اضافه شود يا برنامه پخش پيش فرض (كه ممكن است RealPlayer يا (Windows Media player به اجرا در بيايد.

87 - «بار» Media يافتن فيلم و موسيقي را آسان كرده است. كليپ هاي ويدئويي، ايستگاههاي راديو اينترنتي و تراك هاي موسيقي زيادي در اين «بار» وجود دارند كه البته همه آنها از سايت Windows Media.com خود مايكروسافت مي آيند و اگر روي لينك هاي MoreMedia يا Radio Guide در منوي Media Options كليك كنيد، سايت كامل Windows Media.com را خواهيد گرفت.

88- خط ابزار Redio هنوز هم در IE6 وجود دارد، ولي به طور پيش فرض خاموش است. باانتخاب منوي Tools ، گزينه Internet Options ، به صفحه Advanced برويد و زير بخش Multimedia، گزينه Always show internet Explorer Radio toolbar را علامت بزنيد.

89 - IE6 با ماوس هايي كه غلطك داشته باشند خيلي خوبكار مي كند. بسياري از سايت ها امروزه، از طريق اين نوع ماوس ها امكان زوم كردن تصاوير و بازي كردن را فراهم مي كنند.

90 – منوهاي شخصي كه چندي است در مجموعه Office و ويندوز ام اي ارائه شده اند حالا به IE هم رسيده اند. از منوي Tools، گزينه Internet options راانتخاب كرده و به صفحه Advanced برويد. در قسمت Browing، گزينه Enable personalized Favorties Menu را علامت بزنيد تا وقتي به منوي Favorites رفتيد، فقط سايت هايي ظاهر شوند كه اخيراً مشاهده كرده ايد . براي ظاهر كردن تمام سايت ها مي توانيد روي فلش رو به پائين كليك كنيد. اگر از منوهاي شخصي خوششان نيامد، مي توانيد آنها را كار بيندازيد.

91 – Cursor هاي سفارشي جالب هستند، ولي مشهورترين كنترل Cursor موسوم به Comet اصلاً رواج ندارد، زيرا مي گويند در كامپيوتر جاسوسي مي كند. انتظار مي رود با IE6، استفاده از Cursor هاي سفارشي در وب سايت هايي كه از DHTML استفاده مي كنند دوباره از سر گرفته شود.

92 – اگر مي خواهيد امكان استفاده از غلطك هاي ماوس را در وب سايت خود اضافه كنيد، با كمك اسكريپت زير، امكان زوم كردن تصاوير را با چرخاندن اين غلطك فراهم سازيد.

<HTML>

<HEAD>

var count =10

function picture ()

{

count = Counting (ocunt);

Resize (count);

Returm false;

}

function Counting (count){

if (even.wheeIDetta<=-120)

count-;

return count;

}

function Counting (count){

olmage.style.zoom=count+

“0%”

}

</SCRIPT>

</HEAD>

<BODY>

<img id= “olmage” src = “Sample.jpg”

onmousewheel = “Picture()”

width = “283”

height = “212”>

</BODY>

</HTML>

اگر اطلاعات فني بيشتري نياز داريد، به آدرس زير مراجعه كنيد:

mash.microsoft.com/library/default.aspurl = / works

hop/author/dhtml/reference/events/onmousewheel.asp

93- با استفاده از غلطك ماوس مي توانيد اندازه فونت يك صفحه وب را نيز به سرعت تغيير دهيد. كليد Ctrl را نگه داريد و غلطك را بچرخانيد. بااين كار، همان پنج حالتي كه در ليست Font Size هستند به دست مي آيد.

94- بعيد است لازم شود اندازه فونت را عوض كنيد، زيرا IE6 اندازه پيش فرض فونت ها را از Small به Medium تغيير داده است.

95- دوست داريد وقتي از صفحه اي به صفحه ديگر مي رويد، صفحه اول را به آرامي تاريك شود و به روي صفحه بعد باز شود (عملي كه به Fade موسم است)؟ از منوي Tools ، گزينه Interent Options را انتخاب كرده و به صفحه Avanced برويد. در قسمت Browsing،گزينه Enable Page transition را علامت بزنيد.

96 - اگر جزو طرفداران ReaIPlayer هستيد، حتماً از «بار» اكسپلوررگونه Real خوشتان مي آيد. در اين «بار» امكان جستجو به دنبال فيلم، موسيقي، راديو اينترنتي ميسر است، درست مثل «بار» Media، بااين تفاوت كه تمام اينها در پنجره RealPlayer باز ميشوند.

97 – وقتي فريمي از يك سايت فريم بندي شده را به عنوان Favortie خود ذخيره مي كنيد، IE لينك پيوند زده شده به آن صفحه را درجاي درستي ذخيره مي كند، ولي عنواني كه به آن مي دهد، عنوان صفحه شروع سايت است(و URL آن هم شبيه به URL صفحه شروع است). پس به خاطر داشته باشيد كه هنگام ذخيره ،عنواني را براي آن انتخاب كنيد كه معلوم شود از كجا آمده است.

98 – شايد فكر كنيد شركت هاي نرم افزاري فقط در تلاشند ويژگي هاي جديدي به محصولات خود اضافه كنند يا ويژگي هاي قبلي را تغيير دهند، ولي يكي از دلايل اصلي توليد نسخه هاي جديد نرم افزارها رفع اشكالات و بهتر كردن برنامه است. خلاصه بگوئيم، با IE6 خيلي كمتر از قبل با اشكال مواجه خواهيد شد.

99 – و اگر بااشكالي مواجه بشويد، مايكروسافت دوست دارد بداند، شايد گزارش هاي خطا در Office XP را ديده باشيد. در ويندوز XP هم همين طور است. لازم نيست كاري انجام بدهيد، ولي اگر IE قفل كند يا از كار بيفتد كادر محاوره اي باز خواهد شد كه از شما مي خواهد دكمه اي را كليك كنيد و گزارش خطا را تحويل دهيد. مايكروسافت در نظر دارد از اين اطلاعات در جهت بهبود نسخه بعدي نرم افزار اينترنتي خود استفاده كند. اين طرح در خصوص Office XP خوب جواب داد و تمام خطاهايي كه در نسخه بتاي اين نرم افزار آشكار شدند ،در محصولي نهايي از بين رفته بودند. اگر مشكلي كه با آن مواجه شده ايد قبلاً حل شده باشد، لينكي در اختيارتان قرار مي گيرد كه شما را به نسخه رفع اشكال شده هدايت مي كند. حتي اگر گزارش را نفرستيد، IE دفعه بعد اجرا خواهد شد.

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

Officewaston.officeupdate.microsoft.com/Data collectionpolicy.htm
منبع ( مجله شبکه)
کيفيت مقاله :
عالی خوب متوسط ضعيف


149 راز در Internet Explorer ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۸۰ مراجعه امروز
۴۸۹۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
149 راز در Internet Explorer
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۱/۱۳۸۲ اين مقاله ۸۴۰ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.
101 – برداشتن IE6 خيلي آسان است. اگر نظرتان عوض شد و خواستيد IE6 را Uninstall بكنيد، يا خواستيد ويندوز 2000 را نصب كنيد بدون اينكه پيام خطايي درباره IE ببينيد (چرا كه قصد داريد نسخه قديمي تر IE در ويندوز 2000 را روي IE6 نصب كنيد)، از پنجره Control Panel برنامه Add/Remove Programs را اجرا و گزينه Microsoft Internet Explorer 6 and Interenet Tools را انتخاب كنيد . بعد از اين كه IE6 را Uninstall كرديد، گزينه Restore the previous windows conifiguration را انتخاب كنيد.

102 – اگر زياد با IE6 مشكل پيدا مي كنيد، و پيوسته يك پيام خطا مي گيريد، امكان دارد نسخه IE شما به طريقي دچار آسيب شده باشد. اولين كاري كه بايد انجام بدهيد اين است كه ابزارهاي تعميراتي خود IE را اجرا و گزينه Microsoft Internet Explorer 6 and Internet Tools را انتخاب كنيد، دكمه Add/Remove را فشار داده و در كادر محاوره ظاهر شده، گزينه Repair Internet Explorer را انتخاب كنيد. با اين كار، به احتمال زياد مشكل برطرف مي شود ولي بعد از پايان تعمير بايد كامپيوتر خود را Restart بكنيد.

103 – روزآمدي خود را حفظ كنيد ، از منوي Tools، گزينه Internet Options را انتخاب كرده و به صفحه Advanced برويد. در قسمت Browsing، گزينه Automatically check for Internet Explorer updates را علامت بزنيد . با اين انتخاب، هرگاه Update جديدي براي IE وجود داشته باشد، كادر محاوره اي باز مي شود كه مي پرسد مي خواهيد آن را بارگذاري كنيد يا نه.

104 – روزآمدي و لينكي خود را حفظ كنيد. برنامه به روزرساني خودكار IE شامل «وصله»هاي امنيتي نمي شود. پس بهتر است با ارسال يك نامه خالي به آدرس Microsoft-security-subscribe-requestamounce.microsoft.com از آنها درخواست كنيد هر وقت خبري شد به شما اطلاع بدهند.

105 – روزآمدي خود را با همديگر حفظ كنيد، به گروه خبري رسمي Internet Explorer ملحق شويد و از نكات، خدمات و اظهارات نظرهاي ديگر كاربران مطلع شويد، آدرس از اين قرار است: Microsoft.public.internetexplorer

106 – اگر به وب سايتي رفتيد كه از JavaScript يا VBScript استفاده مي كند و اسكريپت مربوطه كار نمي كند، كادر محاوره اي باز مي شود كه مي گويد مشكل از كجاست. از آنجا كه كاربران و اينترنت بازان عادي علاقه اي به دانستن ريشه مشكل ندارند (چرا كه معلومات آنها در حدي نيست كه بتوانند آن را برطرف كنند)، IE تصميم مي گيرد به طور پيش فرض خطاهاي بعدي را ديگر نشان ندهد، مگر اين كه گزينه درخواست كننده اطلاعات بيشتر در آن كادر محاوره را علامت بزنيد. ولي بدانيد كه با اين كار، پشت سرهم كادر محاوره ديگري ظاهر مي شود، پس علامت آن را برداريد و خود را خلاص كنيد.

107 – اگر نمي توانيد طاقت بياوريد و دوست داريد «هر» خطاي اسكريپتي موجود در صفحات را مشاهده كنيد، از منوي Tools گزينه Internet Options را كليك كرده و به صفحه Advanced برويد. سپس از قسمت Browsing،گزينه Displaya notification about every script error را علامت بزنيد.

108 – با كليك روي دكمه Advanced هر بخش اضافي كه دوست داريد از IE6 حذف شود را مشخص كنيد . در پايان، بايد ويندوز را Restart بكنيد.

109- اگر در هنگام Uninstall كردن IE6 آن را در ليست برنامه ها پيدا نكرديد، احتمال دارد اطلاعات Uninstall نسخه قبلي خود را پاك كرده باشيد(يا سرويسي از ويندوز 2000 را نصب كرده باشيد كه آن را پاك مي كند). در اين حالت، سعي كنيد Setup.exe را از فولدر Internet ExplorerSetup اجرا و گزينه Remove را انتخاب كنيد.

110 – اگر باز هم موفق نشديد، تنها راه براي خلاص شدن از دست IE6 اين است كه دوباره ويندوز را نصب كنيد. اگر از ويندوز 98 يا ام اي استفاده مي كنيد، ابتدا اسم فايل IEMIGRAT.DLL را عوض كنيد تا نسخه اي از IE نصب شود كه به همراه ويندوز شما عرضه شده است.

111 – ولي IE6 را از سيستم خود برنداريد، هر وقت مطمئن شديد كه IE6 را دوست دارد و هرگز به IE5.5 بر نمي گرديد، ميتوانيد باحذف اطلاعات Backup در حدود 10 مگابايت از فضاي ديسك خود را دوباره احيا كنيد. از پنجره Control Panel برنامه Add/Remove Programs را اجرا و گزينه Microsoft Internet Explorer 6 and Internet Tools را از ليست انتخاب كنيد. دكمه Add/Remove و پس از آن Advanced را فشار داده و گزينه مربوط به حذف Back-up را علامت بزنيد.

112 – اگر از ويندوز 95 استفاده مي كنيد، نمي توانيد IE6 را روي آن نصب كنيد. بايد ويندوز خود را به ME يا XP ارتقاء بدهيد.

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

114 – CSS يك استاندارد است. وقتي وب سايتي را مي سازيد، قطعاً دوست داريد تمام عناوين ونوشته ها درست نشان داده شوند. به جاي اين كه فرمت صفحه را به طور دستي تنظيم كنيد و بعد اگر فونت جديدي را انتخاب كرديد، دوباره هر چيزي را دستي تغيير بدهيد، از Cascading Style Sheet استفاده كنيد تا با اعمال يك Style بتوانيد هر وقت نياز به اصلاح وب سايت بود، كل آن را يك جا تغيير بدهيد.

115 - IE6 از تمام ويژگي هاي CSS Leval1 حمايت مي كند؛ يعني مي توانيد انتظار داشته باشيد كه وب سايت شما در IE6 و Netscape Navigator 6.1 يكسان ظاهر شود.

116 – اگر دوست نداريد، صفحات خود را تغيير بدهيد، مجبور نيستيد. اگر از سوئيچ !DOCTYPR استفاده نكرده ايد كه به IE6 بگوئيد CSS1 را به طور كامل استفاده بكند، اين كار را نخواهد كرد. آن را فعال كنيد و خواهيد ديد كه IE در مورد Style Sheet محدوديت دارد. پس اگر رنگي را با دادن مقدار هگزادسيمال آن تعيين كرده ايد ولي آن را جا انداخته ايد، ديگر كار نخواهد كرد.

117 – حاشيه ها را تطبيق دهيد. CSS محتويات يك عنصر HTML را در كادري نامرئي قرار مي دهد كه فاصله حاشيه ها و خطوط مرزي آن رعايت شده اند. نسخه هاي قبلي IE اين خطوط مرزي را به اندازه كادر اضافه مي كنند و آن را بزرگتر در نظر مي گيرند. IE6 اين جمع زدن را درست انجام مي دهد و اندازه كادر را هماني كه هست در نظر مي گيرد.

118- IE6 حاشيه خانه هاي جدول ها را درست حساب مي كند، ولي امروزه توسعه دهندگان مي توانند حداقل ارتفاع خانه هاي جدول را به گونه اي انتخاب كنند كه همواره قابل رويت و استفاده باشد.

119 – فاصله بين كلمات اصلاح شده است. كاربران مكنتاش از IE4.01 به بعد از اين اصلاحات سود برده اند و حالا نوبت كاربران PC است كه فاصله گذاري بهتري را در ستون ها و كادرهاي باريك ببينند.

120 – بيشتر برنامه هاي واژه پردازي قابليت Small caps را دارند؛ يعني تمام حروف يك كلمه به حالت بزرگ (مثل B,A و...) باشند، ولي حرف اول كمي بزرگتر از بقيه باشد. حالا IE6 هم چنين قابليتي دارد.

121 – عادت به Quick Time

IE ديگر از پلاگينهاي نت اسكيپ گونه اي كه با استفاده از برچسب EMBED در پنجره IE به نمايش در مي آيند حمايت نمي كند، زيرا از مايكروسافت شكايت شده كه حقوق ثبت شده آنها تجاوز كرده است. مشهورترين پلاگ ايني كه از اين محروميت تاثير گرفت Quick Time بود. اگر از پلاگين Quick Time استفاده مي كنيد كه با IE5 كار مي كرد، حالا آيكوني را خواهيد ديد كه مي گويد Quick Time is broken (به جاي (Quick Time movie اگر مي خواهيد Quick Time دوباره به كار بيفتد، كنترل اكتيوايكس Apple را از آدرس www.apple.com/quicktime بگيريد و دوباره لذت ببريد. اگر در خصوص استفاده از Quick Time در صفحات وب خود نگراني داريد، دستورالعمل هاي مربوطه را از آدرس زير بگيريد:

Developer.apple.com/quicktime/compatibility.html

122 – مشكل Acrobat

در تعداد معدودي از سايت هاي وب، وقتي روي لينكي كليك مي كنيد تا يك فايل PDF رادر Acrobat Reader شركت Adobe مشاهده كنيد، با صفحه اي خالي مواجه مي شويد كه به جاي مطالب مورد نظر فقط يك آيكون را نشان مي دهد. اين مشكل باز هم به پلاگ اينها و برچسب EMBED مربوط مي شود. ولي اين مشكل فقط وقتي بروز مي كند كه اسم فايل به پسوند PDF، ختم نشده و سايت مزبور نيز مشخص نكرده باشد كه فرمت فايل PDF است. اگر سايت فايل مربوطه را چنان توصيف كرده باشد كه IE6 بتواند آن را بشناسد، PDF را به درستي خواهيد ديد، ولي در غير اين صورت ، سعي كنيد روي لينك كليك راست كنيد و با انتخاب گزينه Save Target As آن فايل راابتدا در كامپيوتر خود ذخيره و سپس با كليك مضاعف روي آن با خيالي آسوده باز كنيد.

123 – حالا كه IE فرق بين Padding و Margin اطراف اشياي واقع در صفحه را مي فهمد، توسعه دهندگان وب مي توانند با استفاده از Padding فضاي سفيدي در اطراف تصاوير ايجاد كنند.

124 – DHTML به توسعه دهندگان وب امكان مي دهد بدون نياز به پلاگ اينهاي اضافي يا تصاوير بزرگ كارهاي جالبي انجام بدهند. بيشتر ترفندهاي DHTML از «رفتارها» بهره مي گيرند (دستورالعمل هايي براي طراحي صفحه وب، به حركت در آوردن سر تيترها يا هر چيز ديگري كه بخواهيد عضوي از يك صفحه انجام دهد). در IE6، اگر عناصر زيادي در يك صفحه از رفتار DHTML يكساني استفاده كرده باشند، همه آنها سريعتر كار مي كنند.

125 – خاصيت اصلي XML اين است كه پيچيدگي و درهم ريختگي داده ها در وب را به اطلاعاتي منظم تبديل كند. IE با حمايت از آخرين اجراي XML مايكروسافت (يعني XML3) آخرين استانداردها را رعايت مي كند (و سريعتر نيز مي باشد).

126 – هماهنگي بين چند رسانه اي ها، اگر در حال مشاهده يك فيلم جاري يا گوش دادن به تراك صوتي باشيد و نوشته هايي هماهنگ با آن فيلم يا صدا روي سايت وجود داشته باشد، راحت پيش مي آيد كه اين هماهنگي از بين برود. راه حل مايكروسافت براي حفظ اين هماهنگي HTML+TIME است. استانداردي موسوم به SMTL2.

127 – پلاگين ها ي مشكل دار ديگر

اين پلاگينها به اندازه Quick Time يا Acrobat شهرت ندارند، ولي Final MusicViewer يا Altma TIFF هم در IE6 مشكل پيدا مي كنند. بهتر است نسخه هاي به روز شده آنها را پيدا كنيد.

128 – اكتيوايكس

برچسب EMBED به طور كامل ممنوع نشده و كامپيونت هاي اكتيوايكس درست كار خواهند كرد. پس لازم نيست نگران Shockwave,Flash يا SVG Viewer باشيد.

129 - IE6 ديگر با جاوا همراه نيست. مايكروسافت مي خواهد مردم را مجبور كند از اكتيوايكس خودشان استفاده كنند. اگر IE6 را با ارتقاء نسخه هاي قديمي تر IE در دست داريد هنوز هم جاوا داريد (اگر آن را نصب كرده باشيد). در غير اين صورت، اولين باري كه به وب سايتي برويد كه يك جاوا اپلت داشته باشد، كادر محاوره اي باز مي شود كه از شما مي خواهد ماشين مجازي جاوا خود مايكروسافت را از آدرس www.microsoft.com/java/ بارگذاري كنيد.

130 – IE تمام فايل هاي موقتي را در فولدري درون دايركتوري ويندوز ذخيره مي كند. اگر ترجيح مي دهيد اين فايل ها جاي ديگري نگهداري شوند، از منوي Tools گزينه Internet Options را انتخاب كنيد . از صفحه General در قسمت Temporary Internet Files دكمه Setting و سپس More Files راكليك كنيد.

131 – علاوه بر اينكه مي توانيد به صفحات وبي كه در فولدر Temporary Internet Files ذخيره كرده ايد سر بزنيد، مي توانيد ببينيد چه پلاگ اينها و برنامه هايي را بارگذاري كرده ايد. از منوي Tools، گزينه Internet Options را انتخاب و از قسمت Temporary Internet Files صفحه General روي دكمه Setting و سپس View Objects كليك كنيد.

132 – وقتي URL ها را تايپ مي كنيد، IE با نگاهي به ليست History سعي مي كند آدرس هايي مشابه با آنچه در حال تايپ آن هستيد را به شما پيشنهاد بدهد. اگر آدرس مورد نظر خود را دراين ليست پيدا كرديد، روي آن كليك كنيد. اگر هيچ كدام از پيشنهادها را قبول نداريد، به تايپ خود ادامه بدهيد.

133 – كلمه اي را در خط Address تايپ كنيد و كليد Enter را به همراه Ctrl بزنيد تا IE قسمت http://www و com را به طور خودكار به ابتدا و انتهاي كلمه بچسباند. اگر تايپ كنيد http:// يا http:// يا اشتباهاتي از اين دست مرتكب بشويد (مثلاً به جاي / تايپ كنيد) IE6 خود به خود اشتباه تايپي شما را اصلاح خواهد كرد عجيب است كه كاما را به نقطه تبديل نمي كند،ولي شايد اين كار را براي نسخه بعدي باقي گذاشته است!

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

135 – اگر مي خواهيد اسم كاربر و رمز عبور مربوط به يك سايت وب را ذخيره كنيد، IE آنها را با صفحه وب مربوطه متناظر خواهد كرد. بعد از اين كه يك بار اسم و رمز عبور را پر كرديد، IE آنها را به خاطر مي سپارد.

136 – گزينه هاي مربوط به AutoComplete را از طريق منوي Tools، گزينه Internet Options، صفحه Control قسمت Auto Complete تنظيم كنيد.

137 – وقتي به صفحه وبي مي رويد كه مي تواند اطلاعات را از Profile Assistant بگيرد، كادر محاوره اي باز مي شود كه به شما مي گويد كدام سايت وب اطلاعات شما را مي خواهد و به چه منظور، در اين حالت، مي توانيد تعيين كنيد تا چه حد اطلاعات به آن سايت داده شود.

138 – اطلاعاتي كه در اين جا پر مي كنيد مورد استفاده Outlook و Outlook Express هم قرار خواهد گرفت و به عنوان كارت تجاري شما ثبت خواهد شد. اين اطلاعات به طور خودكار به نامه هاي ارسالي از طرف شما قابل پيوست هستند و اگر آنها را براي كاربر ديگري از Outlook بفرستيد، وي مي تواند مستقيماً اطلاعات شما را به ليست طرف هاي تماس خود منتقل كند.

139 – برنامه پست الكترونيكي يا ويرايشگر وب مورد نظر خود را از طريق منوي Tools، گزينه Internet Options و صفحه Programs انتخاب كنيد. برنامه مورد نظر را از ليست كشويي برگزينيد. اين ليست با توجه به برنامه هايي كه در سيستم خود نصب كرده ايد تشكيل مي شود.

140 – اگر بخواهيد مي توانيد Hotmail را به عنوان لينك Email خود انتخاب كنيد و از IE بخواهيد به طور خودكار Login كند. اين كار براي مواقعي كه در حال گشت و گذار در وب هستيد و مي خواهيد صفحه اي از وب را براي كسي بفرستيد بسيار كار راه انداز است.

141 – اگر كارد محاوره Internet Options هيچ ويرايشگر HTML را انتخاب نكرده باشيد، با كليك روي دكمه Edit واقع در خط ابزار، ممكن است FrontPage Express باز شود. علت اين است كه وقتي ويرايشگري را معرفي نكرده باشيد، ويندوز اولين ابزار ويرايشگري HTML در Registry را بر مي گزيند.

142 – به جاي پيام هاي بي فايده اي چون 404 File not found يا Cannot find server or DNS error كه IE به هنگام وقوع خطا ظاهر مي كرد، در IE6 توضيحي مفصل از آن چه رخ داده همراه با چند پيشنهاد مناسب ارائه مي شود. اگر IE حدس بزند كه به اينترنت وصل نيستند، چند روش معاينه را به شما پيشنهاد مي دهد يا توصيه مي كند تنظيمات شبكه را به جاي شما تحت معاينه قرار دهد. اگر ترجيح مي دهيد پيام خطاي واقعي ارسالي از طرف سرور را ببينيد (كه اگر توسعه دهنده وب باشيد براي آزمايش سايت وب خود احتمالاً چنين ترجيح مي دهيد)، مي توانيد از منوي Tools، گزينه Internet Options راانتخاب كرده و به صفحه Advanced برويد. سپس، در قسمت Browsing، علامت گزينه Show friendly HTTP error messages را برداريد.

143 – (جديد نيست) اگر مي خواهيد صفحه وبي را ذخيره كنيد تا بعداً به مطالعه آن بپردازيد، كادر محاوره Save Web page (از منوي File، گزينه Save As) چهار انتخاب به شما مي دهد. مي توانيد فقط نوشته هاي صفحه را ذخيره و عناصر وبي را از آن حذف كنيد، يا مي توانيد به صورت HTML ذخيره كنيد، ولي اگر مي خواهيد صفحه را به طور كامل داشته باشيد، مي توانيد تمام تصاوير مورد نياز را در يك فولدر ذخيره كنيد، يا همه چيز را در يك فايل آرشيوي به صورت فشرده نگهداري نمائيد.

144 – براي صرفه جوئي در تايپ مكرر اطلاعات هر دفعه كه فرمي را در يك سايت وب پر مي كنيد، از منوي Tools گزينه Internet Options را انتخاب كرده و به صفحه Content برويد. سپس، از قسمت Parsonal Information دكمه My Profile را كليك كرده و تمام اطلاعات خود را يكبار تايپ كنيد تا Profile Assistant به موقع از آنها استفاده كند.

145 – سايتي را انتخاب مي كنيد كه قبلاً در Favorties شما قرار داشته و آن را به صورت Offline قابل دسترسي تعريف مي كنيد. اگر اخيراً به اين سايت سر زده باشيد، IE اطلاعات را براي شما ذخيره خواهد كرد، ولي اگر به آن سايت نرفته باشيد، بايد Online بشويد. هميشه قبل از قطع ارتباط، از منوي Tools گزينه Synctronise را انتخاب كنيد تا تمام صفحاتي كه خواسته ايد به صورت Offine هم قابل دسترسي باشند به روز بشوند.

146 – با استفاده از منوي Tools، گزينه Synchronise و دكمه Setup، چگونه، زمان و آن چه IE سنكرون مي كند را تحت كنترل خود بگيريد. IE مي تواند Favorite هاي Offline را به محض وصل شدن به اينترنت به روز كند، يا زماني به روز كند كه Online هستيد و كامپيوتر بي كار است.

147 – اگر دوست داريد صفحه مورد علاقه تان همواره به روز باشد، آن را ذخيره نكنيد، بلكه آن را به صورت يك Offline favorite تنظيم كنيد. وقتي از منوي Favorites گزينه Add to Favorites راانتخاب مي كنيد، گزينه Make available offline را علامت بزنيد تا صفحه مزبور در حالت offline هم قابل استفاده باشد. با كليك روي دكمه Properties مي توانيد تعيين كنيد كه اين صفحه چند وقت به چند وقت به روز شود.

148 – وقتي تنظيمات مربوط به استفاده Offline از سايت Favorite خود را تعيين مي كنيد، سعي نكنيد عمق زيادي را در زنجيره لينك ها انتخاب كنيد. دسترسي تا يك سطح پايين تر معمولاً لازم است تا مجبور نشويد به خاطر يك لينك دوباره Online بشويد. ولي اگر عمق بسيار زيادي را انتخاب كنيد، همه شب را بايد منتظر بمانيد تا صفحات بارگذاري شوند.

149 – برنامه زماني صفحات Offline خود را تعريف كنيد. Daily مي تواند به معني اين باشد كه هر روز ساعت 3 صبح، و اگر آن را به 6 بعد از ظهر تغيير دهيد، براي تمام صفحاتي كه Daily تعيين شده اند اين تغيير صورت مي گيرد . ببينيد آيا دوست داريد IE خود به خود سر موقع
منبع ( مجله شبکه )
کيفيت مقاله :
عالی خوب متوسط ضعيف


XML چيست و چرا داراي اهميت فراوان است ؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۸۳ مراجعه امروز
۴۸۹۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
XML چيست و چرا داراي اهميت فراوان است ؟
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۲/۱/۱۳۸۲ اين مقاله ۷۵۴ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

در بخش اول، مفاهيم اوليه تکنولوژي XML بررسي و پس از معرفي خانواده بزرگ تکنولوژي هاي مرتبط با XML ، سه استاندارد لازم بمنظور تعريف نوع سندهاي XML تشريح گرديد ( XML ، NameSpace و XML-Schema ( و يا DTD) ) . در بخش دوم به بررسي نحوه انتشار سندهاي XML اشاره گرديد . در اين بخش ،نحوه پردازش سندهاي XML و دلايل توجه جدي به اين تکنولوژي ، تشريح مي گردد .

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

پارسر (Parser)
هر پردازنده XML ( مرورگرها ، پردازنده هاي Schema ، ويرايشگرها ، پردازنده هاي Stylesheet ) داراي يک پارسر مي باشند . پارسر يک سند XML را خوانده و آن را به بخش هاي متفاوت تقسيم و در حافظه مستقر مي نمايد .( معيار تقسيم بندي مي تواند بر اساس المان و يا خصلت باشد ) . پس از استقرار بخش هاي متفاوت يک سند XML در حافظه ، امکان انجام عمليات بر روي هر يک از بخش هاي موجود توسط پردازنده فراهم مي گردد . ( نظير داده هاي موجود در يک بانک اطلاعاتي ) :

انتقال يک سند از يک فرمت به فرمت ديگر

بازسازي مجدد يک سند XML با توجه به اولويت هاي اطلاعاتي مورد نظر

اعمال فرمت هاي دلخواه بمنظور چاپ و يا نمايش

اکثر پياده کنندگان نرم افزار هاي مبتني بر XML ، ضرورتي به فراگيري جزئيات مربوط به نحوه پارسينگ ، نداشته و مي توانند آن را به ابزارهاي ارائه شده توسط توليدکنندگان واگذار نمايند . (در محيط هاي پياده سازي امکانات مربوطه در اين زمينه پيش بيني مي گردد) . با مطالعه پارسر هاي XML ، شناخت مناسبي نسبت به امکانات و ويژگي هاي موجود، ايجاد خواهد شد . XML داراي دو اينترفيس برنامه نويسي DOM و SAX است .
DOM)Document Object Model) بر خلاف نام خود يک مدل واقعي نيست . DOM يک API ( اينترفيس برنامه نويسي ) براي نوشتن کدهاي لازم بمنظور انجام عمليات دلخواه بر روي بخش هائي از يک سند XML پس از استقرار آن در حافظه است . رفتار استاندارد فوق با اطلاعات موجود در يک سند XML ، استفاده از يک ساختار درختي براي ذخيره سازي اطلاعات ، بهمراه دستوراتي براي حرکت در طول درخت و بازيابي اطلاعات مورد نظر است . دستورات بر اساس يک مدل شي گراء عمل مي نمايند. مهمترين مزيت پارسرهاي سازگار با DOM ، ارائه استانداردهاي لازم API بمنظور انجام عمليات دلخواه در رابطه با اطلاعات است .
SAX)Simple API for XML) ، بر اساس يک مدل شي گراء رفتار نمي نمايد. در اينترفيس فوق ، از مجموعه اي رويداد استفاده مي گردد . رويدادها، پس از خواند ن يک سند XML توسط پارسر هاي سازگار با SAX ، با توجه به شرايط مربوطه ، فعال خواهند شد. يکي از دلايل مطرح شدن SAX با توجه به وجود DOM ، عدم امکان استفاده از دستورات DOM تا زماني است که تمام سند در حافظه مستقر گردد . استفاده و بکارگيري از دستورات DOM صرفا" پس از استقرار تمام سند XML در حافظه امکان پذير خواهد بود . بديهي است با توجه به رويکرد عملياتي فوق ، حجم بالاي سندهاي XML مي تواند باعث بروز مسائل و مشکلاتي در اين رابطه گردد . مثلا" بمنظور دستيابي به يک المان خاص مي بايست در انتظار استقرار تمام سند XML در حافظه گرديد .( از دست دادن زمان و مصرف بيهوده حافظه ) . با استفاده از تکنولوژي SAX مي توان بسرعت يک سند را فعال و در ادامه المان هاي موجود را بمنظور استفاده از محتويات مورد نظر جستجو کرد .
قابليت SAX ، يک پيش نياز براي پارسرهاي سازگار با DOM است ، چون يک پارسر DOM مي بايست در ابتدا سند را خوانده و در ادامه از رويدادهاي مشابه SAX بمنظورتشخيص المان ها استفاده و آنها را در حافظه ايجاد نمايد . بعنوان جمع بندي مي بايست به اين نکته اشاره گردد که اغلب پارسرها امکانات مربوط به DOM و SAX را حمايت کرده و مي توان از پارسر هاي مشابه بمنظور انجام هر يک از حالات پردازش استفاده کرد .

Transformation XSLT ( تبديل )
تبديل ، فرآيندي است که با استفاده از XSLT ، يک سند XML به يک فرمت ديگر ( XML و يا غير XML) تغيير مي گردد . تبديلات، بمنزله بلاک هاي ايجاد برنامه هاي مبتني بر XML مطرح مي باشند. با استفاده از تبديلات ، امکان انجام عمليات دلخواه در رابطه با اطلاعات بصورت بهينه فراهم مي گردد .
يک XSLT stylsheet ، شامل تمپليت ها و الگوها است . تمپليت ساختار تبديل مورد نياز را مشخص و الگوها ، تمپليت را به ساختار موجود در سند ، نسبت دهي خواهند کرد. مدل پردازش XSLT ، بصورت تعريفي و خود بازگشتي است . پردازنده StyleSheet ، بر روي سند XML پارس شده ، حرکت و در هر گره ، تمپليت را بکارگرفته تا بر اساس آن الگوهائي که واجد شرايط هستند، انتخاب گردند. دستورالعمل هاي موجود در تمپليت ها ،قادر به مرتب سازي ، سازماندهي مجدد و ساير عمليات مورد نياز بمنظور ايجاد خروجي مورد نظر مي باشند . برنامه زير يک تمپليت ساده را نشان مي دهد . فرض کنيد سند XML داراي دو المان مشابه زير باشد .

مثال : يک سند ساده XML بهمراه دو المان

<author>
<firstname>Ali</firstname><lastname>Irani</surname>
</author>
<author>
<firstname>Reza</firstname><lastname>Tehrani</surname>
</author>

فرض کنيد StyleSheet ، شامل تمپليتي با الگوي مورد نظر براي تطبيق المان هاي بصورت زير باشد :

مثال : تمپليت براي تطبيق المان هاي

<xsl:template match="author">
<xsl:value-of select="lastname"/>, <xsl:value-of select="firstname"/>

</xsl:template>

زمانيکه پردازنده stylesheet بر روي سند حرکت مي نمايد ، هر زمان که با يک المان جديد برخورد نمايد ، بررسي آن بمنظور تطبيق با شرايط موجود در تمپليت انجام خواهد شد. پردازنده در مواجه با المان متوجه مي گردد ، که يک مورد مطابقت وجود دارد . بدين ترتيب با تاکيد بر تمپليت تعريف شده ، خروجي مورد نظر ايجاد خواهد شد. بدين ترتيب خروجي بصورت زير خواهد بود . ( ترکيب عبارات موجود در تمپليت ، دو المان < xsl:value-of> بهمراه تگ < /BR> ) .

Irani, Ali
Tehrani, Reza

پردازش XSLT ، يک مدل قدرتمند و بسيار مفيد براي استفاده در برنامه هاي XML B2B است . در برنامه هاي فوق ، تبديلات متعددي صورت مي پذيرد ( از يک فرمت XSLT به فرمت ديگر) . XSLT ابزاري مناسب بمنظور انجام عمليات فوق است .

خلاصه
استانداردهاي اساسي بمنظور پردازش سندهاي XML شامل DOM , SAX و XSLT مي باشد.

پارسر هاي استاندارد شده امکان مبادله پردازنده هاي XML را فراهم مي نمايند.

تبديلات ، بعنوان بلاک هاي ايجاد برنامه هاي مبتني بر XML مطرح مي باشند .

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

دليل اول : مبادله اطلاعاتي فراگير
مبادله اطلاعاتي فراگير ، فرايندي بمنظور تبادل اطلاعات بين سيستم ها ويا عناصر با استفاده از فرمت هاي از قبل تعريف شده پيام ، بدون آگاهي از جزئيات ساير سيستم ها است . مفهوم تعريف فوق بدين منزله است که : " اگر شما يک پيام مشابه اين را به آدرس من ارسال نمائي ،من نيز يک پيام مشابه آن را به آدرس شما ارسال خواهم کرد ." بدين ترتيب مشکلي که طراحان و برنامه نويسان ساليان متمادي است با آن درگير بوده و همواره بدنبال حل اين مسئله مهم بوده اند ، برطرف مي گردد .سيستم ها با استفاده از يک فرمت قابل قبول اطلاعاتي ، بيکديگر مرتبط خواهند شد . پيام هاي مبتني بر XML ، مستقل از نرم افزار پردازش کننده بوده و بدين ترتيب مي توان سيستم هاي بيشتري را در شبکه درگير و ماهيت اين نوع از سيستم ها را تغيير داد .( بدون نياز به اعمال تغيير در مکانيزم پيام ها )

XML ، بسرعت و در مقياسي گسترده بعنوان گزينه اي مناسب براي فعاليت هاي : B2B ، پيام شي به شي ، مطرح شده است . در سراسر دنيا ، سازمانهائي که نيازمند مبادله اطلاعاتي با يکديگر مي باشند ، بهم ملحق وکميته هاي تجاري را ايجاد نموده اند . در کميته هاي فوق زبانهاي XML تعريف و بر اساس آنها داده ها مبادله مي گردند . در چنين مواردي Schema مربوطه ، بمنظور نشر بر روي وب سايت هاي اصلي و مرکزي قرار گرفته است . براي آگاهي بيشتر در رابطه با مفاهيم و کميته هاي مربوطه مي توانيد سايت هاي http://www.xml.org و http://www.biztalk.org را مشاهده نمائيد .

دليل دوم : تشريح خودکار داده ها
يک سند XML شامل اسامي مربوط به اشياء/ ستون / المان ها بوده و بصورت اختياري ممکن است شامل Schema و يا مراجعه به آن باشد. بدين ترتيب يک سند XML بنوعي خود را تشريح مي نمايد ، روشي که تاکنون در اين سطح استفاده نشده است . بدين ترتيب امکان پردازش هاي سمت سرويس گيرنده بر روي سندهاي XML فراهم خواهد شد. زمانيکه يک سند XML براي يک دستگاه ارسال مي گردد ، نرم افزار موجود بر روي دستگاه قادر به نمايش و پردازش اطلاعات خواهد بود . با ترکيب داده هائي که خود را تشريح مي نمايند و پردازش هاي سمت سرويس گيرنده ، مي توان برنامه هاي قدرتمندي را ايجاد و شاهد نسل جديدي از سندهاي هوشمند با برنامه نويسي اندک ، باشيم .

دليل سوم : استاندارد جهاني
XML يک استاندارد جهاني بوده و بدين ترتيب صلابت و گسترش آن تضمين شده است . بدين ترتيب مي توان :

بسادگي اطلاعات مورد نظر را بين سيستم هاي ناهمگن مبادله کرد .

ابزارهاي توليده شده رقابتي را بر اساس نياز انتخاب کرد .

روتين هائي را با قابليت استفاده مجدد ايجاد کرد .

ويژگي جديدي را بدون درگير شدن با مسائل سازگاري اضافه کرد .

دليل چهارم : ابزاري مناسب براي ارائه اطلاعات
دليل نهائي در رابطه با اهميت XML ، قابليت استفاده XML براي انواع متفاوت اطلاعات با اهداف گوناگون است . XML در ابتدا از SGML بمنظور استفاده در وب طراحي گرديد ولي هم اکنون ، زمينه استفاده از آن در وب و ساير برنامه ها ئي که تحت وب نمي باشند ، نيز فراهم شده است . مبادله اطلاعات ، پيوستگي سيستم ها ، پردازش هاي توزيع شده ، ذخيره سازي محلي متاديتا ، نمونه هائي از ميدان وسيع استفاده از XML مي باشند . علاوه بر موارد فوق ، لازم است به اين نکته مهم نيز توجه گردد که XML ، امکان استفاده از Unicode را نيز فراهم مي نمايد ( بيش از 64.000 کارکتر )

کيفيت مقاله :
عالی خوب متوسط ضعيف


XML چيست و چرا داراي اهميت فراوان است ؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۸۶ مراجعه امروز
۴۹۰۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
XML چيست و چرا داراي اهميت فراوان است ؟
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۱/۱۳۸۲ اين مقاله ۵۶۲ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

در بخش اول، مفاهيم اوليه تکنولوژي XML بررسي و پس از معرفي خانواده بزرگ تکنولوژي هاي مرتبط با XML ، سه استاندارد لازم بمنظور تعريف نوع سندهاي XML تشريح گرديد ( XML ، NameSpace و XML-Schema ( و يا DTD) ) . در بخش دوم به بررسي نحوه انتشار سندهاي XML خواهيم پرداخت .

Html بعنوان اسنانداردي جهت نمايش اطلاعات در عرصه وب ، سالها است که مطرح و استفاده مي گردد. تگ هاي Html مسئوليت تبين نحوه نمايش اطلاعات را بر عهده خواهند گرفت . تکنولوژي فوق براي انجام وظايف محوله از پيش فرض هاي تعريف شده و ثابت (ايستا ) استفاده مي نمايد . مثلا" با مشاهده تگ <B> دقيقا" مشخص شده است که مي بايست چه نوع واکنشي صورت پذيرد. ( پر رنگ نمودن متن مورد نظر ) . نبايد انتظار داشته باشيم که با درج تگ <B> عملياتي غير از آنچه از قبل تعريف شده است صورت پذيرد. مفسر تگ هاي Html پس از انجام تفسير مربوطه ، واکنش از قبل تعريف شده اي را از خود نشان خواهد داد. مرورگرها بکمک مفسر هاي مربوطه همواره شرايط يکساني را براي نمايش فراهم و شرايط خود را بر همه چيز منجمله سليقه و نقطه نظرات طراح و ... ترجيج مي دهند. خودخواهي در نمايش و تحميل شرايط مربوطه از نکات قابل تامل در تکنولوژي فوق است . Html محدوده و مرزي را براي تفکيک داده ها از نمايش قائل نگرديده و با تلفيق دو مقوله فوق همواره از يک روش ثابت براي نمايش داده ها استفاده مي نمايد. فرض کنيد که يک فايل html داشته و بخواهيم زمانيکه براي کاربر ارسال مي گردد در مرورگر مربوطه ، به دو صورت کاملا" متمايز نمايش داده شود . براي نيل به خواسته فوق چاره اي نيست مگر اينکه دو فايل مجزاي html را ايجاد که هر يک داراي خروجي اختصاصي خود باشند. در مثال فوق قصد ما نمايش داده هاي يکسان با فرمت هاي متفاوت از بعد نمايش است . ما بدنبال روش و يا روش هائي هستيم که قادر به تفکيک بين داده و نمايش باشد. قطعا" Html در اين راستا گزينه اي مناسب نخواهد بود. سندهاي Html از تگ هائي نظير <H1> و <P> بمنظور ايجاد ساختار و از تگ هائي نظير <I> و <Font> بمنظور ايجاد فرمت نمايش اطلاعات استفاده مي نمايند . در اين راستا عملا" هيچگونه تگي که نشاندهنده نوع اطلاعات و محتويات سند باشد ، وجود ندارد .بدين ترتيب مفسر قادر به تفسير تگ هاي فوق صرفا" در حد نمايش اطلاعات بوده و امکان انجام هيچگونه پردازشي وجود نخواهد داشت .

حل مشکل با استفاده از XML

Xml بين دو مقوله داده و نمايش تفکيک قائل شده است. در تکنولوژي فوق بدليل عدم وجود تگ هاي از پيش تعريف شده براي نمايش اطلاعات مي توان سناريوي مربوط به نحوه نمايش اطلاعات را بکمک يک تکنولوژي ديگر تعريف و تبين نمود. اطلاعات ذخيره شده بصورت Xml را مي توان با حالات متفاوت و اعمال سناريو هاي متفاوت نمايش داد. برخلاف Html تکتولوژي Xml داراي اطلاعات از قبل تعريف شده و مشخصي براي نحوه نمايش اطلاعات نيست. تگ هاي تعريف شده در يک سند XML ، بصراحت ساختار و محتويات را ارائه خواهند داد . در اين حالت مي توان نرم افزارهائي را طراحي نمود که قادر به انجام عمليات دلخواه بر روي اطلاعات موجود در سند XML باشند . هنوز يک مسئله وجود دارد : در تگ هاي تعريف شده در سند XML ، آيتمي وجود ندارد که به کامپيوتر اعلام نمايد به چه صورت مي بايست اطلاعات مربوط به هر يک از المان ها فرمت ، تا خوانندگان قادر به خواندن آنان باشند . ما به چيزي بيشتر بمنظور تدوين استراتژي نمايش اطلاعات نياز داريم .

زبان هاي تعريف سبک XML

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

CSS)Cascading Style Sheets)

CSS يک زبان Style بوده که بمنظور استفاده در سندهاي Html ابداع گرديده ولي بخوبي قادر به فعاليت در کنار سندهاي XML نيز مي باشد . CSS مکانيزمي مناسب براي نمايش يک سند XML در مرورگر ها است . اکثر ابزارهاي توليد صفحات وب داراي امکانات لازم براي توليد اسکريپت هاي CSS مي باشند . CSS داراي دو محدوديت عمده است . اولا" ، قادر به توليد خروجي مناسب و با کيفيت بالا نمي باشد. ثانيا" ، صرفا" باعث تزئين سند شده و قابليت تغيير در دنباله اطلاعات موجود در سند را نخواهد داشت . محتويات يک سند XML در اغلب حالات داراي يک نطم متفاوت نسبت به حالتي است که قصد نمايش آنها را داريم .در اين راستا لازم است قبل از استفاده از CSS بمنظور نشر يک سند ، سند مورد نظر به حالتي که تمايل به نمايش آن را در خروجي داريم ، تبديل گردد . بدين ترتيب يک مرحله پردازش ديگر به حجم عمليات اضافه خواهد گرديد.

XSL)Extensible Style Language)

XSL يک زبان مبتني بر XML است که داراي محدوديت هاي اشاره شده در رابطه با CSS نمي باشد . متاسفانه در حال حاضر ابزارهاي لازم براي ايجاد اسکريپت هاي XSL محدود بوده و در برخي حالات ممکن است نوشتن اسکريپت ها بصورت دستي انجام گيرد . XSL داراي سه ويژگي منحصر بفرد بوده که هر کدام داراي استاندارد اختصاصي خود مي باشند.

- Tranformation)XSLT) . ويژگي فوق باعث انتقال يک سند XML به فرمت ديگر مي شود. فرمت فوق مي تواند يک سند XML ديگر و يا يک سند DHTML باشد .

- Pointing)XPath) . ويژگي فوق امکان مشخص نمودن هر مکان در يک سند XML را فراهم مي نمايد . پتانسيل فوق بعنوان هسته اساسي پردازش Style Sheet مطرح بوده و مکانيزم لازم در خصوص اعمال قوانين نمايش در خصوص اطلاعات موجود در سند XML را بدون نياز به استفاده از تگ هاي مربوط به Style در بطن و همراه سند ، فراهم مي نمايد .

- Formating)XSL) ، فرآيندي است که بر اساس آن امکان اعمال فرمت مورد نظر به اطلاعات، بدون نياز به نوشتن دستورالعمل ها ئي که مختص يک دستگاه خروجي خاص مي باشند ، را فراهم مي نمايد . مثلا" مي توان قوانيني مشابه : " تمام عناوين مي بايست بصورت پررنگ ، فونت تايمز ، در وسط قرار گرفته ، و دور آنها يک کادر کشيده شده که داراي پهناي N باشد " را بسادگي تعريف کرد . ويژگي فوق يک تحول چشمگير نسبت به وضعيت فعلي است . در اين راستا الزامي به نوشتن قوانين متعدد براي هر يک از دستگاههائي که قصد حمايت از آنان را داريم ، وجود نخواهد داشت .

StyleSheets چگونه کار مي کند ؟

مهمترين اصل تمام زبانهاي XML Style ، کمک به طراحان بمنظور ايجاد قوانين ، نسبت دهي و دستورالعمل هاي پردازش براي انواع اطلاعات موجود در يک سند است . قوانين در يک Stylesheet در تمپليت ها قرار گرفته و به المان ها و الگوهاي اطلاعاتي موجود ، اشاره خواهند کرد .در زمان اجراء ، يک نرم افزار کوچک که پردازنده StyleSheet ناميده مي شود ، سند XML و يک StyleSheet را بعنوان ورودي اخذ خواهد کرد ( پردازنده Stylesheet ، درون هر برنامه اي که Stylesheet را به XML اعمال مي نمايد ، نظير مرورگرها و يا ابزارهاي طراحي صفحات وب وجود دارد) . پردازنده بر اساس دستورالعمل هاي موجود در Stylesheet عمليات مورد نظر را انجام و بر اساس تمپليت تعريف شده اطلاعات ذيربط را در آن درج و باعث ايجاد يک خروجي جديد بعنوان ماحصل کار مي نمايد. روش فوق برنامه نويسي تعريفي در مقابل رويه اي ناميده مي شود ( در اين حالت قوانين مربوط به نحوه نمايش تعريف شده اند، نه اينکه دستورالعمل هاي رويه اي در متن کدها استفاده شده باشد ) . نمونه کدهاي زير ، يک تمپليت XSLT را ايجاد که در آن المان <title> در زمان ايجاد تگ هاي Html ، درشت نوشته شده خواهند شد .

مثال : يک تمپليت ساده XSLT

<xsl:template match="title">
<H1>
<xsl:apply-templates/>
</H1>
</xsl:template>

در تمپليت فوق ، خصلت match داراي مقدار title بوده و اين بدين معني است که قانون مي بايست به هر المان موجود در <title> که پردازنده Stylesheet آن را در سند XML پيدا خواهد کرد ، اعمال خواهد شد. قانون موجود در تمپليت به اين نکته اشاره دارد که محتويات المان <title> در سند XML ، مي بايست در فايل Html که ايجاد خواهد شد ، درج و قبل از آن تگ <H1> و بدنبال آن تگ <H1/> آورده شود . فرض کنيد فايل XML مشابه زير باشد :

مثال : سند XML که فايل XSLT بر روي آن اعمال مي گردد

<title>This text will be very large</title>

نتيجه فايل HTML پس از اعمال تمپليت تعريف شده :

<H1>This text will be very large</H1>

مثال فوق نمونه ساده اي در اين زمينه بوده و در عمل مي توان با استفاده از امکانات موجود، تمپليت هاي بمراتب پيچيده تر و قدرتمندتري را ايجاد نمود.

StyleSheet و افزايش انعطاف پذيري

با تفکيک دستورالعمل هاي فرمت اطلاعات از محتويات اطلاعات و در ادامه استفاده از مکانيزم Stylesheet بمنظور ترکيب آنها با يکديگر ، قابليت هاي فراواني در اختيار علاقه مندان به اين تکنولوژي قرار خواهد گرفت :

مي توان StyleSheet هاي متفاوتي را براي دستگاه هاي متفاوت ( مرورگرها ، PDA ، تلفن ) بر روي محيط هاي اطلاعاتي متفاوت ( online ، چاپ ، CD ) و با اهداف متفاوت ( نمايش مديريتي ، نمايش تکنيکي ) ايجاد نمود .

مي توان يک Stylesheet ايجاد و آن را بر روي سندهاي متعددي اعمال نمود.

مي توان اطلاعات را ويرايش و StyleSheet آنها را يکديگر تفکيک خواهد کرد .

مي توان تمام اطلاعات موجود را ، صرفا" با فشردن با يک کليد ، منتشر کرد.

خلاصه

استانداردهاي اساسي در زمان انتشار سندهاي XML شامل CSS و XSL/XSLT است . مهمترين نکات در رابطه با تکنولوژي هاي فوق ، عبارت است از :

جدا سازي محتويات از فرمت نمايش

نسبت دهي Style به ساختار

استفاده از CSS بمنظور تزئين اطلاعات

استفاده از XSLT در زمانيکه به الگوهاي قدرتمندي نياز است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


XML چيست و چرا داراي اهميت فراوان است ؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۸۹ مراجعه امروز
۴۹۰۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
XML چيست و چرا داراي اهميت فراوان است ؟
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۱/۱۳۸۲ اين مقاله ۵۴۸ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

تاکنون مقالات فراواني در باره XML نوشته شده است، اغلب مطالب عنوان شده صرفا" بر روي يک موضوع خاص تمرکز داشته و از زاويه اي کاملا" اختصاصي و در عين حال محدود به بررسي تکنولوژي XML پرداخته و بندرت به موارد اساسي و خانواده بزرگ استاندارهاي XML اشاره شده است. در اين مقاله عناصر کليدي مرتبط با تکنولوژي XML تشريح و ارتباط آنها تبين و جايگاه هر يک از آنها براي پياده کنندگان و طراحان برنامه هاي اطلاعاتي تشريح مي گردد. پس از مطالعه اين مقاله ، خوانندگان با استانداردهاي کليدي : XML,XSL,XML-Schema,DOM,SAX,Namespace,XLink بهمراه تکنولوژي هاي مربوطه آشنا خواهند شد.
تعريف اصطلاحات و واژه ها
در ابتدا لازم است با کلمات تشکيل دهنده XML يعني Extensible ، Markup و Language آشنا شويم .Markup ، واژه ئي براي متاديتا است . متاديتا ، اطلاعاتي در رابطه با اطلاعات است . قدمت استفاده از Markup به قبل از کامپيوتر بر مي گردد . مثلا" در دنياي نشر از علائم خاصي در متن هاي ويرايش شده استفاده تا به پردازنده متن ( انسان و يا ماشين ) اعلام شود ، چه نوع عملياتي را در رابطه با اطلاعات مي بايست انجام دهد. HTML يکي از زبان هاي کلاسيک نشانه گذاري است . مثلا" با افزودن تگ <Bold> به مرورگر اعلام مي شود که به چه صورت مي بايست اطلاعات نمايش داده شوند .
زبان (Language) ، به مجموعه اي از کلمات معني دار و با مفهوم که عده اي از آنها براي بيان خواسته ها ي خود استفاده مي نمايند ،اطلاق مي گردد . ( مثلا" زبان فارسي و يا انگليسي )
با کنار هم قرار دادن دو واژه اشاره شده ، با زبان نشانه گذاري مواجه خواهيم شد . زبان نشانه گذاري ، به مجموعه اي از کلمات معني دار و با مفهوم که توسط عده اي (با آگاهي لازم انتخاب ) استفاده مي گردد ، اطلاق مي گردد. HTML ، نمونه اي مناسب در اين زمينه است . تمام افرادي که از تگ هاي HTML استفاده مي نمايند ، بدرستي نسبت به مفهوم و جايگاه هر يک از تگ ها آشنائي داشته و با آگاهي کامل آنها را براي بيان خواسته هاي خود استفاده مي نمايند. مثلا" مشخص است که استفاده از تگ <H1> چه نوع پيامدهائي را بدنبال خواهد داشت . تگ فوق ، توسط مولفين صفحات وب آگاهانه انتخاب مي گردد و مرورگرها نيز متناسب با تعاريف از قبل مشخص شده ، واکنش مناسب خود را در رابطه با نحوه نمايش انجام خواهند داد. يک زبان بسط پذير(Extensible) ، زباني است که داراي مکانيزم لازم براي افزودن کلمات بگونه اي است که توسط ساير استفاده کنندگان نيز قابل فهم باشد . در دنياي واقعي و در ارتباط با زبان هاي طبيعي ما هرگز شاهد چنين وضعيتي نخواهيم بود . ( افزودن يک واژه با معني مورد نظر خود و استفاده از واژه با همان معني توسط ساير استفاده کنندگان ) با توجه به تعاريف ارائه شده ، يک زبان نشانه گذاري بسط پذير ، مي بايست يک زبان نشانه گذاري با قابليت افزودن کلماتي بيشتر باشد . در عمل زبان نشانه گذاري بسط پذير ، به سيستمي براي تعريف تمام زبا ن هاي نشانه گذاري با قابليت توسعه وضعيت موجود ، اطلاق مي گردد .
SGML HTML و XML
SGML)Standard Generalize Markup Language) سرچشمه XML بوده و در سال 1988 استاندارد شده است . HTML)HyperText Markup Language) زباني است که در ابتدا با استفاده از SGML تعريف گرديد. HTML يک زبان نشانه گذاري است ، بنابراين انتظار داريم شامل مجموعه اي از تگ ها بمنظور کنترل قالب و رفتار اطلاعات در مستندات باشد . XML ، يک زبان نشانه گذاري مشابه HTML نمي باشد . XML ، زيرمجموعه اي از SGML است ( مکانيزمي براي تعريف زبان هاي نشانه گذاري ) . XML همانند SGML يک زبان نشانه گذاري بسط پذير بوده اما بر خلاف SGML براي استفاده بر روي وب بهينه شده است .
مفاهيم اساسي
لازم است که مجددا" به اين نکته مهم اشاره گردد که XML ، يک زبان نشانه گذاري نبوده و در مقابل مکانيزمي براي ايجاد زبان هاي نشانه گذاري اختصاصي است . XML ، شامل مجموعه اي از استانداردها ي متنوع با کاربردهاي خاص است . XML ، يک زبان نشانه گذاري نبوده و در عين حال يک زبان برنامه نويسي هم نيست . از XML براي ارائه اطلاعات استفاده شده و بمنظور پردازش اطلاعات، مي بايست برنامه هائي نوشته گردد .
از XML در موارد زير مي توان استفاده کرد :
? مبادله اطلاعات بين برنامه هاي نامتجانس ، بنگاه هاي تجاري و بانک هاي اطلاعاتي
? امکان فعال نمودن مدلي براي نمايش اطلاعات يکسان بر روي دستگاههاي متفاوت با اهداف و خوانندگان گوناگون
? يک قالب ذخيره سازي مناسب براي داده ها

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

امکانات موجود
هدف

XML
Namespaces
XML-Schemas
تعريف يک زبان XML
CSS (Cascading Style Sheets)
XSL (Extensible Style Language)
XSLT (XSL Transformations)
فرمت و نمايش سندهاي XML
DOM (Document Object Model)
SAX (Simple API for XML)
XSLT
پياده سازي برنامه
Such as:
SOAP (Simple Object Access Protocol)
SVG (Scalable Vector Graphics)
WML (Wireless Markup Language)
XCBL (XML Common Business Library)
مبادله اطلاعات بين سيستم ها

در ادامه به بررسي هر يک از استانداردهاي فوق و نحوه ارتباط آنها با يکديگر خواهيم پرداخت :

تعريف زبان هاي XML
با استفاده از XML ، مي توان تگ هاي نشانه گذاري را تعريف که توسط مجموعه اي از مستندات که خصايص مشابهي را به اشتراک مي گذارند ،استفاده گردد . مثلا" مجموعه اي از پيام هاي تجارت الکترونيکي. مورد فوق اصطلاحا" document type ناميده مي گردد . ( مشابه يک کلاس در طراحي شي گراء ) . يک Document instance ، نوع خاصي از يک سند است . مثلا" يک ليست فروش خاص . در پروژه هاي XML ، در ابتدا Document types با توجه به اطلاعاتي که مي بايست بر روي آنها عملياتي صورت پذيرد ، طراحي و در ادامه با ايجاد نرم افزارهاي لازم ، اقدام به ايجاد و پردازش نمونه هائي از سند مي گردد . XML مجموعه اي قدرتمند از بلاک هاي ساختماني سطح پايين بمنظور طراحي Document types را ارائه مي نمايد. نمونه سند زير، شامل مجموعه اي اطلاعات از يک بانک اطلاعاتي شخصي است .

مثال : يک سند XML شامل اطلاعات شخصي

<personnel-data>
<person ID="PE1">
<name>
<first-name>Webmaster</first-name>
<last-name>Admin</last-name>
</name>
<working-location office-id="OF1"/>
<title>Web master and administrator</title>
</person>
<office ID="OF1">
<name>Head Office</name>
<address>Iran Avenue</address>
</office>
</personnel-data>

سند فوق شامل چندين بلاک ساختمان اساسي XML است .
? سند فوق ، داراي المان هائي است که قابل مقايسه با اشياء در سيتستم شي گراء و يا فيلد در بانک هاي اطلاعاتي رابطه اي است . يک المان با تگ شروع ، آغاز و با تگ پايان ، خاتمه مي يابد . بين دو تگ شروع و پايان هر نوع اطلاعاتي مي تواند قرار گيرد .
? يک المان مي تواند داراي محتويات باشد. محتويات ، متن موجود بين تگ هاي شروع و پايان است . مثلا" Webmaster و Admin بعنوان محتويات المان در مثال فوق مشاهده مي گردند.
? يک المان داراي خصلت است . خصلت ، شامل اطلاعات تکميلي بوده که در بخش تگ شروع مربوط به المان بصورت : نام و مقدار قرار مي گيرند . در مثال فوق ID و office-id ، بعنوان خصلت مطرح بوده و محتويات آنها PE1 و OF1 ، بعنوان مقادير خصلت در نظر گرفته مي شوند .
? يک المان مي تواند تهي (Empty) باشد. در مثال فوق <Working-location> يک المان تهي است . معمولا" المان هاي تهي ، بعنوان فضا نگهدارنده هائي براي خصلت ها مي باشند.
? المان ها مي توانند شامل ساير المان ها باشند . ( المان هاي تودرتو ) . از المان هاي تودر تو براي ارائه اطلاعات سريال ( مجموعه اي از اشياء ، سطرهائي از داده و يا ساير اطلاعات مورد نظر ) استفاده گردد .
? خصلت مي تواند شامل ساير خصلت ها ويا المان ها باشد .
? محتويات المان ها و يا مقادير خصلت ها ، مي توانند بعنوان يک اشاره گر به ساير آيتم هاي موجود در سند نيز ايفاي وظيفه نمايند.بمنظور نيل به هدف فوق XML روش هاي متعددي را ارائه نموده است . مثلا" خصلت office-id با مقدار OF1 ، درون <working-location > به خصلت ID المان <office> اشاره مي نمايد. اشاره گره هاي فوق مشخص مي نمايند که محل کار شخص PE1 در OF1 است .
بلاک هاي ايجاد يک سند XMl در عين سادگي ، داراي انعطاف و قدرت لازم بمنظور حمايت از روش هاي متفاوت مدل سازي اطلاعات مي باشند : اشياء ، شبکه اي ، سلسله مراتبي، رابطه اي و ...
خوش شکل ( Well-Formed ) و معتبر ( Valid )
با استفاده از XML ، مي توان اقدام به ايجاد سندهاي رسمي و غيررسمي نمود. در پروژه هاي کوچک و يا زمانيکه قصد نمونه سازي وجود داشته باشد ، مي توان با سرعت اقدام به ايجاد سندهاي "خوش شکل" نمود . در پروژه هاي بزرگ و يا پروژه هائي که شامل سيستم هاي متعددي مي باشند، سندهاي معتبر ايجاد مي گردد.
قوانين يک سند خوش شکل
? وجود صرفا" يک المان ريشه
? هر المان غيرتهي داراي تگ هاي شروع و پايان است .
? تمام المان هاي مي بايست با نظم خاصي تودرتو شده و هيچگونه تقابلي بين آنها وجود نداشته باشد.
يک سند XML زماني معتبر است که اولا" خوش شکل بوده و ثانيا" :
? داراي يک Schema ( پيش نويس ) و يا DTD)Document Type Definition) باشد.
? سازگار با قوانين موجود در Schema
پيش نويس ها (Schemas) باعث اعتبار و صحت يک سند XML مي گردند.
واژه Schema ، به قوانيني اطلاق مي گردد که به مجموعه اي از سندهاي با ساختار مشابه ، نسبت داده مي شود . واژه فوق مختص XML نبوده و در ساير موارد از واژه فوق نيز استفاده مي گردد . در رابطه با XML قوانين موجود به موارد زير اشاره خواهند داشت :
? از چه المان ها و خصلت هائي استفاده شده است ؟
? نحوه استقرار المان ها و خصلت ها به چه صورت است ؟
? هر يک از المان ها و يا خصلت ها شامل چه نوع اطلاعاتي مي توانند باشند .
XML براي تعريف پيش نويس ها (Schemas) از دو زبان استفاده مي نمايد : DTD و XML-Schema
DTD ، مکانيزمي براي تعريف پيش نويس ها بوده که در ابتدا بمنظور استفاده در SGML طراحي و در ادامه XML نيز از آن استفاده کرد . محوريت DTD بر سند استوار بوده و داراي امکانات و ويژگي هاي لازم نظير : نوع داده ها ، دامنه ها و ... نمي باشد. گرامر استفاده شده در DTD کاملا" اختصاصي بوده و ابزارهاي اندکي بمنظور پردازش آنها وجود دارد .
XML-Schema ، يک استاندارد جديد بوده که مختص XML طراحي شده است . گرامر استفاده شده مبتني بر XML است . تکنولوژي فوق بدرستي محدوديت هاي DTD را برطرف نموده و اکثر ابزارهاي توليد شده توسط عرضه کنندگان معتبر ، مجهز به تکنولوژي فوق مي باشند. به افراديکه جديدا" به دنياي XML وارد شده اند ، توصيه مي گردد که در صورت امکان گرامر DTD را فراموش و خود را با استاندارد XML-Schema وفق نمايند .
چه زمان اعتبار لازم است ؟
سندهاي "خوش شکل" ، بسرعت آماده شده و بسادگي استفاده مي گردند. تاکنون نرم افزارهاي متعددي نوشته شده که در آنها از سندهاي " خوش شکل" ، استفاده شده است . با اين اوصاف ،چه زمان مي بايست از يک پيش نويس (Schema) رسمي استفاده کرد ؟ در پاسخ به سوال فوق مي توان گفت که " پيش نويس ها باعث ارائه صلاحيت لازم بمنظور پردازش هاي مبتني بر داده ها مي باشند . بدين ترتيب و در زمانيکه اطلاعات موجود در يک سند XML ، توسط يک پردازنده Schema ، پردازش مي گردد، اطلاعاتي حذف و يا ناديده گرفته نخواهند شد. در اين راستا از پيش نويس هاي نوشته شده بمنظور : بررسي صحت محتويات، مقادير پيش فرض براي المان ها ، ارائه کمک در زمان ويرايش يک سند XML ، ترجمه از يک فرمت XML به فرمت ديگر ، استفاده مي گردد .
در اين راستا ، مي توان کدهائي را نوشت که تمام عمليات فوق را انجام دهند ولي کدهاي نوشته شده محدود به يک نوع سند خاص خواهند بود . اطلاعات موجود در پيش نويس اين امکان را فراهم مي آورند ، که با نوشتن يک پردازنده پيش نويس از آن در سندهاي متفاوت بدون نياز به برنامه نويسي مجدد استفاده کرد . سندهاي شامل پيش نويس ، با يک فرمت استاندارد ايجاد و بسادگي امکان اشتراک آنها فراهم مي گردد .
Namespace مشکل تصادم اسامي را برطرف مي نمايند
در زمان عمليات بر روي سندها و برنامه هاي مبتني بر XML ، بدفعات نياز به ترکيب دو سند مجزا و ايجاد سند جديد احساس خواهد شد. با انجام هدف فوق، با چالش هاي جدي در رابطه با تصادم (Conflict) اسامي برخورد خواهيم کرد : المان هائي که داراي تگ هاي يکسان ولي معاني متفاوت مي باشند .
مثلا" فرض نمائيد ، بخواهيم سندي که داراي يک تگ <title> ( تگ فوق به عنوان شغلي يک فرد اشاره دارد ) است را با سند ديگر که او هم داراي يک تگ <title> ( تگ فوق به عنوان يک فيلم اشاره دارد ) است را بايکديگر ترکيب نمائيم . زمانيکه تگ هاي فوق در سند هاي مجزا بوده و يا حتي در يک سند يکسان قرار داشته باشند با مشکلاتي مواجه نخواهيم شد ( در اين حالت قصد پردازش اتوماتيک بر روي المان هاي <title> را نداريم ) مشکل از زماني شروع مي گردد ، که کدهائي بمنظور پردازش اتوماتيک بر روي المان هاي <title> نوشته گردد . در چنين حالتي لازم است از نوع تگ آگاهي لازم را پيدا کرد .
بمنظور حل مشکل فوق از XML Namespace استفاده مي گردد . Namespace ،مکانيزمي است که بهمراه يک سند تعريف ، تا ارتباط مفهمومي مجموعه اي از عناصر با يکديگر را مشخص نمايد. بدين ترتيب براي هر المان محدوده و يا فضائي تعريف و بر همين اساس با آنها برخورد عملياتي خواهد شد. براي هر Namespace مي توان يک شناسه تعريف و در ادامه با استفاده از شناسه تعريف شده بصورت پيشوند در کنار نام المان تکليف عملياتي المان را مشخص کرد. مثلا" مي توان يک NameSpace بصورت زير تعريف کرد :

Xmlns:Tehran=www.yourc ompany.com/test1

در ادامه مي توان در سند مربوطه ، بصورت :<Tehran:Test1> به آن مراجعه کرد . بدين ترتيب شما و يا برنامه مورد نظر ، براي پردازش آگاهي لازم را پيدا خواهد کرد . ( تگ مورد نظر از Namespace تعريف شده مشتق مي گردد )
خلاصه
در اين مقاله به سه استاندارد لازم بمنظور تعريف نوع سندهاي XML اشاره گرديد : XML ، NameSpace و XML-Schema ( و يا DTD) . بمنظور تعريف يک نوع سند XML ، عمليات زير مي بايست دنبال گردد :
? مدل سازي اطلاعات مورد نطر
? نمونه سازي با استفاده از سندهاي XML "خوش شکل "
? در صورت نياز تعريف يک پيش نويس (Schema) رسمي
? استفاده از Namespace بمنظور ترکيب اطلاعات از منابع متفاوت

کيفيت مقاله :
عالی خوب متوسط ضعيف


شيء Response ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۸۹ مراجعه امروز
۵۲۰۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
شيء Response
نويسنده : مديريت سايت
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۱/۱۳۸۲ اين مقاله ۳۰۶۰ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.
براي پاسخ گويي به مرورگر ، از متدهاي شيء Response استفاده مي شود . در واقع شيء Response راهي براي برقراري ارتباط با سرويس گيرنده است .

شيء Scripting Context :
اين شيء امكان دسترسي اشياء ActiveX خارجي به اشياء دروني ASP را فراهم مي كند. البته بهتر است به جاي اين شيء از شيء Object Context استفاده كنيد . براي گرفتن شيء Object Context نيز بايد متد Object Context() را فراخواني كنيد .
شيء Scripting Context ، تمام اشياء ASP را درون خود جمع مي كند . هنگامي كه يك صفحه ASPكه شامل رفرنس هايي به اشياء ActiveX مي باشد اجراء ميشود ، ابتدا موتور ASP متد On Start Page هر يك از آن اشياء ActiveX را فراخواني كرده و شيء Scripting Context را به عنوان پارامتر به آن مي فرستد. اشياء ActiveX با استفاده از اين پارامتر مي توانند اشاره گر هايي به اشياء Server ، Application ، Request و Response به دست آورند. در اين جا ليستي از ويژگي هاي شيء Scripting Context را ملاحظه مي كنيد :
• Server
• Application
• Session
• Request
• Response

هر يك از اين 5 ويژگي يك اشاره گر ( Pointer ) به يكي از اشياء دروني ASP بر مي گردانند .
• توجه : Microsoft توصيه مي كند كه به جاي استفاده از شيء Scripting Context از متد
get Object Context اگر چه امكان استفاده از شيء Scripting Context كماكان وجود دارد، ولي بايد بدانيد كه اين شيء از رده خارج شده و در برنامه هاي جديد خود نبايد از آن استفاده كنيد .

شيء Object Context :
شيء Object Context به عنوان پل ارتباطي با MTS ( Microsoft Transaction Server ) تلقي مي شود. با MTS شما مي توانيد كاري كنيد كه اشياء ActiveX در تراكنش هايي كه صفحه ASP آغاز شده اند شركت كنند. همچنين با استفاده از شيء Object Context در هنگام نوشتن اشياء ActiveX مي توانيد به اشياء دروني ASP دسترسي پيدا كنيد .
آشنايي با ساختار يك برنامه ASP
از نظر موتور ASP ، يك برنامه كاربردي عبارت است از مجموعه اي از تمام فايل و زير دايركتوري هاي ( Subdirectory ) موجود در يك دايركتوري كه شامل فايل Global . asa باشد . بيشتر برنامه هاي كاربردي ASP شامل فايل هاي ASP و فايل هاي Include ( با پسوند .inc ) هستند كه هر دوي آنها مي توانند تركيبي از HTML ، كد و فايل هاي گرافيكي باشند. البته شما مي توانيد فايل هاي ASP را با فايل هاي HTML يا هر فايل ديگري كه براي سرويس دهنده قابل شناسايي باشد تركيب كنيد .
شكل زير ساختار يك برنامه كاربردي ASP نمونه را نشان مي دهد:
شكل صفحه 25

بالاترين دايركتوري در اين ساختار شامل فايل Global . asa است . اين فايل دايركتوري ريشه ( Root Directory )
برنامه كاربردي را مشخص مي كند .
اولين باري كه يك كاربر يكي از فايل هاي ASP موجود در يكي از دايركتوري هاي برنامه را درخواست مي كند ، موتور ASP ساختار درختي درختي دايركتوري ها را به سمت بالا طي ميكند تا فايل Global . asa را پيدا كند و يا به ريشه وب ( Root Web Directory ) برسد . اين نكته از اهميت زيادي برخوردار است ، چون اگر شما چند برنامه كاربردي را درون هم قرار دهيد ( كه به آنها برنامه هاي كاربردي تودرتو – Nested Applications - مي گويند ) ، فايل Global . asa كه براي هر درخواست كاربر اجرا مي شود بستگي دارد به اين كه كاربر ابتدا كدام فايل را درخواست نمايد . چون نمي توان اولين درخواست كاربر را كنترل نمود ، بهتر است برنامه هاي ASP را درون هم قرار ندهيد ؛ مگر اين كه دليل موجهي براي اين كار داشته باشيد .
ساختن يك برنامه كاربردي وب تحت IIS 4.0 به يك مرحله ديگر نيز دارد : شما بايد به IIS بگوييد كه دايركتوري مجازي ( Virtual Directory ) در برگيرنده فايل Global . asa ، دايركتوري ريشه برنامه كاربردي است .
صرف نظر از اين كه كدام فايل درخواست شود، فايل Global . asa همواره اولين فايلي خواهد بود كه اجرا ميشود. بنابراين اگر در نظر داريد كاربر برنامه كاربردي شما را با صفحه خاصي كه مورد نظر شماست آغاز كند ، اين فايل بهترين جايي است كه ميتوانيد مرورگر را به آن صفحه هدايت كنيد .
برنامه كاربردي كه درشكل قبل ملاحظه فرموديد ، شامل چندين فايل ASP و دو زيردايركتوري به نام هاي images و include مي باشد. البته از نظر تعيين ساختار دايركتوري هاي يك برنامه كاربردي هيچ محدوديتي وجود ندارد ؛ شما مي توانيد همه فايل ها را درون يك دايركتوري قرار دهيد . ولي در عمل ، بهتر است كه فايل ها را بر اساس كارايي آنها دسته بندي كنيد چون اين كار ساختن و نگهداري برنامه را بسيار آسان تر مي كند .
• توجه : دايركتوري ريشه وب و دايركتوري ريشه برنامه ASP لزوما نبايد يكسان باشند. به عنوان مثال ،
مي توانيد براي چندبرنامه كاربردي ASP ازيك فايل Global . asa استفاده كنيد. در اين شرايط مي توانيد فايل Global . asa را درون يك دايركتوري قرار داده و سپس هر يك از زير دايركتوري هاي درون آن را به عنوان يك دايركتوري مجازي تعريف كنيد كه بر اساس برنامه كاربردي مربوطه نامگذاري شده اند . ساختار دايركتوري موجود در شكل زير ، شامل 4 برنامه كاربردي است : 401k ، Paycheck ، Retirement ، Timesheet .شكل صفحه 26
بالاترين دايركتوري ، كه HR Applications نام دارد، شامل فايل Global . asa است . هر زمان كه يك كاربر به يكي از 4 برنامه كاربردي موجود متصل شود ، موتور ASP ساختار درختي دايركتوري هارا بالا مي رود تا به دايركتوري
HR Applications كه در بر گيرنده فايل كه Global . asa است برسد . يكي از دلايلي كه مي توان براي مرتب كردن برنامه ها به اين شكل در نظر گرفت ، اين است كه ممكن است هر چهار برنامه از يك روش امنيتي استفاده كنند و يا ممكن است تمام برنامه ها از يك نوع روش براي برقراي ارتباط با پايگاه داده و يا از يك پايگاه داده مشترك استفاده كنند و شما بخواهيد اطلاعات اوليه را در فايل Global . asa تنظيم كنيد .

استفاده از فايل هاي Include :
براي جلوگيري از تكرار كد يا دستورات HTML در صفحات ASP ، مي توانيد از فايل هاي خارجي استفاده كرده و آنها را در صفحات ASP خود بگنجانيد . يك فايل Include در يك فايل ASP از دستور INCLUDE استفاده مي شود . دستور INCLUDE مشابه اين است كه محتويات فايل include مورد نظر را درون يك صفحه ديگر قرار دهيد.در اين جا مثالي از يك دستور INCLUDE را مشاهده مي كنيد :
<!--# INCLUDE = “C:\ include \my Include .inc” -- >

اين دستور سبب مي شود كه سرويس دهنده آن را با محتويات فايل مشخص شده جايگزين كند. دو نوع دستور INCLUDE موجود است : يكي # INCLUDE FILE و ديگري # INCLUDE VIRTUAL . نوع اول براي مشخص كردن فايل به يك آدرس فيزيكي نياز دارد در حالي كه نوع دوم به آدرس مجازي به فايل اشاره مي كند . به هر حال از هر روشي كه استفاده كنيد، موتور ASP قبل از شروع پردازش دستورات ، آن را با محتويات فايل مورد نظر جايگزين مي كند . بنابر اين براي گنجانيدن يك فايل نمي توانيد از دستورات شرطي استفاده كنيد . به عنوان مثال ، كد زير به گونهاي كه انتظار مي رود عمل نخواهد كرد ؛ موتور ASP هر دو فايل را خواهد گنجاند :
< %
if my Var = True than
% >
< ! -- # INCLUDE FILE = “ C: \ include \ my Include . inc” -- >
< %
else
%>
< ! -- # INCLUDE FILE = “ C: \ include \ your Include . inc” -- >
< %
end if
% >
هنگامي كه موتور ASP اين فايل را تحليل مي كند ، دو دستور INCLUDE را با فايل هاي نامبرده جايگزين مي كند و اين كار را قبل از اجراي دستور if…end if انجام مي دهد . پس باز هم تاكيد مي كنم : شما با استفاده از كد نمي توانيد براي موتور ASP تعيين كنيد كه كدام فايل را بگنجاند و يا اين كه اصلا يك فايل را بگنجاند يا خير.

کيفيت مقاله :
عالی خوب متوسط ضعيف


MSN مسنجر چگونه کار می کند؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۵۴ مراجعه امروز
۴۷۷۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
MSN مسنجر چگونه کار می کند؟
نويسنده : مديريت سايت
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۱/۱۳۸۲ اين مقاله ۶۵۱ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

اتصال
اولين قدم براي اتصال برقراري ارتباط با dispatch سرور مي باشد. ابندا يک سوکت tcp با مشخصات آدرس messenger.hotmail.com و شماره پورت 1836 باز کنيد. وقتي اتصال برقرار گرديد دستور ver را با يکي از پارامترهاي MSNP7 – MSNP6 – MSNP5 – MSNP4 –CVR0 ارسال کنيد. اين پارامتر شماره نسخه پروتکل ارتباطي مي باشد. من پيشنهاد مي کنم که از MSNP2 استفاده کنيد. وقتي که پاسخ از سرور دريافت کرديد اگر اولين مقدار بعد از کد يکتا اتصال مخالف با صفر بود بدين معني است که سرور کد نسخه پروتکل شما را قبول کرده است. سپس دستور INF را براي دريافت اطلاعات تصديق اتصال ارسال مي کنيم. در پاسخ سرور يک دستور INF همراه با يک کد MD5 ارسال مي کند که براي ما به صورت يکتا در نظر گرفته است. سپس ما دستور user همراه با پارامتر MD5 I myuser@hotmail ارسال مي کنيم . توجه داشته باشيد که myuse@hotmail گذرنامه عبور ( کد کاربري) ما مي باشد.
در اين زمان سرور با يک دستور XFR همراه با پارامتر NS w.x.y.z:1836 0 A.B.C.D:1836 پاسخ ما را ارسال مي کند. پارامترهاي دريافتي يکي w.x.y.z:1836 شماره سوکت Notification سرور مي باشد و ديگري A.B.C.D:1836 شماره سوکت فعلي مي باشد. حالا ما اتصال فعلي را قطع مي کنيم و با سرور Notification که توسط سرور بدست آورده ايم اتصال برقرار مي کنيم.
در زير يک گفتگو بين ما ( Client) و سرور Dispatch را مي بينيد.
Connect: messenger.hotmail.com 1863
>>> VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVR0
<<< VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVR0
>>> INF 1
<<< INF 1 MD5
>>> USR 2 MD5 I example@passport.com
<<< XFR 2 NS 207.46.106.145:1863 0 207.46.104.20:1863
Client Disconnects
Notification Server
برقراري با Notification سرور عينا" مثل برقراري ارتباط با Dispatch سرور مي باشد. دقيقا تا مرحله قبل از پاسخ سرور با دستور XFR. مثل dispatch سرور بايد عمل کنيم. در اين مرحله سرور با دريافت دستور USR همراه با کد کاربري ما منتظر کلمه عبور مي ماند. در اين لحظه ما يک دستور USR ديگر به شکل زير ارسال مي کنيم.
USR MD5 S #.#
در اين دستور پارامتر S به سرور مي گويد که اين دستور حامل کلمه عبور مي باشد و #.# همان کلمه عبور ما مي باشد که با MD5 کد شده است. در اين لحظه سرور با دستور
OK user@host Name 1
پاسخ ما را ميدهد. در صورتي که مشکلي در اتصال باشد کد خطاي 911 از طرف سرور مي آيد.
در دستور OK بازگشتي از سرور user@host کد کاربري و Name اسم اسکرين ما مي باشد.
در اين لحظه در صورت دريافت دستور ok از طرف سرور ما به MSN مسنجر وارد شده ايم و بايد وضعيت فعلي خود را ارسال کنيم. با استفاده از دستور CHG و پارامتر 3 حرفي وضعيت خود را در زمان اتصال مشخص مي کنيم. سرور نيز دقيقا دستور ارسالي را براي تاييد وضعيت ارسال مي کند. در حالت عادي اتصال پارامتر NLN ارسال مي گردد. کلا 9 پارامتر براي دستور CHG وجود دارد. به طور مثال اگر با پارامتر HDN دستور CHG را ارسال کنيد ما به صورت مخفي وارد مسنجر مي شويم.
در زير يک گفتگو بين ما ( client) و Notification سرور را مي بينيم.
Connect: 207.46.106.145 1863
>>> VER 3 MSNP7 MSNP6 MSNP5 MSNP4 CVR0
<<< VER 3 MSNP7 MSNP6 MSNP5 MSNP4 CVR0
>>> INF 4
<<< INF 4 MD5
>>> USR 5 MD5 I example@passport.com
<<< USR 5 MD5 S 1013928519.693957190
>>> USR 6 MD5 S 23e54a439a6a17d15025f4c6cbd0f6b5
<<< USR 6 OK example@passport.com My%20Screen%20Name 1
>>> CHG 7 NLN
<<< CHG 7 NLN
ادامه اتصال

اولين پيامها
بعد از برقراري ارتباط با سرور مسنجر از طرف سرور 2 پيام براي ما ارسال مي گردد اولين پيام شامل پروفايل ما مي باشد و دومين پيام در صورتي که ما در صندوق پست الکترونيکي خود نامه اي داشته باشيم که هنوز نخوانده باشيم ارسال مي گردد. اطلاعات ارسالي از سرور که شامل پروفايل ما مي باشد داراي يک مايم تايپ مي باشد. اين مايم تايپ از نوع
text/x-msmsgsprofile
,و به صورت يونيکد مي باشد
يک نمونه از پروفايل ارسالي از طرف سرور به شکل زير مي باشد.
MSG Hotmail Hotmail 363
MIME-Version: 1.0
Content-Type: text/x-msmsgsprofile; charset=UTF-8
LoginTime: 1016941010
EmailEnabled: 1
MemberIdHigh: 41922
MemberIdLow: -619232012
lang_preference: 1033
preferredEmail: example@passport.com
country: US
PostalCode: 12345
Gender: M
Kid: 0
Age:
sid: 507
kv: 2
MSPAuth: 2AAAAAAAADMoV8ORoz64BVwmjtksIg!kmR!Rj5tBBqEaW9hc4YnPHSOQ$$

پيام هشدار وجود پست الکترونيکي با مايم تايپ
text/x-msmsgsinitialemailnotification;.
ارسال مي گردد.يک نمونه از پيام ارسالي از طرف سرور براي هشدار وجود ايميل جديد به شکل زير مي باشد.
MSG Hotmail Hotmail 223
MIME-Version: 1.0
Content-Type: text/x-msmsgsinitialemailnotification; charset=UTF-8

Inbox-Unread: 21
Folders-Unread: 33
Inbox-URL: /cgi-bin/HoTMaiL
Folders-URL: /cgi-bin/folders
Post-URL: http://www.hotmail.com
بعد از برقراري ارتباط اگر در طول مدت اتصال ايميل جديدي براي شما ارسال گردد يک پيام از سمت سرور به شکل زير براي ما ارسال مي گردد.
MSG Hotmail Hotmail 340
MIME-Version: 1.0
Content-Type: text/x-msmsgsemailnotification; charset=UTF-8

From: Mike Mintz
Message-URL: /cgi-bin/getmsg?msg=MSG1029401739.3&start=1610592&len=402&curmbox=ACTIVE
Post-URL: https://lc1.law13.hotmail.passport.com/ppsecure/domessengerlogin/EN
Subject: Hi
Dest-Folder: ACTIVE
From-Addr: example@passport.com
id: 2
در زماني که يک نامه الکترونيکي پاک شود پيام زير از طرف سرور ارسال مي گردد.
MSG Hotmail Hotmail 145
MIME-Version: 1.0
Content-Type: text/x-msmsgsactivemailnotification; charset=UTF-8

Src-Folder: ACTIVE
Dest-Folder: trAsH
Message-Delta: 1
خوب حالا ارتباط ما برقرار است اگر کساني که در ليست دوستان ما هستند تغيير وضعيت دهند سرور تغيير وضعيت ايشان را با دستور ILN به ما اطلاع مي دهد.سرور اين دستور را با 3 پارامتر کد وضعيت , کد کاربري , و نام اسکرين براي ما ارسال مي کند.
يک نمونه از پيام ارسالي از طرف سرور به شکل زير مي باشد.
<<< ILN 7 AWY example@passport.com Mike
<<< ILN 7 NLN name_123@hotmail.com Name_123
<<< ILN 7 BSY myname@msn.com My%20Name
اميدوارم که از اين مقاله هم استفاده کرده باشيد در مقالات بعدي به مباحث پيشرفته تري خواهيم پرداخت.

کيفيت مقاله :
عالی خوب متوسط ضعيف


DOM چيست ؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۳۸ مراجعه امروز
۵۱۵۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
DOM چيست ؟
نويسنده : مديريت سايت
موضوع : DHTML [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۱/۱۳۸۲ اين مقاله ۲۰۲۹ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.

DOM)Document Object Model) يک رابط برنامه نويسي براي سندهاي XML و Html است . با استفاده از اينترفيس فوق، نحوه دستيابي و انجام پردازش هاي لازم در رابطه با سند هاي XML و Html فراهم مي گردد . برنامه نويسان با استفاده از DOM ، قادر به ايجاد يک سند ،حرکت در طول ساختار سند، افزودن ، اصلاح و يا حذف المان هاي يک سند XML و يا Html مي باشند . DOM توسط کنسرسيوم وب استاندارد و بمنظور استفاده از طريق زبان هاي برنامه نويسي متعددي طراحي شده است .
گره ها
برنامه اي با نام پارسر، امکان استقرار يک سند XML در حافظه را فراهم مي نمايد . پس از استقرار سند در حافظه ، اطلاعات مربوطه بکمک DOM ، قابل بازيابي و پردازش خواهد بود . DOM ، يک نمايش شبه درختي از يک سند XML را ايجاد مي نمايد . المان Document ، داراي بالاترين سطح در درخت ايجاد شده است . المان فوق ، داراي يک و يا چندين فرزند است . يک اينترفيس گره ، امکان خواندن و يا نوشتن المان هاي خاصي در ساختار درختواره اي يک سند XML را ميسر مي نمايد .با استفاده از خصلت ChildNodes مربوط به المان Document و بکارگيري يک حلقه تکرار مي توان هر يک از گره ها را انتخاب و در ادامه عمليات مورد نظر در رابطه با آن را انجام داد . پارسر شرکت ماکروسافت (MSXML) ، داراي توابع متفاوت بمنظور حرکت در طول درخت، دستيابي به گره ها بهمراه خصلت مربوطه، درج و حذف گره ها و تبديل ساختار درختي به شکل اوليه XML است . در حال حاضر، سيزده نوع متفاوت گره توسط پارسرشرکت ماکروسافت، حمايت مي گردد . جدول زير متداولترين نوع گره ها را نشان مي دهد .

مثال
نوع گره

<!DOCTYPE food SYSTEM "food.dtd">
Document type
<?xml version="1.0"?>
Processing instruction
<drink type="tea">Irani</drink>
Element
type="tea"
Attribute
Irani
Text

استفاده از پارسر
بمنظور خواندن، ويرايش و يا ايجاد و پردازش يک سند XML ، مي بايست از يک پارسر استفاده کرد . پارسر شرکت ماکروسافت، يک عنصر مبتني بر COM بوده که بهمراه IE نسخه پنج ، ارائه شده است . پس از نصب مرورگر فوق، امکان استفاده از پارسر فراهم مي گردد . پارسر MSXML ، داراي امکانات متعدد برنامه نويسي بمنظور استفاده توسط زبانهاي زير است :

حمايت از جاوااسکريپت VBScript Perl جاوا و ++ C

حمايت از استاندارد کنسرسيوم وب و XML DOM

حمايت از DTD و معتبر سازي

مثال : نحوه ايجاد شي Document ، با استفاده جاوااسکريپت ، VBscript و ASP در جدول زير نشان داده شده است :

مثال
تکنولوژي

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
Javascript
set xmlDoc = CreateObject("Microsoft.XMLDOM")
VBscript
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
ASP

استقرار يک سند XML در حافظه
کدهاي زير نحوه استقرار يک سند XML با نام Test.xml در حافظه را نشان مي دهد :

استقرار يک سند XML در حافظه

<script language="JavaScript">
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("Test.xml")
// ....... پردازش هاي لازم
</script>

اولين خط در اسکريپت هاي فوق ، يک نمونه از پارسر XML شرکت ماکروسافت را ايجاد مي نمايد . در دومين خط ، به پارسر اعلام مي گردد منتظر دريافت کامل سند XML بوده قبل از اينکه پردازش خود را آغاز نمايد . در سومين خط ، به پارسر اعلام شده است که يک سند XML با نام Test.xml را در حافظه مستقر نمايد .

استقرار متن XML در پارسر
کدهاي زير، نحوه استقرار يک رشته متن را در پارسر XML نشان مي دهد . در مثال فوق از متد LoadXML در مقابل متد load استفاده شده است . از متد loadXML بمنظور استقرار يک رشته متن در پارسر استفاده مي گردد .

استقرار يک رشته متن XML در حافظه

<script language="JavaScript">
var text="<note>"
text=text+"<to>Ali</to><from>Reza</from>"
text=text+"<heading>Reminder</heading>"
text=text+"<body>Don't forget me this weekend!</body>"
text=text+"</note>"
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.loadXML(text)
// ....... پردازش هاي لازم
</script>

شي ParseError
خطاي مربوط به فايل : با استفاده از شي ParseError ، مي توان از کد ، متن خطاء و حتي شماره خطي که خطاء در آن اتفاق افتاده است ، آگاهي يافت . در برنامه زير پارسر، سعي در استقرار سندي XML در حافظه نموده که وجود خارجي ندارد . پس از تشخيص خطاء ، برخي از خصلت هاي مربوط به خطاء در خروجي نمايش داده خواهد شد .

تشخيص خطاء و استفاده از شي ParseError در رابطه با وجود يک فايل

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("Test1.xml")
document.write("<br>Error Code: ")
document.write(xmlDoc.parseError.errorCode)
document.write("<br>Error Reason: ")
document.write(xmlDoc.parseError.reason)
document.write("<br>Error Line: ")
document.write(xmlDoc.parseError.line)

خطاي مربوط به XML . فرض کنيد يک سند XML که "خوش شکل " نمي باشد، توسط پارسر خوانده شود . کدهاي زير نحوه تشخيص و برخورد با خطاء را نشان مي دهد :

تشخيص خطاء و استفاده از شي ParseError در رابطه با سند "خوش شکل "

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("note_error.xml")
document.write("<br>Error Code: ")
document.write(xmlDoc.parseError.errorCode)
document.write("<br>Error Reason: ")
document.write(xmlDoc.parseError.reason)
document.write("<br>Error Line: ")
document.write(xmlDoc.parseError.line)

خصلت هاي ParseError

عملکرد
خصلت

کد خطاي بوجود آمده ، برگردانده مي شود .
errorCode
علت خطاي بوجود آمده ،برگردانده مي شود .
reason
شماره خط خطاي بوجود آمده ، برگردانده مي شود
line
محل بروز خطاء در خط مربوطه را برمي گرداند .
linePos
رشته اي که شامل خط مربوط به خطاي بوجود آمده است، برگردانده مي شود
srcText
url مربوط به سند مستقر سده در حافظه ، بر گردانده مي شود .
url
محل بروز خطاء در فايل مربوطه، برگردانده مي شود .
filePos

حرکت در طول درخت
يکي از متداولترين روش هاي بازيابي المان هاي يک سند XML ، حرکت در طول درخت ( از گره اي به گره ديگر ) و استخراج مقدار متن ذخيره شده بهمراه هر يک از المان ها است . کدهاي نوشته شده زير ، امکان حرکت در طول يک درخت XML را فراهم و در ادامه هر يک از المان هاي سند XML ، در خروجي نمايش داده مي شوند ( کدها با استفاده از VBScript نوشته شده اند ) .

حرکت در طول درخت و نمايش المان هاي يک سند XML

set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("note.xml")
for each x in xmlDoc.documentElement.childNodes
document.write(x.nodename)
document.write(": ")
document.write(x.text)
next

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

نمايش داده هاي موجود در يک سند XML با استفاده از جاوااسکريپت

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("note.xml")
nodes = xmlDoc.documentElement.childNodes
to.innerText = nodes.item(0).text
from.innerText = nodes.item(1).text
header.innerText = nodes.item(2).text
body.innerText = nodes.item(3).text

دستيابي به المان ها از طريق نام
رنامه زير داده هاي موجود در يک سند XML را خوانده و آنها را با فرمت Html در خروجي نمايش خواهد داد .

دستيابي به المان ها د ر يک سند XML از طريق نام و بکمک جاوااسکريپت

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("note.xml")
document.write(xmlDoc.getElementsByTagName("from").item(0).text)

منبع سخاروش
کيفيت مقاله :
عالی خوب متوسط ضعيف


نحوه برقراری ارتباط با پروتکل Yahoo Messenger ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۴۵ مراجعه امروز
۴۱۶۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نحوه برقراری ارتباط با پروتکل Yahoo Messenger
نويسنده : مديريت سايت
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۱/۱۳۸۲ اين مقاله ۲۹۲۲ بار مطالعه شده است
۲۵ نفر تا به حال به اين مقاله رای داده اند.

در اين مقاله ميخواهم نحوه برقراري ارتباط با پروتکل ياهو مسنجر يکي ازمعروفترين و مهمترين مسنجرهاي اينترنتي را بيان کنم. در صورتي که علاقه منديد که با Msn مسنجر ارتباط برقرار کنيد مي توانيد از مقالات ديگر که در اين زمينه نوشته ام در همين سايت استفاده کنيد. براي برقراري با پروتکل ياهو مسنجر بايد با دستورات و روش برقراري ارتباط با آن مطلع باشيم. ولي در حال حاضر نمي خواهم به نکات ريز و نحو دستورات اين پروتکل بپردازم . بلکه يک برنامه در دلفي مينويسيم که با استفاده از آن بشود با ياهو مسنجر ارتباط برقرار کرد و از مزاياي آن استفاده کرد. در اين مثال از کمپوننتهاي ايندي Indy استفاده کرده ام ولي شما مي توانيد بر حسب نياز يا سليقه خود از هر کمپوننت ارتباطي ديگري براي برقراري ارتباطات tcp/ip استفاده کنيد.
کد دلفي
<-------------------------------BEGIN UNIT CODE ------------------------------>
unit YahooLogin;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, idGlobal;

type
TForm1 = class(TForm)
HTTP: TIdHTTP;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Button1: TButton;
ListBox1: TListBox;
Label3: TLabel;
ListBox2: TListBox;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FRemoteFile: TStringList;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

const
LoginURL = 'http://msg.edit.yahoo.com/config/ncclogin?&n=1&login=%s&passwd=%s';

procedure TForm1.Button1Click(Sender: TObject);
var
Tmp, UserName, Password: String;
i, BuddyBegin, BuddyEnd: Integer;
begin
if (Edit1.Text = '') or (Edit2.Text = '') then
raise Exception.Create('Login/Password cannot be blank');

UserName := URLEncode(Edit1.Text);
PassWord := URLEncode(Edit2.Text);
Tmp := Format(LoginURL, [UserName, PassWord]);

FRemoteFile.Text := Http.Get(Tmp);

if FRemoteFile[0] = 'OK' then
begin
for i := 0 to HTTP.Response.ExtraHeaders.Count -1 do
if pos('Set-Cookie', HTTP.Response.ExtraHeaders[i]) > 0 then
begin
//We only care about the first cookie
ShowMessage('Received Cookie: '+ Copy(HTTP.Response.ExtraHeaders[i], Length('set0cookie.'), Length(HTTP.Response.ExtraHeaders[i])));
//So we break after getting the first cookie
Break
end;

//Buddy list is delimited by a BEGIN BUDDYLIST and END BUDDYLIST
BuddyBegin := FRemoteFile.IndexOf('BEGIN BUDDYLIST') +1;
BuddyEnd := FRemoteFile.IndexOf('END BUDDYLIST') -1;

for i := BuddyBegin to BuddyEnd do
//These is the "raw" buddy list parsing is needed for it to make sense
//Since this is an example I discarded this code
ListBox1.Items.Add(FRemoteFile[i]);

BuddyBegin := FRemoteFile.IndexOf('BEGIN IGNORELIST') +1;
BuddyEnd := FRemoteFile.IndexOf('END IGNORELIST') -1;

for i := BuddyBegin to BuddyEnd do
ListBox2.Items.Add(FRemoteFile[i]);

for i := 0 to FRemoteFile.Count -1 do
if pos('Mail=', FRemoteFile[i]) > 0 then
begin
Tmp := Copy(FRemoteFile[i], length('mail01'), Length(FRemoteFile[i]));
if StrToInt(Tmp) = 1 then
ShowMessage('You have a yahoo mail account')
else
ShowMessage('You dont have a yahoo mail account');
Break;
end;
end else
raise Exception.Create('Couldnt log you on');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FRemoteFile := TStringList.Create;
end;

end.
<-----------------------------END UNIT CODE--------------------------------->

<-----------------------------BEGIN FORM CODE------------------------------->
object Form1: TForm1
Left = 192
Top = 121
Width = 379
Height = 443
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 120
TextHeight = 16
object Label3: TLabel
Left = 16
Top = 136
Width = 65
Height = 16
Caption = 'Buddys list'
end
object Label4: TLabel
Left = 194
Top = 138
Width = 64
Height = 16
Caption = 'Ignore lists'
end
object Panel1: TPanel
Left = 11
Top = 3
Width = 342
Height = 113
TabOrder = 0
object Label1: TLabel
Left = 11
Top = 24
Width = 63
Height = 16
Caption = 'Username'
end
object Label2: TLabel
Left = 11
Top = 56
Width = 60
Height = 16
Caption = 'Password'
end
object Edit1: TEdit
Left = 94
Top = 18
Width = 233
Height = 24
TabOrder = 0
end
object Edit2: TEdit
Left = 96
Top = 51
Width = 233
Height = 24
TabOrder = 1
end
object Button1: TButton
Left = 139
Top = 82
Width = 75
Height = 25
Caption = 'Login'
TabOrder = 2
OnClick = Button1Click
end
end
object ListBox1: TListBox
Left = 15
Top = 160
Width = 171
Height = 239
ItemHeight = 16
TabOrder = 1
end
object ListBox2: TListBox
Left = 192
Top = 160
Width = 171
Height = 239
ItemHeight = 16
TabOrder = 2
end
object HTTP: TIdHTTP
Request.Accept = 'text/html, */*'
Request.ContentLength = 0
Request.ContentRangeEnd = 0
Request.ContentRangeStart = 0
Request.ProxyPort = 0
Request.UserAgent = 'Mozilla/4.6 (compatible; Indy Library)'
Left = 320
Top = 48
end
end
<-----------------------------END FORM CODE ------------------------------->

اميدوارم که از کد فوق استفاده لازم را ببريد. انشالله درمقالات بعدي به تشريح کامل روشهاي برقراري ارتباط با اين پروتکل خواهم پرداخت.
موفق و پيروز باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


نصب Codec در ويندوز ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۷۵ مراجعه امروز
۵۰۹۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نصب Codec در ويندوز
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۱/۲/۱۳۸۲ اين مقاله ۸۵۵ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.
سلام
شايد با مشکل نصب Codec براي فايلهاي فشرده صوتي و فيلم بر روي دستگاه کامپيوتر کاربران برخورده باشيد. براي نصب اين Codec فايلهاي مختلفي در اينترنت وجود دارد . ولي در زماني که من نياز داشتم هيچ فايل يا برنامه مناسبي پيدا نکردم که بدون ديالوگ بتونه اين Codec را براي من نصب کند. به همين خاطر خودم دست به کار شدم و مرحله به مرحله نصب را از روي فايل Inf همراه Codec پيگيري کردم تا بتونم در برنامه دلفي خودم اين Codec را نصب کنم. گفتم خالي از لطف نيست که به صورت مقاله بنويسم تا شايد اگر در آينده يک نفر مثل بنده اين مشکل را داشت بتواند با مطالعه اين مقاله به نتيجه مطلوب برسد.
براي نصب Codec من از Divx Codec استفاده کردم فايلهاي اين Codec به شرح ذيل مي باشند.

دکودر ويدئويي براي حرکت کند 1- Divxc32.dll
دکودر ويدئويي براي حرکت تند 2- Divxc32f.dll
دکودر دايرکت شو براي کيفيت مطلوب تصويري 3- Divx_c32.ax
دکودر صوتي 4- Divxa32.acm
دکودر صوتي 5- L3codeca.acm
فايل اينفورميشن ( اطلاعات نصب) دکودر 6- Divx.inf

براي نصب ابتدا بايد فايلها را کپي کنيم .
فايلهاي شماره 1و2و3و4و5 را در دايرکتوري system32 در ويندوزهاي 2000 و NT کپي مي کنيم يا در دايرکتوري system در ويندوزهاي 9x و Me .
فايل شماره 6 را در دايرکتوري INF که در دايرکتوري اصلي ويندوز وجود دارد کپي مي کنيم.

سپس فقط در ويندوزهاي 9x و Me به فايل system.ini که در دايرکتوري اصلي ويندوز قرار دارد خطهاي زير را اضافه مي کنيم . (توجه داشته باشيد در صورتي که Section مربوطه در فايل system.ini بود لازم نيست نام Section دوباره تکرار گردد)
[Drivers32]
vidc.DIV3=DivXc32.dll
vidc.DIV4=DivXc32f.dll
msacm.divxa32=DivXa32.acm
msacm.l3acm=L3codeca.acm

سپس بايد اطلاعات رير را به رجيستري ويندوز اضافه کنيم.
اگر ويندوز شما 9x يا Me است کليدها و مقادير ذيل اضافه گردد:
HKEY_LOCAL_MACHINE\ SYSTEM\CurrentControlSet\Control\MediaResources\icm\vidc.DIV3
سپس مقادير زير را در اين کليد ايجاد مي کنيم.
Description با مقدار DivX ;-) MPEG-4 Video Codec (Low-Motion)
Driver با مقدار DivXc32.dll
FriendlyName با مقدار DivX ;-) MPEG-4 Video Codec (Low-Motion)
کليد زير را ايجاد مي کنيم.
HKEY_LOCAL_MACHINE\ SYSTEM\CurrentControlSet\Control\MediaResources\icm\vidc.DIV4

سپس مقادير زير را در اين کليد ايجاد مي کنيم.
Description با مقدار DivX ;-) MPEG-4 Video Codec (Fast-Motion)
Driver با مقدار DivXc32f.dll
FriendlyName با مقدار DivX ;-) MPEG-4 Video Codec (Fast-Motion)

کليد زير را ايجاد مي کنيم.
HKEY_LOCAL_MACHINE\
SYSTEM\CurrentControlSet\Control\MediaResources\acm\msacm.divxa32

سپس مقادير زير را در اين کليد ايجاد مي کنيم.
Description با مقدار DivX ;-) Audio Codec
Driver با مقدار DivXa32.acm
FriendlyName با مقدار DivX ;-) Audio Codec

اگر ويندوز شما 2000 يا NT است کليدهاي و مقادير ذيل را در رحيستري ايجاد کنيد.
HKEY_LOCAL_MACHINE\
SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc

سپس مقادير زير را در اين کليد ايحاد مي کنيم.
DivXc32.dll با مقدار DivX ;-) MPEG-4 Video Codec (Low-Motion)
DivXc32f.dll با مقدار DivX ;-) MPEG-4 Video Codec (Fast-Motion)
DivXa32.acm با مقدار DivX ;-) Audio Codec
L3codeca.acm با مقدار Fraunhofer IIS MPEG Layer-3 Codec (Pro)
سپس به کليد زير مي رويم .
HKEY_LOCAL_MACHINE\
SOFTWARE\Microsoft\Windows NT\CurrentVersion\ drivers32

مقادير زير را در اين کليد ايجاد مي کنيم.
vidc.DIV3 با مقدار DivXc32.dll
vidc.DIV4 با مقدار DivXc32f.dll
msacm.divxa32 با مقدار DivXa32.acm
msacm.l3acm با مقدار L3codeca.acm
سپس براي رجيستر کردن فايلهاي Codec کليد زير را در رجيستري ايجاد مي کنيم.
HKEY_LOCAL_MACHINE\
Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup

سپس مقدار زير را در آن ايجاد مي کنيم.
Registering DivX Direct Show Decoder... با مقدار
SystemDir%\regsvr32.exe /s %SystemDir%\DivX_c32.ax

توجه داشته باشيد که بايد به جاي %SystemDir% مسير دايرکتوري سيستم را در کامپيوتر فعلي قرار دهيم.

حالا نصب Codec به پايان رسيد براي استفاده بايد با يک پيام به همه برنامه ها اعلام کنيم که اين تغييرات در رجيستري صورت گرفته است يا اينکه يکبار کامپيوتر را راه اندازي کنيم.

موفق و پيروز باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


اجراي برنامه ها از دلفي ( دستور ShellExecute) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۴۸ مراجعه امروز
۴۱۶۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اجراي برنامه ها از دلفي ( دستور ShellExecute)
نويسنده : مديريت سايت
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۲/۲/۱۳۸۲ اين مقاله ۲۷۴۸ بار مطالعه شده است
۲۱ نفر تا به حال به اين مقاله رای داده اند.
در اين مقاله طريقه اجرا يا باز کردن نرم افزار هاي خارج از محيط دلفي را با استفاده از تابع API ويندوز ShellExecute را ياد خواهيد گرفت.
چرا بايد برنامه ها را از دلفي اجرا کرد؟
شايد اين سوال براي شما پيش بيايد چرا بايد نرم افزارها را خارج از دلفي اجرا کرد. شما در يکي از موارد ذيل ممکن است نياز به اجراي يک نرم افزار خارج از دلفي داشته باشيد
• برنامه هاي نصب و عزل
• برنامه هاي سيستمي
• برنامه هاي اپليکيشن سرور
• برنامه هاي گزارش گيري
• و ....
موارد بسياري است که ممکن است شما بخواهيد از اين دستور استفاده کنيد که به چندي از آنها اشاره شد.

دستور ShellExecure
اين دستور به ما اجازه ميدهد که برنامه هاي ديگر را اجرا کنيم. نحو اين دستور به شکل ذيل مي باشد.
HINSTANCE ShellExecute(HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
جدول زير پارامترهاي اين دستور را شرح ميدهد.
پارامتر | ورودي/خروجي | توضيحات
hwnd | ورودي | دستگيره يا هندل پنجره اصلي - براي گزارش خطاها حتما نياز است
lpOperation | ورودي | اشاره گر - اين پارامتر به نوع عمليات اشاره مي کند
lpFile | ورودي | اشاره گر به نام فايل اجرايي شما
lpParameters | ورودي | اشاره گر به پارامترهاي ارسالي به نرم افزار شما - در صورتي که پارامتر نباشد به صورت تهي بماند
lpDirectory | ورودي | دايرکتوري پيش فرض براي اجراي نرم افزار
nShowCmd | ورودي | اشاره گر تنظيم حالت نمايش برنامه بعد از اجرا

د ر صورتي که دستور shellexcute به درستي اجرا نشود يک کد خطا برمي گرداند شما مي توانيد با استفاده از تابع GetLastError خطا رخ داده را متوجه شويد. در صورتي که دستور Shellexecute به درستي اجرا شود کد خطاي بازگشتي بزرگتر از 32 مي باشد . در صورتي که کد خطا بازگشتي کمتر يا برابر با 32 باشد يک خطا رخ داده است. براي دريافت اطلاعات بيشتر در مورد کدهاي خطا اين دستور به MSDN مراجعه کنيد.
در دلفي شما به راحتي با استفاده از دستور SysErrorMessage مي توانيد آخرين خطا را بدست آوريد.نمونه کد زير روش استفاده از اين دستور را نشان داده است.
if ShellExecute(Handle, 'print', PChar('c:\log.txt'), nil, nil, SW_SHOWNORMAL) <= 32 then
ShowMessage(SysErrorMessage(GetLastError));

پارامتر lpOperation
با استفاده از دستور ShellExecute مي توان نرم افزارها و آبجکتهاي مختلف را اجرا کرد . مقادير قابل قبول براي پارامتر دوم اين دستور lpOperation به شرح جدول ذيل مي باشد.
lpOperation مقدار پارامتر | شرح
edit | باز کردن يک سند براي ويرايش در يک ويرايشگر
explore | مرورگر فايلهاي ويندوز براي مرور دايرکتوري خاص ...
find | جستجو به دنبال يک فايل در دايرکتوري خاص...
open | باز کردن يک فايل يا برنامه
print | چاپ يک سند
NULL | اطلاعات بيشتر در پايين ...

در صورتي که مقدار پارامتر lpOperation برابر با null قرار بگيرد براي باز کردن فايل يا برنامه از رجيستري ويندوز و از قسمت تخصيص فايلهاي اجرايي به پسوند فايلها براي اجراي دستور فوق استفاده مي گردد.
پارامتر nShowCmd
اين پارامتر به دستور ShellExecute مي گويد که بعد از اجراي يک برنامه آن را به چه حالتي نمايش بدهد. انواع حالات مختلف در جدول ذيل آمده است.

nShowCmd مقدار پارامتر | شرح
SW_HIDE | مخفي کردن پنجره
SW_MAXIMIZE | بزرگ کردن پنجره
SW_MINIMIZE | به حداقل رساندن پنجره
SW_RESTORE | فعال کردن يک پنجره در صورتي که به حالت حداقل يا حداکثر باشد
SW_SHOW | نمايش پنجره در حالت و موقعيت پيش فرض
SW_SHOWDEFAULT | نمايش پنجره به حالت پيش فرض در برنامه
SW_SHOWMAXIMIZED | فعال و به حداکثر رساندن پنجره
SW_SHOWMINIMIZED | فعال و به حداقل رساندن يک پنجره
SW_SHOWMINNOACTIVE | نمايش يک پنجره در حالت غير فعال و حداقل
SW_SHOWNA | نمايش يک پنجره در وضعيت فعلي
SW_SHOWNOACTIVATE | نمايش و فعال کردن يک پنجره - ويندوز اين پنجره را در حالت پيش فرض خود نمايش مي دهد.
SW_SHOWNORMAL | نمايش و فعال کردن پنجره به حالت عادي

وقتي که شما براي اولين بار يک برنامه را اجرا مي کنيد بايد از مقدار SW_SHOWNORMAL استفاده کنيد.

استفاده از دستور ShellExecute
درقسمت پايين چند نمونه از حالتهاي استفاده از اين دستور آورده شده است. شما مي توانيد اين دستورات را براي کار خود تغيير دهيد. در دلفي براي استفاده از اين دستور بايد دو يونيت Windows و ShellAPI در قسمت Uses قرار گرفته باشد.

اجراي برنامه Demo.exe از دايرکتوري C:\app
ShellExecute(Handle,NIL,PChar('C:\apps\demo.exe'), nil,nil,SW_SHOWNORMAL);
باز کردن فايل log.txt
ShellExecute(Handle,'open',PChar('c:\log.txt'), nil,nil,SW_SHOWNORMAL);
پخش فايل ending.mp3
ShellExecute(Handle,'play',PChar('c:\ending.mp3'), nil,nil,SW_SHOWNORMAL);
چاپ فايل log.txt
ShellExecute(Handle,'print',PChar('c:\log.txt'), nil,nil,SW_SHOWNORMAL);
باز کردن مروگر فايل ويندوز از C:\
ShellExecute(Handle,'explore',PChar('c:\'), nil,nil,SW_SHOWNORMAL);
ساخت يک نامه الکترونيکي جديد به واسطه Outlook Express
Procedure CreateEmail(Const EmailAddr, Subject, Body: String);
var
ConcatEmailStr: String;
Begin
ConcatEmailStr := EmailAddr + '?subject=' + Subject + '&body=' + Body;

ShellExecute(Handle,'open',PChar(ConcatEmailStr), nil, nil, SW_SHOWNORMAL);
end;
براي کسب اطلاعات بيشتر به آدرس ميکروسافت
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp
مراجعه فرماييد.
اميدوارم که توانسته باشيد از اين مقاله استفاده کنيد.
موفق و پيروز باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


رجيستر کردن Activex يا Dll در دلفي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۵۱ مراجعه امروز
۴۱۶۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
رجيستر کردن Activex يا Dll در دلفي
نويسنده : مديريت سايت
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۳/۲/۱۳۸۲ اين مقاله ۲۳۹۰ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

در اين مقاله ياد خواهيد گرفت که چگونه با استفاده از کد نويسي در دلفي Activex يا dll مورد نياز برنامه خود را در دستگاه کاربرانتان نصب کنيد.
براي رسيدن به اين هدف از دستور regsvr32.exe استفاده مي کنيم.
اين دستور يکي از دستورات ويندوز است که براي رجيستر کردن Activex يا dll ها بکار مي رود.
خط فرمان اين دستور به شکل زير مي باشد.
Regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
/s – در موقع نصب هيچ پيام يا پنجره اي نمايش نده
/u – حذف فايل
ما با استفاده از اين دستور ويندوز و کد دلفي زير مي توانيم به نتيجه مورد نظر خود برسيم.
procedure RegisterOCX;
type
TRegFunc = function : HResult; stdcall;
var
ARegFunc : TRegFunc;
aHandle : THandle;
ocxPath : string;
begin
try
ocxPath := ExtractFilePath(Application.ExeName) + 'Flash.ocx';
aHandle := LoadLibrary(PChar(ocxPath));
if aHandle <> 0 then
begin
ARegFunc := GetProcAddress(aHandle,'DllRegisterServer');
if Assigned(ARegFunc) then
begin
ExecAndWait('regsvr32','/s ' + ocxPath);
end;
FreeLibrary(aHandle);
end;
except
ShowMessage(Format('Unable to register %s', [ocxPath]));
end;
end;
در روال بالا مقدار ocxpath برابر با مسير فايل dll يا ocx ما مي باشد. ممکن است نصب يک dll ياocx طول بکشد و بعد از اجراي روال بالا دستور لازم براي نصب صورت گرفته و برنامه ادامه کار خود را پيگيري مي کند. اگر اين مدت زمان زياد باشد برنامه شما اجرا شده ولي هنوز dll يا ocx رجيستر نشده است. به همين منظور از تابع ExecAndWait استفاده مي کنيم. اين تابع بعد از اجراي يک دستور منتظر مي ماند تا کار به طور کامل انجام پذيرد. کد اين تابع به شرح ذيل مي باشد.
uses shellapi;
...
function ExecAndWait(const ExecuteFile, ParamString : string): boolean;
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
begin
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile);
lpParameters := PChar(ParamString);
nShow := SW_HIDE;
end;
if ShellExecuteEx(@SEInfo) then
begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
Result:=True;
end
else Result:=False;
end;
اميدوارم که از اين مقاله استفاده لازم را برده باشيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


اجراي فايل exe از درون دلفي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۵۴ مراجعه امروز
۴۱۷۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اجراي فايل exe از درون دلفي
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۵/۲/۱۳۸۲ اين مقاله ۳۸۳۸ بار مطالعه شده است
۴۷ نفر تا به حال به اين مقاله رای داده اند.

يكي از مشكلاتي كه بسياري از تازه كاران در دلفي با آن مواجه مي شوند اجراي فايلهاي ديگر يا اجراي دستورات shell است.

در اين مقاله سعي ما بر اين است كه شما را با اجراي فايلهاي ديگر از درون دلفي و كنترل آنها آشنا كنيم. شما پس از خواندن اين مقاله خواهيد توانست به راحتي فايلهاي ديگر -و نه تنها exe- را از درون دلفي اجرا كنيد و حتي دستورات shell را نيز صادر كنيد. به عنوان مثال ممكن است بخواهيد يك فايل html را با Editor پيش فرض كاربر باز كنيد. يا يك فايل html را با Browser پيش فرض كاربر باز كنيد. يا شايد بخواهيد يك فايل BMP را با اديتور پيش فرض كاربر باز نماييد و يا اين كه يك فايل INF را نصب نماييد.

با خواندن اين مقاله شما مي توانيد به راحتي به تمامي اين اهداف برسيد.
تابع APIي وجود دارد به نام WinExec. شكل كلي اين تابع از اين قرار است:

WinExec(lpCmdLine: PAnsiChar; uCmdShow: Cardinal);
كه lpCmdLine خط دستور مورد نظر شما براي اجراي فايل و uCmdShow بايد يكي از مقادير زير را داشته باشد:
SW_HIDE | SW_MAXIMIZE | SW_MINIMIZE
SW_RESTORE | SW_SHOW | SW_SHOWDEFAULT
SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_SHOWMINNOACTIVE
SW_SHOWNA | SW_SHOWNOACTIVATE | SW_SHOWNORMAL

براي توضيحات بيشتر راجع به هر كدام از اين ثابت ها به راهنماي Windows SDK دلفي يا MSDN مراجعه كنيد.

تابع WinExec تابع بسيار قديمي و محدودي است و ما قصد نداريم در اين مقاله بيشتر از اين راجع به اين تابع صحبت كنيم.

تابع ديگري وجود دارد به نام ShellExecute. اين تابع در يونيت ShellAPI تعريف شده است. بنابر اين لازم است يونيت ShellAPI را در ليست uses يونيت خود وارد كنيد. اين يكي از توابع بسيار قدرتمند براي اجراي فايل است.
نگاهي به شكل كلي اين تابع بياندازيد:

function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall;

hWnd | Handle پنجره اي كه اين دستور را فراخوانده است.
Operation | نوع دستوري مورد نظر جهت اجرا
FileName | نام فايل يا شاخه
Parameters | پارامترهاي مورد نظر در هنگام اجراي فايل exe
Directory | شاخه پيش فرض در هنگام اجراي فايل
ShowCmd | مشخص كننده چگوني نمايش فايل در هنگام اجرا

پارامتر اول يك متغيير از نوع HWND است.
لازم است براي كساني كه با مفهوم Handle در ويندوز آشنا نيستند توضيحاتي راجع به Handle بدهم. هر پنجره يا آبجكتي در ويندوز داراي يك Handle است كه براي دسترسي به آن پنجره يا آبجكت شما بايد از اين Handle استفاده كنيد. در واقع يك Handle يك عدد در مبناي 16 است. Handle يك عدد unique يا همتا است كه ويندوز آن را مقداردهي مي كند. اگر از يك پنجره دو Instance اجرا شده باشد (مثلا يك برنامه دو بار اجرا شده باشد) هر كدام از اين Instanceها يك Handle جداگانه دارند.
با اين تفاصيل پارامتر اول Handle پنجره اي است كه اين دستور را صادر كرده است. شما براي اين پارامتر مي توانيد از Application.Handle استفاده كنيد و يا آن را برابر 0 قرار دهيد. به علاوه مي توانيد Handle يك برنامه ديگر را بدهيد.

در صورتي كه شما مي خواهيد پيغام هاي اخطار آن فايل را دريافت كنيد يا آن را كنترل نماييد و يا تا اجراي كامل آن اجراي برنامه را متوقف كنيد با Handle برنامه خود را با استفاده از Application.Handle به اين پارامتر بدهيد.

پارامتر دوم مشخص كننده وظيفه اي است كه قرار است انجام شود. اين پارامتر مقادير پيش فرضي ندارد و بستگي به خصوصيات فايل اجرايي دارد. روي يك فايل از نوع Text كليد سمت راست ماوس را بزنيد. احتمالا موارد بالاي ليست "open"، "Edit with ..." , "print" است. هر كدام از اين رشته هاي مي توانند يك عمليات يا Operation باشند. به عنوان مثال شما مي خواهيد يك فايل Text را چاپ كنيد. در اين صورت كافي است از عبارت print به عنوان operation استفاده كنيد. يا مي خواهيد يك فايل rar را با استفاده از WinRar باز كنيد. در اين صورت مي توانيد از "Extract files" استفاده كنيد. حتما تا به حال متوجه شده ايد كه دستور ShellExecute چه مقدار انعطاف پذير است. با استفاده از اين فرمان مي توانيد هر گونه دستور Shell را اجرا نماييد.

پارامتر سوم مشخص كننده نام فايل يا شاخه اي است كه شما مي خواهيد عمليات بر روي آن انجام شود.
پارامتر چهارم ليست پارامترهايي است كه تمايل داريد فايل exe با اين پارامترها اجرا شود. پارامترها پنجم نيز نام شاخه پيش فرض در هنگام اجراي فايل مورد نظر شماست. اگر شما فايل exe اي را اجرا كنيد و اين فايل exe بخواهد از شاخه جاري فايلهاي اضافه اي را استفاده كند ويندوز شاخه جاري را به اون مطابق با اين شاخه اطلاع خواهد داد. و اما آخرين پارامتر مشخص كننده شكل اجراي فايل است. مقدار اين پارامتر مي تواند يكي از ثابت هايي ليستي باشد كه در ابتداي اين مقاله عنوان شد. به عنوان مثال شما مي توانيد از SW_HIDE استفاده كنيد كه در اين صورت فايل اجراي شما مخفي خواهد بود و يا از SW_SHOWMINIMIZE استفاده كنيد كه در اين صورت برنامه شما Minimizeشده اجرا مي شود.

و حالا به يك نكته خيلي مهم توجه كنيد:
1- رشته هاي اين تابع از نوع PChar هستند بنابراين شما بايد رشته هاي string را به صورت PChar به اين تابع بدهيد. شما مي توانيد به طور عادي رشته مورد نظر خود را به اين تابع بدهيد و يا در صورتي كه رشته مورد نظر شما string است بايد با استفاده با استفاده از دستور PChar آن را Typecast كنيد. به عنوان مثال:

ShellExecute(0, 'open', PChar(ExtractFilePath(Application.ExeName) + 'test.exe') , '', '', SW_SHOWNORMAL);

در اين مثال با استفاده از تابع ExtractFilePath و Application.ExeName كه حاوي آدرس كامل فايل Exe است شاخه اي كه فايل exe در آن قرار دارد را پيدا كرده ايم و سپس فايل test.exe را كه در كنار فايل اصلي اجرايي وجود دارد را به آن اضافه كرده ايم. كل اين عبارت TypeCast شده است به PChar.
جهت اطلاع كساني كه نمي دانند TypeCast چيست. TypeCast فرآيندي است كه شما متغيير يا Objectي را از يك نوع به نوع ديگري تبديل ميكنيد. كد زير را نگاه كنيد و با نوع پيشرفته تري از TypeCast آشنا شويد:

procedure TForm1.Button1Click(Sender: TObject); begin TButton(Sender).Caption := 'Test'; end;

در اين مثال Sender را از نوع TObject است TypeCast كرده ايم به TButton. و پراپرتي Caption آنرا تغيير داده ايم. براي اطلاعات بيشتر راجع به TypeCast به كتب دلفي مراجعه كنيد.

و اجازه دهيد به چند مثال جالب نيز نگاهي بياندازيم:
edit كردن يك فايل HTML با Editor پيش فرض HTML:

ShellExecute(Handle, 'edit', 'test.htm', '', '', SW_SHOW);
نصب يك فايل INF
ShellExecute(Handle, 'install', 'divx.inf', '', '', SW_SHOW);
فشرده ساختن يك فايل با استفاده از winrar و ارسال آن به ايميل:
ShellExecute(Handle, 'compress and mail...', 'test.file', '', '', SW_SHOW);
ارسال ايميل به mamouri@ganjafzar.com و با موضوع "Great Article":
ShellExecute(0, 'open', 'mailto:mamouri@ganjafzar.com?subject=GreatArticle', '', '', SW_SHOWNORMAL);
چگونه يك فايل exe را اجرا كنيم و تا اتمام آن برنامه را متوقف كنيم؟
uses ShellAPI;
...
function ExecAndWait(const ExecuteFile, ParamString : string): boolean;
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
begin
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile);
lpParameters := PChar(ParamString);
nShow := SW_HIDE;
end;
if ShellExecuteEx(@SEInfo) then
begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or
Application.Terminated;
Result:=True;
end
else Result:=False;
end;

همان طور كه ملاحظه مي كنيد اين تابع به يونيت ShellAPI نياز دارد و بايد اين يونيت را در ليست uses يونيت خود اضافه كنيد.
در اين تابع از تابع ديگري به نام ShellExecuteEx استفاده شده است. اين تابع بر خلاف ShellExecute فقط يك پارامتر دارد كه بايد برابر متغييري از نوع TShellExecuteInfo قرار بدهيد. در ابتدا بايد با استفاده از تابع FillChar آنرا مقداردهي كنيد و وجود آنرا به ويندوز اطلاع دهيد. در واقع آن را Create كنيد:

FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo);

آبجكت ShellExecuteEx داراي پارامترهاي زير است:
cbSize: DWORD;
fMask: ULONG;
Wnd: HWND;
lpVerb: PAnsiChar;
lpFile: PAnsiChar;
lpParameters: PAnsiChar;
lpDirectory: PAnsiChar;
nShow: Integer;
hInstApp: HINST;

براي اطلاعات بيشتر راجع به اين پارامترها به راهنماي Windows SDK دلفي يا MSDN مراجعه كنيد. خروجي اين تابع از نوع boolean است و مشخص كننده اين است كه آيا اين تابع با موفقيت اجرا شده است يا نه؟
تابع ExecAndWait پس از اين كه اطمينان پيدا كرد كه فايل با موفقيت اجرا شده است يك حلقه repeat..until تشكيل داده. در داخل repeat دستور Application.ProcessMessage صادر شده است تا برنامه بتواند messageها را دريافت كند. سپس با استفاده از GetExitCodeProcess مقدار خروجي پروسس اجرا شده دريافت مي گردد. در صورتي كه خروجي اين تابع مخالف STILL_ACTIVE بود (كه نشانگر اجراي پروسس است) حلقه با كار خود ادامه مي دهد.

خروجي اين تابع مشخص كننده اجرا يا عدم اجراي فايل اجرايي است.

و حالا به چند مثال جالب ديگر توجه كنيد:
1- دسترسي به HotMail از درون دلفي:

program dummy;
var ToAddress: string;
EightSpaces: string;
begin
ToAddress := 'john@pacbell.net';
// Don't know why but this is required to get the
// correct compose address...
EightSpaces := ' ';
ShellExecute(Handle, PChar('open'), PChar('rundll32.exe'), PChar('C:\PROGRA~1\INTERN~1\HMMAPI.DLL,MailToProtocolHandler' + EightSpaces + ToAddress), nil, SW_NORMAL)
end.
2- نمايش ديالوگ مشخصات يك فايل:

procedure ShowPropertiesDialog(Filename: string);
var
SEI: TShellExecuteInfo;
begin
FillChar(SEI, SizeOf(SEI), 0);
with SEI do
begin
cbSize := SizeOf(SEI);
lpFile := PChar(Filename);
lpVerb := 'properties';
fMask := SEE_MASK_INVOKEIDLIST;
end;
ShellExecuteEx(@SEI);
end;
3- اجراي ديالوگ Screen ويندوز (Control Panel > Display)
ShellExecute(HInstance, nil, PCHAR('rundll32.exe'), PCHAR('shell32.dll, Control_RunDLL desk.cpl, , 3') { 3 is the tab index }, NIL, 1);

همان طور كه متوجه شديد 3 شماره Tabي است كه مورد نظر شماست.

4- يك مثال كامل تر از فرستادن ايميل با استفاده از Outlook يا ارسال كننده پيش فرض email:

var
mail: string;
begin
mail := 'mailto:you@you.com' +
'?subject=hello' +
'&cc=me@me.com' +
'&body=Delphi is cool! ;)';
ShellExecute(Self.Handle, 'open', PChar(mail), nil, nil, SW_SHOWNORMAL);
خروجي هاي تابع ShellExecute يا ShellExecuteEx

خروجي هاي اين دو تابع مي تواند يكي از مقادير زير باشد:
0 | سيستم عامل داراي resourceهاي كافي يا حافظه كافي جهت اجرا نيست.
ERROR_FILE_NOT_FOUND | فايل مورد نظر پيدا نشد.
ERROR_PATH_NOT_FOUND | آدرس مشخص شده پيدا نشد.
ERROR_BAD_FORMAT | فايل EXE نامعتبر است يا اين يك فايل EXE از نوع Win32 نيست.
SE_ERR_ACCESSDENIED | سيستم عامل دسترسي به فايل مشخص شده ندارد.
SE_ERR_ASSOCINCOMPLETE | association فايل مورد نظر شما ناقص يا نامعتبر است. مثلا مشخص نشده كه فايل bmp كه شما مي خواهيد آن را اجراه كنيد بايد با چه برنامه اي باز شود.
SE_ERR_DDEBUSY | DDE transaction مربوطه كامل نشد زيرا DDE transactionهاي ديگري در حال اجرا بودند.
SE_ERR_DDEFAIL | DDE transaction ناموفق بود.
SE_ERR_DDETIMEOUT | DDE transaction نتوانست اجرا شود زيرا درخواست Time Out شد.
SE_ERR_DLLNOTFOUND | فايل dynamic-link library يا dll مشخص شده پيدا نشد.
SE_ERR_FNF | فايل مورد نظر پيدا نشد.
SE_ERR_NOASSOC | هيچ برنامه اي با پسوند فعلي فايل منطبق نشده است. مثلا مشخص نشده كه فايل bmp كه شما مي خواهيد آن را اجراه كنيد بايد با چه برنامه اي باز شود.
SE_ERR_OOM | حافظه كافي جهت اجراي عمليات وجود ندارد.
SE_ERR_PNF | آدرس مشخص شده پيدا نشد.
SE_ERR_SHARE | يك خطاي sharin violation پيش آمد. يعني فايل مورد نظر share شده بود.

خلاصه:
در اين مقاله با سه تابع API مهم به نام هاي WinExec و ShellExecute و ShellExecuteEx آشنا شديم و پارامترهاي آنها را بررسي كرديم. به علاوه مثالهاي متعددي راجع به استفاده از ShellExecute ارائه داديم. به علاوه ثابتهاي استفاده شده در اين تابع ها را ليست كرده و بعضا آنها را مورد بررسي قرار داديم. همچنين تابعي به نام ExecAndWait ارائه داديم كه كار آن اجراي يك فايل exe و متوقف كردن برنامه تا اتمام فايل exe آشنا شديم و ساختمان داخلي اين تابع را مورد بررسي قرار داديم.

موفق و مويد و منصور باشيد
معموري

کيفيت مقاله :
عالی خوب متوسط ضعيف


نصب كنترلهاي DLL و ActiveX از درون كد ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۵۷ مراجعه امروز
۴۱۷۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نصب كنترلهاي DLL و ActiveX از درون كد
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ [image] فايل نمونه
تاريخ نشر : ۵/۲/۱۳۸۲ اين مقاله ۲۳۴۶ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.
چگونه كنترلهاي OLE مثل (dynamic-link library (DLL يا كنترلهاي (ActiveX (OCX را از درون دلفي Register يا UnRegister بكنيم؟

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

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

و اما اصل مطلب. بعضي مواقع شما در پروژه ها خود يك ActiveX را با استفاده از دستور "import an ActiveX control" وارد مي كنيد ولي اگر كاربر اين ActiveX را نداشته باشد با exception يا خطايي به نام EOleSysError مواجه خواهد شد و نخواهد توانست كه از برنامه شما استفاده كند.

RegSvr32.exe
دستور command-lineي يا خط فرماني RegSvr32.exe كار نصب كنترلهاي dl يا ActiveX را دارد. شما مي توانيد به طور دستي از اين ابزار استفاده كنيد. كافي است در ويندوز گزينه Run منوي Start را اجرا كرده و به راحتي اين دستور را اجرا كنيد. وقتي شما از RegSvr32.exe استفاده مي كنيد، سعي خواهد كرد كه كمپوننت را load كرده و تابع DLLSelfRegister آنرا فرا بخواند. اگر اين تلاش موفق باشد RegSvr32.exe يك پنجره با پيغام موفقيت نشان مي دهد.

RegSvr32.exe پارامترهاي زير را دارد:
Regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
/s - Silent; display no message boxes
/u - Unregister server
/i - Call DllInstall passing it an optional [cmdline];
when used with /u calls dll uninstall
/n - do not call DllRegisterServer; this option must
be used with /i

توجه: با استفاده از سوييچ ؟/ مي توانيد ليست تمامي پارامترهاي را ببينيد.

از درون دلفي.
براي اين كه شما اين كد را از درون دلفي اجرا كنيد به تابعي احتياج داريد كه يك فايل exe را اجرا كرده و تا اتمام اجراي آن صبر كند.

تابع RegisterOCX بايد چيزي شبيه به اين باشد:

procedure RegisterOCX(ocxPath: string);
type
TRegFunc = function : HResult; stdcall;
var
ARegFunc : TRegFunc;
aHandle : THandle;
begin
try
aHandle := LoadLibrary(PChar(ocxPath));
if aHandle <> 0 then
begin
ARegFunc := GetProcAddress(aHandle,'DllRegisterServer');
if Assigned(ARegFunc) then
begin
ExecAndWait('regsvr32','/s ' + ocxPath);
end;
FreeLibrary(aHandle);
end;
except
ShowMessage(Format('Unable to register %s', [ocxPath]));
end;
end;

توجه: متغيير ocxPath به نام ocx اشاره دارد. به عنوان مثال شما مي توانيد اين تابع را به اين شكل فرا بخوانيد:
RegisterOCX(ExtractFilePath(Application.ExeName) + 'Flash.ocx');
كه سبب نصب ActiveX مربوط به فلش مي شود.

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

در تابع بالا از تابع ديگري استفاده شده به نام ExecAndWait. اين تابع كار صدا كردن regsvr32 را با پارامتر s/ و نام فايل ocx انجام مي دهد. (پارامتر s به معناي silent سبب اجراي regsvr32 در مد خاموش مي شود. در اين مد پيغام هاي خطا و موفقيت نمايش داده نمي شود و كاربر از نصب ActiveX مطلع نخواهد شد.
و اين هم تابع ExecAndWait:
uses ShellAPI;
...
function ExecAndWait(const ExecuteFile, ParamString : string): boolean;
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
begin
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile);
lpParameters := PChar(ParamString);
nShow := SW_HIDE;
end;
if ShellExecuteEx(@SEInfo) then
begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
Result:=True;
end
else Result:=False;
end;

البته توجه داشته باشيد كه ShellAPI بايد در ليست uses يونيت شما وجود داشته باشد.
تابع فوق از تابع APIي به نام ShellExecuteEx استفاده مي كند تا يك فايل exe را در سيستم اجرا كند. اگر شما به اطلاعات بيشتري راجع به اين تابع و توابعي مثل اين نياز داريد به مقاله "اجراي فايل exe از درون دلفي" توجه كنيد.

Flash.ocx داخل فايل exe دلفي
همه چيز به خوبي پيش رفت. تنها مسئله اي كه باقيست پنهان كردن Flash.ocx يا هر ocx ديگري از ديد كاربر است. انجام اين كار به سادگي امكان پذير است. فقط كافي است شما فايل ocx را در Resourceها اضافه كنيد. Resource مربوطه با Exe شما Compile خواهد شد و در هنگام اجراي برنامه شما به سادگي آن ocx را روي هارد ذخيره كرده و آن را نصب مي كنيد. براي اطلاعات بيشتر راجع به اين تكنيك به مقاله‌ي زير كه در ابتداي اين نوشتار هم آنرا معرفي كردم مراجعه كنيد.

خلاصه
فهميديم با استفاده از دستور خط فرماني regsvr32.exe مي توانيم يك كنترل OLE را Register يا UnRegister بكنيم.
همچنين ليست پارامتهاي اين تابع را ديديم. به علاوه تابعي به نام RegisterOCX ارائه كرديم كه كار نصب OCX را بر عهده دارد. اين تابع از تابع ديگري به نام ExecAndWait براي اجراي regsvr32.exe استفاده مي كند و تا اتمام اجراي آن صبر مي كند. به علاوه فهميديم كه اين تابع براي اجراي درست به يونيت ShellAPI احتياج داشته و از تابع ShellExecuteEx جهت اجراي فايل سود مي جويد.
به علاوه دانستيم كه به سادگي با استفاده از Resourceهاي مي توانيم فايل OCX خود را در داخل exe از ديد كاربر نهايي پنهان كنيم.

موفق و مويد و منصور باشيد
معموري

کيفيت مقاله :
عالی خوب متوسط ضعيف


برنامه نويسي روالهاي غير همزمان (Asynchronous Programming) (قسمت اول) مفــــاهيم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۹۲ مراجعه امروز
۴۹۰۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برنامه نويسي روالهاي غير همزمان (Asynchronous Programming) (قسمت اول) مفــــاهيم
نويسنده : رضا براري سوادکوهي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۷/۲/۱۳۸۲ اين مقاله ۶۶۷ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.

• مقدمه
عموما زماني که برنامه اي مينويسيم يک سري عمليات پشت سر هم در نظر ميگيريم و بر اساس آنها دستورات مربوطه را کنار هم ميگذاريم و در نهايت يک برنامه تشکيل شده از روالهايي که به صورت سريال يکي بعد از ديگري اجرا ميشوند به دست مي آيد.
اما در بسياري از موارد اين گونه برنامه نويسي کاربرد ندارد و نميتواند پاسخگوي نيازهاي برنامه نويس باشد. به عنوان مثال يک سرويس دهنده (Server) را در نظر بگيريد که قرار است براي تعدادي سرويس گيرنده (Client) سرويس دهي کند. در چنين حالتي اگر سرويس دهنده بخواهد از الگوريتمهاي سنتي ترتيبي براي پاسخگويي استفاده کند امکان پاسخگويي در زمان مناسب به تمام سرويس گيرنده ها را ندارد. در اين مواقع استفاده از الگوريتمهاي غير همزمان (Asynchronous) بهترين شيوه است. مباحثي چون Multi-tasking و موارد مشابه در راستاي رسيدن به چنين اهدافي به وجود آمدند. در مواقعي که قرار باشد برنامه در يک پايگاه داده (Data Base) با تعداد رکوردهاي بالا عمليات جستجو را اجرا کند، يا زماني که عمليات محاسباتي سنگيني بايد انجام شود و يا زماني که برنامه بايد از يک مرکز ديگر اطلاعات دريافت کند و به هر دليل اين عمليات به کندي اجرا ميشوند استفاده از الگوريتمهاي غيرهمزمان مفيدترين راه حل است تا يک قسمت برنامه باعث از بين رفتن منابع اجرايي باقي قسمتها نشود.

• الگوريتمهاي غير همزمان (Asynchronous)
گفته ميشود الگوريتمهاي غير همزمان باعث اجراي چند کار به طور همزمان ميشوند! در واقع چه اتفاقي مي افتد؟
در واقع در حالتهايي مانند زماني که چند پروسسور درگير باشند يا حالتهاي خاص امکان اجراي چند رويه همزمان مستقل وجود دارد اما در حالت معمول در واقع دو Task يا Thread به صورت همزمان با هم اجرا نميشوند. در واقع يک برنامه يا يک بخش از برنامه به نحوي زمان پروسسور را بين اين Taskها يا Threadها پخش ميکند که نتيجه اجرايي آنها براي کاربر همزمان تصور شود. در چنين حالتي مفاهيمي چون برتري يا حق تقدم (Priority) اجرا مطرح ميشود که در مباحث آينده بررسي خواهند شد.

• الگوريتمهاي هماهنگ (Synchronous)
اين روش هماني است که تقريبا در تمام برنامه ها از آن استفاده ميکنيم. عمليات آغاز ميشود، اجراي عمليات ادامه ميابد تا به مرحله پاياني برسد، عمليات خاتمه ميابد. عملياتي که گفته شد خود ميتواند شامل رويه هاي مختلفي باشد که بر اساس الگوريتم تعريف شده براي برنامه به ترتيب و پشت سر هم اجرا ميشوند، در حالي که در برنامه نويسي هاي غيرهمزمان نيازي به رعايت توالي اجراي رويه ها نداريم و در هر زمان که لازم باشد يک رويه آغاز ميشود و عمل ميکند و پايان ميابد و اين در حالي است که باقي رويه ها در حال اجراي دستورات هستند.

• کاربردهاي رويه هاي (Process) غير همزمان
با توجه به صحبتهاي پيشين احتمالا اهميت استفاده از رويه هاي غير همزمان را درک کرده ايد، اما بد نيست مثالهايي از کاربردهاي استفاده از اينگونه روشها را بررسي کنيم:

- اجازه ميدهد بخشهايي از برنامه به صورت همزمان اجرا شوند و عمل کنند، که به طور خلاصه بيان شد.
- برنامه ميتواند به اجراي رويه هاي مختلف خود ادامه دهد در حالي که بخشهايي از برنامه در حالت انتظار (Waiting) قرار دارند.
- در برنامه هايي که در سمت سرور اجرا ميشوند (Server-side Applications) ميتوان خيلي بهتر از Threadها استفاده کرد، و اين به معني پاسخگويي سريعتر به سرويس گيرنده هاست.
- در بسياري از مواقع باعث کوتاهتر شدن زمان اجراي عمليات ميشود. در نظر بگيريد اگر يک عمليات کار با پورت سريال داشته باشيم و به طور همزمان عمليات تهيه کپي پشتيبان از اطلاعات پيشين را انجام دهيم و يا آنها را به صورت مجزا در مراحل پشت سر هم انجام دهيم، کدام روش سريعتر است؟
- يکي از شيوه هاي برنامه نويسي غير همزمان استفاده از Threadهاست، در اين مواقع امکان استفاده از يک بخش از حافظه (مثلا RAM) به صورت مشترک هم وجود دارد واين به معني امکان به اشتراک گذاشتن داده هاست.
- از مهمترين کاربردهاي اينگونه الگوريتمها در برنامه نويسي هاي Real-time است. دستگاههايي که نياز به جمع آوري داده ها (Data Acquisition) از وروديها، ذخيره سازي همزمان آنها و در عين حال نمايش وقايع و... دارند بايد از اين شيوه برنامه نويسي استفاده کنند. سيستمهايي که تحت عنوان SCADA (Supervisory Control And Data Acquisition) مطرح هستند از اين گروه به شمار مي آيند.

نسل جديد سيستمهاي عامل مانند Solaris، AIX، DEC-UNIX، Windows 98، Windows NT(و سيستمهاي عامل بر پايه NT مثل Windows 2K)، Linux و... همگي مبحث Threadها را پشتيباني ميکنند. با توجه به اينکه در زمانهايي که سيستمهاي چند پروسسوري در اختيار نباشند به کار گرفتن Threadها از بهترين شيوه ها براي پياده سازي الگوريتمهاي غيرهمزمان است، در اين مجموعه به اين مبحث خواهيم پرداخت و در صورت مساعد بودن شرايط موضوع را در زبانهاي برنامه نويسي مختلف و سيستم عاملهاي متفاوت بررسي خواهيم کرد.
اميدوارم اين مجموعه بتواند راهکارهاي مناسبي در اختيار برنامه نويسان ايراني قرار دهد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


توليد اتوماتيك فرمهاي هوشمند ورود اطلاعات در محيط VB6/ SQLServer ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۹۵ مراجعه امروز
۴۹۱۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
توليد اتوماتيك فرمهاي هوشمند ورود اطلاعات در محيط VB6/ SQLServer
نويسنده : مهرداد تاجيک
موضوع : Misc [image] نسخه قابل چاپ [image] فايل نمونه
تاريخ نشر : ۱۰/۲/۱۳۸۲ اين مقاله ۶۹۹ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.
بسمه تـعالي
-توليد اتوماتيك فرمهاي هوشمند ورود اطلاعات در محيط VB6/ SQLServer
ActiveDB , Inteligent DataSource ActiveX Component

ActiveDB ابزاري است كه به كمك آن ميتوان براحتي و در كمترين زمان ممكن فرمهاي هوشمند ورود اطلاعات را در محيط Visual Basic 6 و بانكهاي اطلاعاتي MS Access , SQL Server , Oracle و ديگر Provider هاي OLeDb توليد كرد.
- ActiveDB يك كنترل از نوع Data Source ميباشد و كليه كنترلهايي كه خواص DataSource وData Field دارند مانند ( TextBox , ComboBox , ListBox,CheckBox , PictureBox , MaskEdit , RichtextBox, …) ميتوانند به آن Bind شوند.
ضمنا ActiveDB شامل يك Wizard قوي به نام Active Wizard ميباشد كه كليه مراحل توليد فرمها را بدون نوشتن كد انجام خواهد داد.
* توجه : قبل از نصب ActiveDB بايد نر م افزار Visual Basic 6 به همراه Service Pack 4 بر روي كامپيوتر مورد نظر نصب شده باشد.
امكانات كنترل ActiveDB
1-Delete , Update , Insert ركوردها به صورت Single Update يا Batch Update
2- مرور ركوردها ( Navigation) با كليدهاي UP ركورد قبلي , Down ركورد بعدي ، PgUp بيست ركورد به عقب ، PgDown بيست ركورد به جلو ، Ctrl PgDown آخرين ركورد ، Ctrl PgUp اولين ركورد.
3-تشخيص اتوماتيك فيلدهاي كليد اصلي PK توسط كنترل و تست تكراري نبودن مقادير اين فيلدها هنگام ورود اطلاعات توسط كاربر .4- -تشخيص اتوماتيك فيلدهاي Not Null .
5- امكان ايجاد List of Value جهت فيلدهايي كه مقادير آنها از جداول ديگر بانك اطلاعاتي تامين ميشود و اعمال Validation هاي لازم بر روي مقادير اين فيلدها و نيز توليد Lable شرح فيلد در هنگام اجرا (Runtime ) بصورت اتوماتيك .
6- امكان جستجوي مقادير فيلدها با روش Query By Form همانند محيط Oracle . با استفاده از كليد F11 مقادير فيلدها خالي شود و با وارد كردن تمام و يا قسمتي از مقادير هر يك فيلدها و اجراي جستجو F12 نتيجه مورد نظر در داخل Recordset فرم فيلتر خواهد شد.
6-تنظيم اتوماتيك حداكثر طول فيلدها با توجه به مقدار تعريف شده در Table و Set شدن خاصيت Maxlen هر يك از فيلدها.
7-امكان تهيه كپي از ركورد جاري Duplicate Record
8- امكان تهيه و چاپ گزارشات سريع با فرمت Html از RecordSet جاري فرم و نيز Set كردن عناوين فيلدهاي گزارش توسط كاربر.
9- امكان صدور اطلاعات جاري فرم به فرمت Export to Excell
10- تشخيص اتوماتيك فيلدهاي عددي و كاراكتري و ايجاد محدوديتهاي لازم در هنگام ورود اطلاعات فيلدهاي عددي
11- اعمال فيلترهاي مورد نظر بر روي ركوردها Hard Filter (فيلترهايي كه با Query نيز باز نخواهند شد ) و Filter از داخل محيط برنامه نويسي.
12- امكان اعمال مجوزهاي دسترسي با توجه به شرايط كاربران و ايجاد محدوديت افزودن ركورد , حذف ركوردها و يا اصلاح ركوردها با استفاده ا. خواص UpdateAllowed, DeleteAllowed, InsertAllowed
13- امكان Sort صعودي و يا نزولي بر روي هريك از فيلدهاي موجود با كليد F6
14- امكان Set كردن Connection جاري در هنگام RunTime با استفاده از خاصيت ActiveConnection
14- …. و بيش از 100 Event, Method, Property مختلف جهت سهولت كار برنامه نويسان.

کيفيت مقاله :
عالی خوب متوسط ضعيف


ترفندهاي دلفي شماره 001 (IDN Exclusive Collection 001) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۶۰ مراجعه امروز
۴۱۷۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ترفندهاي دلفي شماره 001 (IDN Exclusive Collection 001)
نويسنده : رضا براري سوادکوهي
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۲/۱۳۸۲ اين مقاله ۳۴۷۹ بار مطالعه شده است
۲۱ نفر تا به حال به اين مقاله رای داده اند.

*** دو کد زير در دلفي 7 تحت ويندوزهاي 98، 2K و XP تست شده اند ***

يک روش ساده براي نمايش فايلهاي داخل يک folder همراه با Icon آنها و اعلام نوع فايل (استفاده از API)
يک ListView، يک ImageList و يک Buttonروي فرم قرار دهيد.
کد از نايتي

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ImgList, ShellAPI;

type
TForm1 = class(TForm)
ImageList1: TImageList;
Button1: TButton;
ListView1: TListView;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure InsertFilesInList( strPath: String; ListView: TListView; ImageList: TImageList);
var
pFile: Integer;
Icon: TIcon;
SearchRec: TSearchRec;
ListItem: TListItem;
FileInfo: SHFILEINFO;
begin
// Create a temporary TIcon
Icon := TIcon.Create;
ListView.Items.BeginUpdate;
try
// search for the first file
pFile := FindFirst(strPath + '*.*', faAnyFile, SearchRec);
while pFile = 0 do
begin
with ListView do
begin
// On directories and volumes
if ((SearchRec.Attr and FaDirectory <> FaDirectory) and
(SearchRec.Attr and FaVolumeId <> FaVolumeID)) then
begin
ListItem := ListView.Items.Add;
//Get The DisplayName
SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
SizeOf(FileInfo), SHGFI_DISPLAYNAME);
Listitem.Caption := FileInfo.szDisplayName;
// Get The TypeName
SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
SizeOf(FileInfo), SHGFI_TYPENAME);
ListItem.SubItems.Add(FileInfo.szTypeName);
//Get The Icon That Represents The File
SHGetFileInfo(PChar(strPath + SearchRec.Name), 0, FileInfo,
SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON);
Icon.Handle := FileInfo.hIcon;
ListItem.ImageIndex := ImageList.AddIcon(Icon);
// Destroy the Icon
DestroyIcon(FileInfo.hIcon);
end;
end;
pFile := FindNext(SearchRec);
end;
finally
Icon.Free;
ListView.Items.EndUpdate;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
// Assign a Imagelist to the ListView
ListView1.SmallImages := ImageList1;
// Show Listview in Report Style and add 2 Columns
ListView1.ViewStyle := vsReport;
ListView1.Columns.Add;
ListView1.Columns.Add;
InsertFilesInList('C:\', ListView1, ImageList1);
end;

end.

گاهي بد نيست براي انجام بعضي کارها از خود سيستم کمک بگيريم. کد زير اندازه فايلي که انتخاب ميشود را بر ميگرداند. بد نيست، به درد Text-fileها ميخوره .
يک Button، يک Label، يک OpenDialog روي فرم قرار دهيد.
کد از کريس بري
procedure TForm1.Button1Click(Sender: TObject);
var
SearchRec: TSearchRec;
begin
if OpenDialog1.Execute then
if FindFirst(OpenDialog1.FileName, faAnyFile, SearchRec) = 0 then
Label1.Caption := FloatToStrF(SearchRec.Size/1048576, ffFixed, 7, 2)+' MB';
FindClose(SearchRec);
end;

کيفيت مقاله :
عالی خوب متوسط ضعيف


فراهم كننده داده ( Data Provider ) براي بانكهاي اطلاعاتي با استفاده از تكنولوژي NET. ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۱۶ مراجعه امروز
۵۲۳۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فراهم كننده داده ( Data Provider ) براي بانكهاي اطلاعاتي با استفاده از تكنولوژي NET.
نويسنده : Inprise
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۲/۱۳۸۲ اين مقاله ۲۶۶۵ بار مطالعه شده است
۲۳ نفر تا به حال به اين مقاله رای داده اند.
بنام خدا

براي طراحي يك Data Provider براي ADO .NET يقينا بايد از كلاسهاي معروف داده پردازي يعني : Connection, Command, DataReader, DataAdapter استفاده كرد . اسمبلي System.Data.dll حاوي فضاهاي اسمي ( NameSpace ) مناسب براي طراحي جزئيات يك custom data provider ميباشد . با ذكر مقدماتي در باب استفاده از Data Provider ها براي برنامه هاي ويندوز به نحوه عملكرد يك Data Provider خواهيم پرداخت و آنگاه با تشريح جزئيات و نقش موثر هر يك از كلاسهاي دسترسي و پردازش داده دات نت يعني Connection, Command, DataReader, DataAdapter به نحوه تركيب خصوصيات مورد نظر طراح Data Provider با امكانات موجود و چگونگي خصوصي سازي توابع عنصري اين كلاسها براي دسترسي به منبع داده خواهيم پرداخت .

براي سالهاي متمادي استفاده از ODBC به عنوان يك راه حل استاندارد دسترسي به داده بهترين گزينه گسترش دهندگان نرم افزارهاي داده پرداز بود . ODBC با استفاده از روشي مقدماتي با عنوان one-to-one mapping درخواستهاي مبتني بر SQL نرم افزار را به روشهاي داخلي دسترسي به داده بانك مورد نظر تبديل ميكرد و باز با رعايت استاندارد SQL پاسخ مورد نظر ( يا نشانه اي بر صحت يا بطلان روند مورد انتظار توسط دستور دهنده ) را به نرم افزار باز ميگرداند . در واقع ODBC پلي ارتباطي به گذرگاه هاي ورود و خروج داده ( Gateway ) يك بانك داده و صادر كننده دستورات SQL بود . به عنوان مثال ODBC با اطلاع از فرمت مورد قبول ورودي و خروجي بانك اسكوئل سرور مايكروسافت و گذرگاهش با عنوان SQL Server tabular data stream كه به TDS شهرت دارد درخواستهاي نرم افزار را به "مدير بانك" تحويل داده و جوابهاي مطلوب را باز ميگرداند . همينطور در رابطه با گذرگاه استاندارد داده بانك اوراكل ( Oracle Call Interface ) كه به OCI شهرت دارد . عموما رابط هاي ODBC به عنوان يك پل يا مترجم بين SQL و بانك توسط همان شركت توسعه دهنده بانك گسترش داده مي شدند .

ODBC تنها محدود به دسترسي به RDBMS ها نيست . ODBC با قرار گرفتن بر فراز رابطهاي COM موجود براي برقراري ارتباط با يك منبع داده مديريت نشده مثل Excel ميتوانست از اطلاعات موجود در آنها نيز استفاده كند ! وظيفه اصلي استاندارد OLE DB توليد ساختاري يكتا "براي تبعيت" بود كه گسترش دهندگان منابع داده اي مثل Lotus يا Word با رعايت آن و توليد ابزارهاي مبتني بر COM امكان دسترسي به اين منابع را به توليد كنندگان نرم افزارهاي داده پرداز بدهند . ( قرار گرفتن بر فراز رابطهاي COM حاصل ترجمه عبارت COM Wrapper است - اينپرايز )

اكنون دات نت در قالب اسمبلي System.Data.dll فضاهاي نامي مفيدي را ارائه ميكند كه هر كدام توسط كلاسهاي حوزه خود كليه وظايف فوق الذكر را در يك قالب معين مجتمع ( encapsulate ) ميكنند و برنامه نويس بدون درگيري با مشكلات نصب و راه اندازي Driver هاي ODBC يا استفاده از رابط صحيح COM براي يك موجوديت حاوي داده ( Data-awar Object ، به نظر ميرسد منظور محصول نرم افزاري خاصي است كه بگونه اي خاص نوعي از داده را نگه داري و مديريت ميكند و با ارائه رابط هائي خاص اجازه دسترسي و خودكار سازي مديريت اين داده ها را مجاز ميداند - اينپرايز ) يك راه حل جامع ، يكتا ، سهل الوصول ، سهل الاستفاده ( easy to use رو چي بايد ترجمه كنم ؟ - اينپرايز ) را به توسعه دهنده دات نت ارائه ميكند . با استفاده از اسمبلي هاي جامع دات نت و كلاسهاي ADO .NET ديگر درگير نصب و پيكره بندي فيزيكي (!) مسيرهاي عبور داده از منبع تا برنامه تان نيستيد . همچنين دات نت همكنون ( با تقليدي كثيف از بورلند - اينپرايز :-) ) مفهوم DataSet را ارائه كرده است كه مفهومي جديد (!) براي ظرف نگهداري و مديريت داده هاي بدون اتصال به منبع ميباشد . ( disconnected object model )

چرا بايد يك فراهم كننده داده ( Data Provider ) طراحي كنم و دلائل استفاده از آن چيست ؟

در صورتيكه منبعي حاوي داده داريد كه بناست پايه طراحي سيستم هاي نرم افزاري گوناگوني قرار بگيرد براي خروج داده از منبع به سيستمهاي مذكور چه فكري كرده ايد ؟ آيا تصور ميكنيد بايد سورس نرم افزار مديريت داده و فرمت فايلهاي ذخيره كننده داده را بايد در تابلو اعلانات شركت نصب كنيد تا تمام برنامه نويسان حال و احتمالا آينده شركت از جزئيات آن اطلاع كسب كرده و آنگاه نرم افزاري براي دسترسي به داده ها طراحي كنند ؟ آيا تصور كرده ايد همه برنامه نويسان شما آنقدر دقيق هستند كه راهنماي 300 صفحه اي شما كه خوشبختانه بصورت PDF طراحي شده (!) را مطالعه كنند و بدون هيچ خطائي روش مورد علاقه شان را براي دستيابي به داده هاي شما "اختراع" كنند ؟ آيا فكر ميكنيد ... يقينا بعد از اندكي تفكر به اين نتيجه خواهيد رسيد كه يك منبع داده بدون يك سلسله رابطهاي استاندارد براي دسترسي به آن مفهومي ندارد ! رابط هاي يكتاي شما بايد همانطور كه به يك برنامه نويس ويندوز امكان ميدهد بانك را جستجو ( Search ) كند و نتايج را استخراج كند بايد امكانات مناسبي را براي طراحان وب سايت شركت در نظر بگيرد تا آنان نيز بدون در گير شدن در جزئيات طراحي نرم افزار و ... فقط با استفاده از يك يا چند دستور و انتخاب كتابخانه مناسب براي روشهاي دسترسي به بانك شما بتوانند صفحات وب ، گزارشهاي گرافيكي و چارتهاي سازماني را براحتي استخراج كنند !

ورود به مبحث ، قبل از دات نت

برنامه نويسان محيط ويندوز ، خصوصا برنامه نويسان Visual C++® 6.0 با استفاده از كلاسهاي نرم افزاري خاصي ( هم بصورت ATL و صرفا براي ويژوال سي و هم بصورت COM و با رعايت ATL بدون وابستگي به MFC - اينپرايز ) ميتوانستند فراهم كننده هاي داده خودشان را با رعايت قالب OLE DB طراحي كنند و اين رابط ها را در اختيار برنامه نويسانشان قرار دهند تا روند دستيابي به منبع داده سازمان استاندارد شود . آنها ساختار ( Struct ) اي با عنوان WIN32_FIND_DATA در اختيار داشتند كه حاوي اطلاعات دقيقي از محل فايلها و دايركتوري هاي نگهداري داده ، ساختار و فرمت فايلهاي ذخيره كننده داده و ... بود و با استفاده از آن Data Provider هاي خودشان را طراحي ميكردند كه به اين روند معروف ، DirProv گفته ميشد ! اكنون دات نت در قالب كلاسهاي خود چيزي مشابه همين عمل را با عنوان جديد managed dirprov انجام ميدهد .

كليات طراحي يك ديتا پرووايدر

Connection : كلاس حياتي اين روند ، كلاس Connection است . ايجاد و مديريت "برقراري رابطه" با منبع داده به عهده اين كلاس است .

Command : كلاسي كه وظيه "ارسال و دريافت" دستورات " استاندارد" به منبع فراهم شده را بر عهده دارد . اين دستورات ميتوانند ( بنا به طراحي كلاس كه عموما اين روزها مبتني بر SQL است - اينپرايز ) INSERT, UPDATE, DELETE باشند يا حتي دستوراتي چون SELECT كه داراي پاسخ هستند ! ( پس شما فقط در كلاس command با اسكوئل سر و كار داريد ! - اينپرايز )

DataReader : اين كلاس كليه وظايف "پردازش خروجي " مرحله قبل را به عهده دارد .

DataAdapter : اين كلاس " محفظه نگهداري داده" كلاس DataReader را با داده هاي استخراج شده از بانك پر ميكند ! ( پس وظايف پردازشي مثل اديت ، سرچ و ... به عهده ديتا ريدر و وظيفه گرفتن داده از خروجي و پر كردن ديتا ريدر با فرمت مناسب و احتمالا قرار دادن فيلتر هاي خاص مثل محدوديت ارسال شبكه اي و ... بر عهده ديتا ادپتر است ! - اينپرايز )

شرح وظايف هر كلاس و نحوه طراحي و پياده سازي ( Implementing ) يك نسخه خصوصي براي نيل به هدف :

الف) Connection Class

اين كلاس يك رابط ( Interface ) قابل پياده سازي دارد به نام IDbConnection با شش تابع عنصري بري باز و بسته كردن يك "ارتباط" با داده ها يا تغيير منبع داده و امثالهم . پياده سازي Trasaction ها در همين مرحله صورت ميگيرد ! رابط IDbTransaction بعد از صدا زدن متد BeginTransaction بوجود مي آيد و وظايف يك تراكنش را به عهده ميگيرد !

ConnectionString و ConnectionTimeout دو خصوصيت مهم اين كلاس هستند كه ميتوانند نقاط خوبي براي اضافه كردن جزئيات مورد نظر هنگام پياده سازي مجدد كلاس باشند .

ب) Command Class

اين كلاس يك رابط به نام IDbCommand معرفي ميكند كه ابزار استفاده كننده از داده هاست براي ارسال دستورات . متد ها و خصوصيتهاي نسبتا زياد اين رابط به شما امكنا مديريت مناسب ارسال دستور و دريافت جواب را ميدهد . بنا به اينكه منبع داده هاي شما يك RDBMS مثل اوراكل است يا يك منبع ساده داده مثل يك فايل پارادوكس از امكانات مناسبي براي مديريت ارسال و دريافت برخورداريد . به عنوان مثال اگر داده هاي شما در فايلهاي ساده اي در يك دايركتوري واحد ذخيره ميشوند ميتوانيد در پياده سازي خود از اين كلاس خصوصيات مربوط به SQL را حذف كنيد و صرفا نام دايركتوري حاوي داده را به عنوان CommandText از كاربر بخواهيد !

ج) DataReader Class

اين كلاس با ارائه دو رابط به نامهاي IDataReader و IDataRecord به كاربر امكان مشاهده داده ها ، جستجو و حتي كسب اطلاع در مورد محتواي ظرف داده توسط metadata ي موجود براي هر resultset را ميدهد .

د) DataAdapter Class

IDataAdapter و IDbDataAdapter توسط اين كلاس ايجاد ميشوند و وظيفه قالب بندي و انتقال داده هاي توليد شده توسط Command به DataReader را به عهده دارند .

هر كدام از گسترش دهندگان منبع داده ( مثل اوراكل يا مايكروسافت ) با عنايت به استاندارد ADO .NET فراهم كننده داده هايشان را توليد و توزيع نموده اند و برنامه نويس با استفاده از رابط آنها و استفاده از اسمبلي و كلاسهاي مناسب به عنوان پايه نرم افزار ميتواند از طريق دات نت به داده ها دست يابد و آسانترين روند توزيع نرم افزار پردازش داده را تجربه كند و طراحان منبع داده ها كسب دانشي كه چند سطري از آن را فوقا" مشاهده كرديد ميتوانند Data Provider هاي اختصاصي خود را براي سازگاري با دات نت گسترش دهند . نحوه استفاده از Data Provider ها و برقراري ارتباط با منبع داده مبحثي جداگانه و مفصل است كه توصيه ميكنم قبل از پرداختن به آن مطالعات مقدماتي حول آن در MSDN داشته باشيد . اطلاعات فوق هر چند كمكي به طراحي و پياده سازي يك Data Provider نميكند اما به شما به عنوان يك توسعه گر نرم افزار كمك ميكند ديد بهتري نسبت به آنچه اتفاق مي افتد داشته باشيد !

موفق و مويد و سر بلند باشيد . inpriZ

کيفيت مقاله :
عالی خوب متوسط ضعيف


بكارگيري REAL AUDIO\VIDEO در دلفي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۶۳ مراجعه امروز
۴۱۷۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بكارگيري REAL AUDIO\VIDEO در دلفي
نويسنده : غلامرضا(عليرضا) غفوري منش
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۲/۱۳۸۲ اين مقاله ۲۳۶۱ بار مطالعه شده است
۱۳ نفر تا به حال به اين مقاله رای داده اند.
با سلام
كسانيكه با اينترنت كار ميكنند مطمنا براي يكبار هم شده از فايلهاي real استفاده كرده اند فايلهايي كه
با پسوند هاي rm,ra,ram,... مي باشند و فرمتهاي صوتي و تصويري را پشتيباني ميكنند .با اين توضيح به نكات
ذيل توجه كنيد!
اين نرم افزار توانايي دارد يك فايل mpeg با حجم 15 مگابايت را به فايل تصويري به حجم
1 مگابايت تبديل كند.البته لازم به توضيح است كه كيفيت تصوير چندان مطلوب نمي باشد و در مواردي مي توان از آن استفاده كرد.
همچنين فايلهاي صوتي حتيMP3 با كيفيت مطلوب توسط اين سيستم به مقدار قابل توجهي كم حجم ميشوند.
نرم افزاري هايي از قبيل REAL PRODUCER قابليت تبديل فايلها را با هر فرمتي به REAL دارا مي باشند واحتياجي به سخت افزار نمي باشد
چگونگي استفاده از اين امكانات در دلفي:
ابتدا بايد نرم افزار REAL بر روي رايانه شما نصب شود سپس در دلفي به :
را انتخاب كنيد.import activex control\commponent
در پنجره جديد real player activeX control library(version X,x) را انتخاب كرده و دكمه install را بزنيد.
حال در قسمت activex ايكوني آبي رنگ با علامت play داريد.آن را به فرم اضافه كنيد!
يك حستجو گر صوتي بر روي فرم شما ايجاد ميشود كه تصوير آن بستگي به نسخه نصب شده REAL بر روي سيستم شمادارد.
براي پخش يك فايل شما ميتوانيد نام آن را در source وارد كرده و برنامه را اجرا كنيد ويا براي كنترل فايل توسط
برنامه ميتوانيد از دستورات زير استفاده كنيد.
raelaudio1.source =:('path\filename');
realaudio1.doplay;
براي استفاده يك كايد جهت play/pause مانند دستگاههاي video cd نيز ميتوانيد از دستور زير استفاده كنيد.
real audio1.doplaypause;
و
realaudio1.dostop;جهت پايان دادن به پخش
realaudio1.getitle;مشخصات فايل كه در زمان ساخت به آن معرفي ميگردد
realaudio1.setmute:=true/false;جهت قطع صدا
realaudio1.autostart:=true/false;جهت شروع خودكار در زمان اجراي برنامه
همچنين دستوراتي نيز براي كنترل فريم هاي فايل (ff,rew,...) وجود دارد كه در مقاله بعدي به همراه چگونگي استفاده از قابليت تصويري اين كنترل كه بسيار جالب مي باشد شرح خواهم داد. ان شا الله
با تشكر
غفور

کيفيت مقاله :
عالی خوب متوسط ضعيف


برنامه نويسي روالهاي غير همزمان (Asynchronous Programming) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۰۹۸ مراجعه امروز
۴۹۱۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برنامه نويسي روالهاي غير همزمان (Asynchronous Programming)
نويسنده : رضا براري سوادکوهي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۲/۱۳۸۲ اين مقاله ۶۱۲ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

• آنچه گذشت...

تقريبا چيزي نگذشته! تا اينجا گفته شد که قرار است در مورد مساله برنامه نويسي آسنکرون صحبت شود و براي رسيدن به يک نتيجه مناسب قرار شد بحث را فعلا جمع کنيم و در مورد کار با Threadها بحث کنيم...

• Threadها چيستند؟

يک Thread در واقع ميتواند باعث ايجاد تغيير مسير کنترل يک برنامه در حال اجرا شود. البته عموما برنامه هاي کاربردي که نوشته ميشوند داراي يک Thread هستند که تنها يک مسير را طي ميکند و در هر زمان در طول اجراي برنامه همان مسير تعريف شده را ادامه ميدهد. در حالاتي که برنامه ها داراي چند Thread هستند برنامه ميتواند مسيرهاي مختلف اجرايي را در يک زمان طي کند. البته با بررسي مطالب ارائه شده توسط کارشناسان مختلف ميتوان گفت تقريبا توافقي بر سر تعريف مفهوم Thread وجود ندارد.
دريک حالت کلي در رويه اي با چند Thread ميتوان گفت در هر زمان هيچ Threadي عمل نميکند يا تعدادي Thread (همزمان) عمل ميکنند. در حالت منطقي و تعريف اوليه بايد بگوييم تعداد اين Threadهاي همزمان به تعداد پردازشگرهاي (CPU) فعال سيستم برميگردد که به ازاي هر کدام يک فرآيند (Process) در حال اجرا ميتوان داشت. اما روشهايي به ما اجازه ايجاد تعداد بيشتري Thread به صورت همزمان جهت اجراي فرآيندهاي مورد نياز را ميدهند به نحوي که بتوانيم تعداد Threadها را (البته با توجه به قابليتهاي پردازشگر) نسبت به تعداد پردازشگرها افزايش دهيم.

• سودمندي Threadها

مشخص شد که در حالت معمول پردازشگرها انتظار دارند که در هرزمان از آنها قابليت اجراي يک فرآيند را بخواهيم، اما به روشهايي ميتوانيم بر خلاف ديد پردازشگرمان تعدادي فرآيند همزمان را توسط آن اجرا کنيم، خوب اين موضوع چرا مطرح ميشود و اصولا آيا فايده اي دارد يا نه؟
اولين مساله اي که مطرح ميشود پياده سازي ارزان تر سيستم هاست. اگر به ازاي هر Thread از يک پردازشگر مجزا استفاده کنيم قيمت سيستم ما به طور قابل ملاحظه اي بيشتر از زماني خواهد شد که بتوانيم با استفاده از يک پردازشگر (و در واقع سيستمي که تنها بتواند يک پردازشگر را پشتيباني کند) فرآيندهاي مورد نظرمان را اجرا کنيم.
مساله دوم اينست که Threadها بسياري از منابع سيستم (مواردي چون پشته (Stack) يا ثباتها (Register) در اين مجموعه قرار نميگيرند) را با هم به اشتراک ميگذارند، اين مساله Threadها را در زمانهايي که يک فرآيند عمومي قادر به تقسيم شدن به فرآيندهاي کوچکتري که بتوانند مشترکا اجرا شوند، به وسيله مفيدي براي ايجاد اين بخش بندي تبديل ميکند.
مساله مهم ديگر امکاناتي است که براي زمان بندي از طريق Threadها ميتوانيم داشته باشيم و همچنين به طور همزمان آزاد گذاشتن بسياري از منابع سيستم توسط يک Thread بيکار است. براي درک اين مطلب مساله استفاده از وقفه ها (Interrupt) و در مقابل استفاده از روش Polling دردستيابي به يک پورت کامپيوتر را در نظر بگيريد.

• تــــــاريخچه Threadها

پيدايش انديشه Threadها به سال 1965 در Berkeley Timesharing System باز ميگردد، البته در آن زمان هنوز از نام Thread استفاده نميشد و به اين جريانهاي کنترلي همان فرآيند (Process) ميگفتند. اين فرآيندها ميتوانستند همزمان روي متغيرهاي مشترک، سمافورها (Semaphore) و موارد مشابه عمل کنند. مکس اسميت (Max Smith) حدود سال 1970 در Multics طرح اوليه Threadها را پايه ريزي نمود، در شيوه وي پشته هاي (Stack) چندتايي در يک فرآيند Single Process استفاده ميشد.
البته شايد بتوانيم بگوييم داستان Threadها در واقع به زبان برنامه نويسي PL/I باز ميگردد و به سال 1965 که توسط IBM عرضه شد. اين زبان دستوري را براي ايجاد Threadها بدون در نظر گرفتن پردازشگرهاي موجود همراه خود داشت و البته بعدها اين قابليت از اين زبان گرفته شد.
Unix با آمدن خود در دهه 70 مفهومي از فرآيندهايي که شامل Threadهاي کنترلي متوالي با قابليت پشتيباني از فضاي آدرس دهي مجازي بودند را معرفي کرد. در بعضي کتب عنوان شده که اين شيوه در واقع بر اساس طرح معرفي شده توسط Multics تنظيم گشته است. نکته مهمي که در اين سيستم مطرح بود ناتواني آن در به اشتراک گذاشتن حافظه (Memory) بود؛ در واقع هر فرآيند فضاي مجزايي براي خود داشت که البته اين مساله بعدها اصلاح شد و قابليت استفاده از شيوه هاي پيشين کار با فرآيندها با امکان به اشتراک گذاشتن فضاي آنها در يک فرآيند مشخص پديد آمد. البته اين مساله به اواخر دهه 70 و اوايل دهه 80 باز ميگردد. البته شايد حتي تا اين زمان نتوان مفهوم امروزي Threadها را در برنامه ها پيدا کرد، به هر صورت اينها ايده هاي اوليه اي بودند که موجب پيدايش مفاهيم امروزي شدند. در ادامه کمي به برنامه نويسي امروزي نزديکتر ميشويم.

• شجــره نامه Threadها

براي Threadها دو خانواده اصلي در نظر گرفته شده است:
- شيوه POSIX که در سيستمهاي برپايه Unix استفاده ميشود.
- شيوه Microsoft
که البته اينها خود ميتوانند به اجزاي کوچکتري تقسيم شوند، که به شرح زير هستند.

شيوه POSIX شامل سه خانواده کوچکتر ميشود:
- اولين آنها خود نيز تحت عنوان POSIX شناخته ميشوند که بر پايه استاندارد IEEE POSIX 1003.1c-1995 و يا ISO/IEC 9945-1:1996 عمل ميکنند. (در حال حاضر چند شرکت در ايران در زمينه پخش اطلاعات استانداردها فعاليت دارند که مجموعه هاي IEC و IEEE از جمله آنها هستند، براي دسترسي به اين استانداردها ميتوانيد از اين شرکتها يا اطلاعات موجود در دانشگاهها کمک بگيريد. اين مساله با توجه به قيمت بالاي اطلاعات مرتبط با اين استانداردها ميتواند راهگشاي محققين باشد.)
- مورد دوم DCE است که برپايه استاندارد 1003.4a که بر روي 1003.1c آمده عمل ميکند.
- مورد ديگر که به مراتب مشهورتر است UI است که مخفف Unix International ميباشد و گاهي تحت عنوان Threadهاي Solaris شناخته ميشود و بر پايه استاندارد Unix International که بسيار به POSIX نزديک است عمل ميکند. سيستمهاي برپايه Unix که اين شيوه را پشتيباني ميکنند عبارتند از: Sun Solaris و همچنين SCO UnixWare

هر دو مورد DCE و UI با POSIX سازگارند. براي حالتهاي چند Threadي شيوه POSIX شيوه پيشنهادي ميباشد.

شيوه Microsoft داراي دو خانواده کوچکتر است که هر دو توسط Microsoft ايجاد شده اند:
- شيوه WIN32 که در سيستمهاي مبتني بر Windows 9x و همينطور سيستمهاي مبتني بر Windows NT وجود دارند.
- مورد دوم OS/2 است که از سيستمهاي IBM بر اساس OS/2 برداشته شده است و بر روي اين سيستمها عمل ميکند.

البته لازم به ذکر است شيوه هاي متفرقه ديگري نيز براي ايجاد Threadها عنوان شده اند که مورد استفاده وسيع قرار نگرفتند.

خوب، اميدوارم اين توضيحات عمومي در مورد Threadها مورد توجه شما قرار گرفته باشد. در قسمتهاي بعدي موضوع Threadها را بيشتر مورد بررسي قرار خواهيم داد.

موفق باشيد...

براي ديدي قسمتهاي قبلي:

1- http://www.irandevelopers.com/article.asp?id=381

کيفيت مقاله :
عالی خوب متوسط ضعيف


اتصال شبکه شما به اينترنت ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۵۷ مراجعه امروز
۴۷۷۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اتصال شبکه شما به اينترنت
نويسنده : مديريت سايت
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۶/۲/۱۳۸۲ اين مقاله ۴۸۱۳ بار مطالعه شده است
۱۲۳ نفر تا به حال به اين مقاله رای داده اند.

هميشه اتصال به اينترنت براي ادارات و شرکتهاي کوچک مسئله مبهم و پيچيده بوده است. از اين رو تصميم گرفتم تا اين دست نوشته را که از کتابخانه ميکروسافت گرفته شده است را به شما دوستان گرامي تقديم کنم.

با استفاده از امکانات ويندوز 2000 به راحتي امکان راه اندازي يک اشتراک اينترنت داخلي ميسر مي باشد . بدين طريق که کامپيوتري که براي اتصال به اينترنت تنظيم شده است ديگر کامپيوترهاي داخل شبکه را سرويس دهي مي کند. براي انجام اين کار شما بايد با مفاهيم اوليه شبکه , DNS, DHCP آشنا باشيد.در ادامه به روش انجام اين کار مي پردازيم.

موارد لازم براي اجرا
براي اجراي اين طرح ما به يک اتصال اينترنت نيازمنديم . اين اتصال مي تواند يک خط dialup معمولي از يک ISP يا يک خط باسرعت بالاتر به صورت dsl يا ... باشد.همچنين نياز به سرويس ويندوز با نام Routing and Remote Access Service (RRAS) داريم. براي نصب اين سرويس مي توانيد از قسمت مديريت ويندوز در کنترل پانل استفاده کنيد.
دو دستگاه اتصال يکي مودم براي اتصال به اينترنت و ديگري يک کارت شبکه براي اتصال به شبکه داخلي.

مراحل اجرا
از طريق منوي Start گزينه Settings گزينه Network and DialUp Connections را کليک راست بزنيد و گزينه Properties را انتخاب کنيد.

در قسمت General قسمت TCP/IP را انتخاب کرده و بر روي دکمه Properties کليک کنيد.
شماره IP مقابل 192.168.0.1 را وارد کرده و بر روي دکمه OK کليک کنيد.

فعال کردن Routing
براي فعال کردن اين سرويس از منوي Start گزينه Programs گزينه Administrative Tools را انتخاب و گزينه Routing and Remote Access راکليک کنيد. بعد از باز شدن پنجره بر روي سرور ( شايد نام local داشته باشد) کليک راست بزنيد و گزينه Configure Routing and Remote Access را انتخاب کنيد. ويزاد تنظيمات اين سرويس باز مي شود بر روي دکمه Next کليک کنيد تا به قسمت بعدي برويد.در قسمت بعدي گزينه Set up Router with the Network Address Translation (NAT) routing protocol را انتخاب کنيد.( در صورتي که شما نمي خواهيد از سرويس NAT استفاده کنيد گزينه اول را انتخاب کنيد)

NAT چيست ؟
( با استفاده از nat امکان برقراري ارتباط با اينترنت در شرکتهاي کوچک و متوسط امکان پذير مي باشد. از مزاياي اين سرويس استفاده از يک ip معتبر براي تمامي کاربران داخلي شبکه مي باشد. از ديگر مزايا مي توان به مخفي ماندن شماره ip کاربران متصل شده از شبکه داخلي در اينترنت اشاره کرد. در nat هنگام يک درخواست از شبکه داخلي آدرسهاي داخلي به آدرسهاي واقعي ترجمه مي شوند و درخواستها به اينترنت ارسال مي گردد. زماني که پاسخ يک درخواست از اينترنت باز مي گردد سرويس nat بسته اطلاعاتي فوق را به صاحب آن تحويل مي دهد.)

در اين قسمت ابتدا گزينه Use the Selected Internet Connection را انتخاب کرده و سپس اتصالي را که براي اينترنت در نظر گرفته ايد را انتخاب کنيد(کارت شبکه يا اتصال دائم شما به اينترنت از طريق خط ليز يا مودم يا غيره) و کليد Next را کليک کنيد.

در انتها بر روي دکمه Finish کليک کنيد.
در صورتي که ميخواهيد فقط در صورت لزوم اتصال شما با اينترنت برقرار شود گزينه دوم قبل از صفحه Finish را انتخاب کرده و کليد Next را کليک کنيد. در پنجره بعدي که ظاهر مي گردد گزينه Create a new Demand-Dial Internet Connection را انتخاب کرده و بر روي کليد Next کليک کنيد.

در پنجره اي که باز مي شود نام اتصال جديد با اينترنت را وارد کرده و بروي کليد Next کليک کنيد.در پنجره اي که ظاهر مي گردد مودم خود را انتخاب کرده و بر روي دکمه Next کليک مي کنيم.

در قسمتي که ظاهر مي گردد شماره تماس با شبکه ISP را وارد کرده و بر روي دکمه Next کليک مي کنيم. در پنجره بعدي گزينه Route IP Packets on this interface را انتخاب کرده و بر روي دکمه Next کليک کنيد.

در اين پنجره کد کاربري و کلمه عبور خود را براي اتصال به اينترنت وارد کرده و بر روي دکمه Next کليک کنيد. در انتها دکمه Finish را انتخاب کنيد.
در انتها بر روي اتصالي که ساخته ايد رفته و کليک راست را بزنيد . در قسمت Properties در قسمت TCP/IP شماره IP که از طرف ISP به شما اختصاص داده شده است را وارد کرده و بر روي ok کليک کنيد.

کار تمام شد.
به شما تبريک مي گويم. از اين به بعد اتصال به اينترنت از طريقي که تنظيم کرديم امکان پذير مي باشد. ولي فقط يک مسئله باقيمانده و آن هم DNS مي باشد. ما بايد به سرور DNS کامپيوتر خودمان بگوييم که چگونه آدرسهاي اينترنتي را به شماره IP معني کند. براي انجام اين منظور به طريق ذيل عمل مي کنيم. از منوي مديريت DNS را انتخاب مي کنيم. بر روي سرور ( شايد اسم آن local) باشد کليک مي زنيم تا گزينه هاي زيرين آن نمايش داده شود. بر روي قسمت Forward Lookup Zone کليک کرده تا زير مجموعه هاي آن ديده شود. سپس قسمت نقطه ( دقيقا نقطه .) يا روت را با کليک راست و انتخاب گزينه Delete پاک مي کنيم

. سپس بر روي قسمت Forwar Lookup Zone کليک راست زده و گزينه Properties را انتخاب کنيد. در قسمت Forwarders قسمت
Enable Forwarders را انتخاب کنيد ( علامت بزنيد) و در قسمت IP Address شماره IP سرويس DNS شرکت ISP خود را وارد کرده و بر روي کليد add کليک کنيد. قسمت Do not use recursion را انتخاب کنيد ( علامت بزنيد)

سپس بر روي دکمه ok کليک کنيد.

نتيجه و پايان
حالا کار ما به پايان رسيد براي ديدن نتيجه کار کامپيوتري را که تنظيمات فوق را بر روي آن انجام داده ايد راه اندازي مجدد کنيد. پس از آن مرورگر وب خود را باز کرده و از اينترنت لذت ببريد.
موفق و پيروز باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


برنامه نويسي روالهاي غير همزمان (Asynchronous Programming) (قسمت سوم) |مفاهيم جديد SMP و SMT| ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۰۱ مراجعه امروز
۴۹۱۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
برنامه نويسي روالهاي غير همزمان (Asynchronous Programming) (قسمت سوم) |مفاهيم جديد SMP و SMT|
نويسنده : رضا براري سوادکوهي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۰/۲/۱۳۸۲ اين مقاله ۵۶۶ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

• آنچه گذشت...

در قسمت قبلي مفهوم Thread را مورد بررسي قرار داديم. تاريخچه پيدايش و اصول کلي آنرا ديديم و اکنون ادامه بحث ...

• چند عبارت

براي ادامه اين موضوع بايد چند اصطلاح را بشناسيد:

- (Symmetric Multi-Processing) SMP
SMP يک متد است. در اين شيوه يک کامپيوتر با چند CPU در نظر گرفته ميشود، همه اينها با يک مجموعه يکسان حافظه کار ميکنند و همگي CPUهاي همه منظوره اي هستند که ميتوانند رويه هاي مورد نظر برنامه ها را در سيستم اجرا نمايند. در چنين حالاتي سيستم عامل موجود مسئوليت اصلي اختصاص رويه هاي جديد به يک CPU مشخص را به عهده دارد، که اين کار از طريق الگوريتمهاي موجود در زمينه ايجاد تعادل در بار CPUها امکانپذير است. گاهي در اينگونه سيستمها قابليت جابجا کردن اجراي رويه ها از يک CPU به CPU ديگر نيز وجود دارد. البته انجام اين کار در سيستمهاي قديمي چندان پيچيده نبود، وقتي CPU درگير اجراي يک دستور را به پايان ميرساند، يک کپي از وضعيت آن به CPU ديگر منتقل ميشد و آن نيز از همان حالت کار را ادامه ميداد. اما اکنون با توجه به قابليتهايي که براي اجراي همزمان چند رويه توسط يک CPU در نظر گرفته شده و قابليتهاي تکنيک Pipeline و نيز وجود حافظه Cache داخلي CPUها که از داده ها و دستورات نگهداري ميکنند ديگر کار پياده سازي الگوريتمهاي مورد نظر چندان ساده نيست و ميتوان گفت استفاده از چنين شيوه هايي کاملا بي اثر است و شيوه هاي جديد جاي شيوه هاي قديمي را گرفته اند.

- (Simultaneous Multi-Threading) SMT
SMT در واقع گونه اي از طراحي است که در آن به چند Thread مجزا اجازه داده ميشود تا دستوراتي را در يک سيکل اجرايي اجرا نمايند. چنين شيوه اي با توجه به قابليتهاي سيستمهاي امروزي مانند امکان اجراي چند دستور همزمان و زمان بندي پويا در پردازشگرها امکان پياده سازي پيدا کرده است. SMT علاوه بر سرعت بخشيدن به عمليات در انواع پياده سازيهاي چند Threadي باعث افزايش توان عملياتي ميشود.

- (Thread-Level-Parallelism) TLP
اجراي روالهاي موازي روشهاي مختلفي دارد مانند استفاده از کامپيوترهايي با چند پردازشگر، استفاده از چند کامپيوتر که در يک شبکه قرار دارند و روشهاي مختلف ديگر. اما يکي از مهمترين شيوه ها استفاده از روشهايي است که بر پايه اجراي Threadها در يک زمان کار ميکنند و TLP نماد اينگونه الگوريتمهاست.

• و اما ...

و اما اگر به عقب برگرديم، زماني که پردازشگرهاي Celeron براي اجراي همزمان دو پردازشگري ارائه شدند، وقتي SMP به اندازه کافي براي بسياري از استفاده کنندگان PC ارزان شد، براي علاقه مندان اينگونه مسائل پرسشي ايجاد شد! اينکه وضعيت جديد با توجه به اين CPUهاي دوتايي چه چيزي در اختيار آنها قرار خواهد داد. در واقع داستان به اين مساله برميگردد که خيل عظيم استفاده کنندگان (البته منظور از استفاده کنندگان در اينجا نياز به توضيح ندارد!) کاملا جدي شروع به بحث در مورد فوائد شيوه هاي استفاده از چند Thread (Multithreading) نمودند.
سالها بعد که Apple با ارائه PowerMac شيوه کار دو پردازشگري يا همان Dual-processing را ارائه داد در واقع SMP شيوه اصلي کار کاربران بود و بدين صورت مبحث چند Threadي به يک مفهوم تبديل شد و برنامه هايي با اين شيوه به بازار ارائه شد که قادر بودند تقريبا به طور کامل از قابليتهاي موجود دو پردازشگر سيستم استفاده کنند.
هر چند شيوه SMP مدتها در ميان علاقه مندان PC داراي محبوبيت بود اما روزگار با کاربران x86 يار نبود و رقباي آنها در Mac موفقتر عمل کردند. در اين زمان يار هميشگي کاربران PC که همانا شرکت Intel است براي اين دوستداران برنامه هاي چند Threadي با ارائه قابليتي نو در سري جديد پردازشگرهاي خود تحت عنوان SMT (با عنوان Hyper-Threading هم شناخته ميشود) به کمک آنها آمد. خلاصه مطلب اينکه SMT اجازه ميدهد، همانگونه که کاربران تمايل دارند، CPU بتواند در يک زمان بيش از يک برنامه را اجرا نمايد. شيوه HT (Hyper-Threading) به معني واقعي برنامه نويسي موازي از طريق Threadها که اصطلاحا TLP گفته ميشود را تکان داد، اينجا هر پردازشگر ميتواند قابليتهاي چند پردازشگر را ارائه دهد.
CPUهاي سنتي همانگونه که پيش از اين نيز گفته شد به معني واقعي قادر نبودند امکان اجراي چند وظيفه به طور همزمان را در اختيار کاربران قرار دهند و سيستم عاملهايي چون ويندوز اين ويژگي را از طريق الگوريتمهاي تقسيم زماني پياده سازي ميکردند.

• SMT و SMP

اما در CPUهاي امروزي يا به اصطلاح مدرن به مرور سعي شد ويژگيهايي جهت رسيدن به اين قابليت افزوده شود. به عنوان مثال پردازشگرها از OOE (Out-of-Order Execution) استفاده کردند که باعث ميشد از بيشترين قابليتها و منابع CPU استفاده شود. در OOE چند توالي اجرايي دستورات ترکيب ميشوند، به اين معني که آنها را در وضعيت مشخص قرار ميدهد و با تغيير زمانبندي باعث ميشود در حالت اجرا به بالاترين وضعيت بازدهي برسند و پس از اجرا همگي در وضعيت اوليه و اصلي منظم ميشوند و نتايج به حافظه اصلي منتقل ميشوند و يا براي سيکل بعدي آماده ميشوند. البته بايد توجه کرد کاربر برنامه از اين مسائل بي خبر است و تنها CPU ميداند وضعيت واقعي دستورات به چه صورت است. سيستم عاملهايي مانند ويندوز براي ايجاد حالت چندوظيفه اي (Multi-tasking) از روشهايي مشابه استفاده ميکنند، در واقع کاربر فکر ميکند چند برنامه به طور همزمان اجرا ميشوند اما در واقع در هر لحظه (البته اگر بتوان تعريفي درست از لحظه ارائه داد) تنها يک دستور اجرا ميشود و بنابراين تنها يک برنامه فعال داريم و البته در CPUهايي که تنها از وضعيت تک Threadي پشتيباني ميکنند چاره ديگري وجود ندارد.
اما همانطور که مطرح شد با ورود پردازشگرهاي جديد با قابليتهاي خاص به بازار مساله تغيير کرد. با SMP و SMT ما به روشهايي دست ميابيم که بتوانيم فراتر از محدوديتهاي پردازشگرهاي تک Threadي عمل کنيم. اما تفاوت مشخصي که بين اين دو روش است از بحثهاي قبل قابل تشخيص است. در SMP در واقع دو CPU تک Threadي کنار هم قرار ميگيرند و قابليت اجراي دو Thread همزمان را در اختيار کاربر قرار ميدهند. اما در SMT از لحاظ فيزيکي تنها يک CPU وجود دارد اما از لحاظ منطقي دو پردازشگر عمل ميکنند و ميتوانند دو Thread را به طور همزمان اجرا کنند.
هر چند با توجه به موارد فوق به نظر ميرسد که SMT و يا HT به عنوان جايگزيني براي SMP قديم ميتواند پيشنهاد شود و البته قادر به اجراي چندين وظيفه همزمان به معناي واقعي است اما در اين نوع از پردازشگرها مسائلي مطرح است که باعث ميشود بگوييم چنين نتيجه گيري نميتواند کاملا صحيح باشد.
شايد در آينده به صورت حاشيه اي اين مسائل را دقيقتر بررسي کرديم.

به نظر ميرسد تقريبا مسائل اساسي و مفاهيم مورد نياز در حد دانش ابتدايي لازم براي شروع بحث هاي عملي بررسي شدند. بنابراين از اينجا به بعد اينگونه مفاهيم را در حاشيه بحثهاي اصلي بررسي خواهيم نمود...

اميدوارم بحث اين قسمت مورد پذيرش واقع شده باشد.

موفق باشيد...

براي ديدن قسمتهاي قبلي:

1-http://www.irandevelopers.com/article.asp?id=381
2- http://www.irandevelopers.com/article.asp?id=386

کيفيت مقاله :
عالی خوب متوسط ضعيف


استراتژي حفاظت از اطلاعات در شبکه هاي کامپيوتري ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۶۰ مراجعه امروز
۴۷۷۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استراتژي حفاظت از اطلاعات در شبکه هاي کامپيوتري ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۳/۲/۱۳۸۲ اين مقاله ۷۷۲ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

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

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

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

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

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

دشمنان ، شامل سارقين اطلاعاتي ، مجرمان ،دزدان کامپيوتري ، شرکت هاي رقيب و ... مي باشد.

انگيزه ها ي موجود شامل : جمع آوري هوشمندانه، دستبرد فکري ( عقلاني ) ،عدم پذيرش سرويس ها ، کنف کردن ،احساس غرور و مورد توجه واقع شدن ، با شد .

انواع حملات شامل : مشاهده غيرفعال ارتباطات ، حملات به شبکه هاي فعال، حملات از نزديک( مجاورت سيستم ها ) ، سوء استفاده و بهره برداري خوديان ( محرمان ) و حملات مربوط به ارائه دهندگان صنعتي يکي از منابع تکنولوژي اطلاعات ، است .

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

غيرفعال
فعال
نزديک ( مجاور)
خودي ها ( محرمان )
عرضه ( توزيع )

ويژگي هر يک از انواع حملات فوق ، بشرح زير مي باشد :

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

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

مجاور (Close-in) .اين نوع حملات توسط افراديکه در مجاورت ( نزديکي ) سيستم ها قرار دارند با استفاده از تسهيلات موجود ، با يک ترفندي خاص بمنظور نيل به اهدافي نظير : اصلاح ، جمع آوري و انکار دستيابي به اطلاعات باشد، صورت مي پذيرد . حملات مبتني بر مجاورت فيزيکي ، از طريق ورود مخفيانه ، دستيابي باز و يا هردو انجام مي شود .

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

توزيع (Distribution) . حملات از اين نوع شامل کدهاي مخربي است که در زمان تغيير سخت افزار و يا نرم افزار در محل مربوطه ( کارخانه ، شرکت ) و يا در زمان توزيع آنها ( سخت افزار ، نرم افزار) جلوه مي نمايد . اين نوع حملات مي تواند، کدهاي مخربي را در بطن يک محصول جاسازي نمايد . نظير يک درب از عقب که امکان دستيابي غيرمجاز به اطلاعات و يا عمليات سيستم در زمان آتي را بمنظور سوء استفاده اطلاعاتي ، فراهم مي نمايد .

در اين رابطه لازم است ، به ساير موارد نظير آتس سوزي ، سيل ، قطع برق و خطاي کاربران نيز توجه خاصي صورت پذيرد . در بخش دوم اين مقاله ، به بررسي روش هاي ايمن سازي اطلاعات بمنظور نيل به يک استراتژي خاص امنيتي ، خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


XML در دات نت ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۱۹ مراجعه امروز
۵۲۳۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
XML در دات نت ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۳/۲/۱۳۸۲ اين مقاله ۱۹۶۳ بار مطالعه شده است
۱۶ نفر تا به حال به اين مقاله رای داده اند.

XML ، يکي از مهمترين دستاوردهاي بشريت در عرصه نرم افزارطي ساليان اخير است که بدون شک بيشترين تاثير را در ارتباط با طراحي و پياده سازي برنامه هاي کامپيوتري خصوصا" در اينترنت، بدنبال داشته و خواهد داشت . XML ، يکي از استانداردهاي ارائه شده توسط کنسرسيوم وب است که زمينه استفاده از آن براي تمامي توليدکنندگان نرم افزار، فراهم شده است . XML ، بهمراه خود مجموعه اي از تکنولوژي هاي ديگر را ايجاد نموده است، بطوريکه امروزه از آن بعنوان يک خانواده بزرگ ياد مي گردد (XSLT , XSD ,DOM , XPath ,...) . بديهي است توجه به استانداردهاي فوق براي توليدکنندگان نرم افزار بسيار حايز اهميت بوده و در اين راستا ،شرکت هاي عظيم نرم افزاري بدنبال ارائه بستر مناسب براي طراحي و پياده سازي نرم افزار بر اساس واقعيت هاي موجود، خصوصا" پديده شگرف اينترنت مي باشند . ماکروسافت، بعنوان يکي از شرکت هاي عظيم نرم افزاري ،پروژه دات نت را مطرح و در نهايت آن را در اختيار علاقه مندان قرار داده است . XML ، در دات نت داراي نقشي بسيار مهم و محوري بوده و لازم است با جايگاه آن بصورت اصولي آشنا شويم . در اين مقاله، به بررسي جايگاه XML در دات نت پرداخته مي گردد .

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

سرويس هاي وب XML
ساختار و بدنه دات نت، محيطي مناسب براي ايجاد سرويس هاي وب XML است . کاربران قادر به فراخواني سرويس ها بکمک پروتکل هاي استاندارد شده اي نظير : SOAP ، UDDI و XML مي باشند. سرويس هاي وب XML ، با استفاده از کلاس ها و Namespace هائي که توسط کنسرسيوم وب استاندارد شده اند، ايجاد مي گردند. سرويس هاي وب XML ، روشي مطلوب بمنظور اشتراک ، سازماندهي و انجام عمليات متفاوت در رابطه با داده ها مي باشند .

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

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

يکپارچگي بين برنامه هاي مختلف
دستيابي به داده ها ي مشترک بين شرکت هاي متعدد ، توسط برنامه هاي متفاوت موجود بر روي سيستم هاي عامل گوناگون ، به يک ضرورت مهم تبديل شده است . بمنظور مبادله اطلاعات بين برنامه هاي متقاضي ، مي بايست در مرحله اول داده ها، ساختيافته بوده تا زمينه استفاده از آنان فراهم گردد.برخي از داده ها در سيستم هاي هاي سلسه مراتبي، شامل سندهاي XML ، برخي ديگر در بانک هاي اطلاعاتي رابطه اي، نظير SQL Server و برخي ديگر، بصورت غيرساختيافته و در فايل هائي تخت (Flat) ذخيره شده اند .

ترجمه بين فرمت هاي داده متفاوت
يکي از بزرگترين مشکلات موجود در بکارگيري فراگير و يکپارچه برنامه هاي کامپيوتري خصوصا" بر روي بستر اينترنت ، استفاده از داده ها با فرمت هاي متفاوت، توسط اين نوع از برنامه ها است . اين مشکلات شامل موارد زير است :

فرمت هاي متفاوت XML . فايل هاي XML مي توانند از گرامرهاي متفاوتي استفاده نمايند . مثلا" گرامري، صرفا" از المان ها استفاده نموده و در گرامري ديگر ، از المان ها بهمراه خصلت هاي مربوطه استفاده مي گردد . شرکت ها و موسسات تجاري براي غلبه بر اين نوع مشکل تبديل داده ،مي توانند از تمپليت هاي استاندارد شده استفاده نمايند.

توليد XML از داده هائي با فرمت ديگر . داده ها ي موجود در هر سازمان با فرمت هاي متفاوتي نظير: EDIFACT ,ANSI ,X12 , XML , فايل هاي CSV)Comma Separated value) ، فايل هاي Tab -Separated و موارد ديگر، ذخيره شده اند. در اين راستا ، مي توان ساختاري استاندارد براي داده ها ايجاد تا زمينه استفاده از آنان براي ساير برنامه ها فراهم گردد .

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

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

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

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

پردازش ( عمليات ) بر روي داده ها
بمنظور انجام عمليات بر روي داده ها، مي بايست يک ساختار، بافتار(Context) لازم را ارائه نمايد . پس از انجام عمليات بر روي داده ها ، مي بايست از ساختاري بمنظور نمايش نتايج استفاده گردد.در اين رابطه موارد زير مورد توجه خواهد بود :

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

تغيير ساختار يک سند . در برخي موارد لازم است به يک سند XML المان و يا خصلتي ، اضافه و يا حذف گردد . بدين ترتيب در ساختار سند موجود تغييراتي بوجود مي آيد.

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

در بخش دوم اين مقاله ، به بررسي استانداردهاي کنسرسيوم وب در دات نت ، کلاس هاي XML در دات نت و امکانات امنيتي در ارتباط با XML ، خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


XML در دات نت ( بخش دوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۲۲ مراجعه امروز
۵۲۳۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
XML در دات نت ( بخش دوم )
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۳/۲/۱۳۸۲ اين مقاله ۱۷۴۹ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.

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

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

Xml Information set : کنسرسيوم وب مشخصاتي را بعنوان مجموعه اطلاعات مرتبط با XML ، استاندارد و ارائه نموده است .استاندارد فوق، شامل مجموعه اي از تعاريف بمنظور استفاده توسط ساير مشخصاتي است که بنوعي به اطلاعات موجود در يک سند XML مراجعه مي نمايند. يک سند XML ، حاوي تعدادي از مجموعه اطلاعات ارائه شده در استاندارد فوق است . مشخصات فوق ، اطلاعات لازم بمنظورتشريح ساختار يک سند XML را ارائه مي نمايد .يک سند XML شامل يک مجموعه اطلاعات است، اگر " خوش - شکل " بوده و محدوديت هاي تعريف شده در رابطه با Namespace را در مجموعه اطلاعات ومشخصات XML ، تامين نمايد . اغلب استانداردهاي XML کنسرسيوم وب، از تعاريف ارائه شده در مشخصه فوق ، اقتباس ( مشتق ) شده اند.براي اطلاعات تکميلي مي توان به آدرس http://www.w3.org/TR/xml-infoset مراجعه کرد .

XML 1.0 Namespace . استاندارد فوق ،ضوابط لازم بمنظور ايجاد يک شي داده بصورت يک سند XML ، را تعريف مي نمايد . مشخصات فوق همچنين ،ساختار فيزيکي و منطقي يک سند XML و ساير خصايص مربوطه را تعريف مي نمايد. براي اطلاعات تکميلي مي توان به آدرس http://www.w3.org/Tr/REC-xml مراجعه استفاده کرد.namespace ها درXML يک namespace را تعريف و نحوه استفاده از namespace در زمان ايجاد يک گرامر XML را که شامل المان ها و خصلت هائي است، مشخص مي نمايد . براي اطلاعات تکميلي مي توان به آدرس http://www.w3.org/TR/REC-xml-names مراجعه کرد .

XML Path Language ( XPath) 1.0 : استاندارد XPath ، گرامر و سمنتيک مورد نياز براي آدرس دهي بخش هاي متفاوت يک سند XML را مشخص مي نمايد. XPath ، همچنين شامل امکانات پايه براي انجام عمليات در رابطه با رشته ها ، اعداد و منطق است . براي مشاهده اطلاعات تکميلي مي توان به آدرس http://www.w3.org/TR/XPath مراجعه کرد .

XSL Transformation (XSLT) 1.0 : استاندارد XSLT ، گرامر و سمنتيک XSLT را تعريف و زباني براي تبديل اسناد XML به فرمت هاي ديگر است . تبديل مورد نظر( بيان شده ) در XSLT يک Style Sheet ناميده مي شود . براي مشاهده اطلاعات تکميلي مي توان به آدرس http://www.w3.org/TR/XSLT مراجعه کرد .

Document Object Model )DOM) : استاندارد DOM سطح يک و دو، اينترفيس لازم را بمنظور دستيابي و انجام عملياتي نظير: بهنگام سازي Style ،محتويات و ساختار يک سند از طريق برنامه نويسي ، فراهم مي نمايد . براي مشاهده اطلاعات تکميلي مي توان به آدرس http://www.w3.org/DOM مراجعه کرد .

XML Schema Definition Language )XSD) : استاندارد XSD ، روشي براي تشريح ساختار ، محتويات و سمنتيک يک سند XML است . Schema امکان استفاده از واژه هاي مشترک را فراهم مي نمايد . براي مشاهده اطلاعات تکميلي مي توان به آدرس http://www.w3.org/XML/Schema مراجعه کرد .

جدول زير نسخه هاي پياده سازي شده هر يک از استانداردهاي فوق را در دات نت نشان مي دهد :
استاندارد کنسرسيوم وب | namespace مربوطه در دات نت
XML 1.0 and Namespaces in XML | System.Xml
XPath | System.Xml System.Xml.XPath
XSLT | System.Xml.Xsl
DOM Level 1 | System.Xml
DOM Level 2 Core | System.Xml
XML Schemas | System.Xml System.Xml.Schemas
XML Schema Object Model(SOM) | System.Xml.Schemas

دات نت با ارائه namespace و کلاس هاي پايه از استانداردهاي ارائه شده توسط کنسرسيوم وب، حمايت مي نمايد . جدول زير نسخه هاي پياده سازي شده استانداردهاي کنسرسيوم وب، در دات نت را نشان مي دهد .

W3C XML standard | .NET Framework namespace | .NET Framework class
XML 1.0 and Namespaces in XML | System.Xml | Not applicable
XPath | System.Xml System.Xml.XPath | XPath base class
XSLT | System.Xml.Xsl | XslTransform base class
DOM Level 1 | System.Xml | XmlDocument class
DOM Level 2 Core | System.Xml | XmlDocument class
XML Schemas | System.Xml System.Xml.Schemas | XmlSchema
XML Schema Object Model(SOM) | System.Xml.Schemas | XmlSchema

مروري بر کلاس هاي XML در دات نت
کلاس هاي پايه تجريدي در دات نت ، اساس مبادله اطلاعات مي باشند . جدول زير کلاس هاي پايه در فريمورک دات نت را نشان مي دهد :

Abstract base class | کلاس های مشتق شده
XmlReader | XmlTextReader XmlNodeReader XmlValidatingReader
XmlWriter | XmlTextWriter
XmlNavigator | XmlPathNavigator
XmlResolver | XmlUrlResolver

مقايسه بين MSXML 4.0 و دات نت
ماکروسافت دو روش متفاوت بمنظور کار با XML ، در اختيار برنامه نويسان قرار داده است :

MSXML، که در ابتدا پارسر XML ناميده مي شد.
کلاس هاي XML فريمورک دات نت
MSXML 4.0 ، با پارسر MSXML جايگزين شده است . عملکرد MSXML 4.0 در اغلب موارد مشابه کلاس هاي فريمورک دات نت است . تفاوت عمده در نحوه استفاده از عناصر است . در MSXML بمنظور ارائه امکانات از اشياء COM)Componenet Object Model) استفاده شده ( ازManaged code استفاده نمي گردد ) و داراي امکانات از قبل ساخته اي براي SAX)Simple API for XML) است .
MSXML 4.0 ، شامل سرويس هاي زير است :

DOM
XSD
XPath 1.0
XSLT 1.0
SAX ( يک مدل برنامه نويسي و مشابه با DOM است )
Schema Object Model)SOM) ، شامل امکانات API اضافه ، بمنظور دستيابي به سندهاي XML Schema از طريق برنامه نويسي است .
کلاس هاي XML فريمورک دات نت ، عمليات مشابهي را نظير MSXML 4.0 انجام مي دهند. طراحي کلاس هاي فوق بگونه اي است که امکان استفاده از آنان در يک محيط مديريت يافته، خصوصا" سرويس هاي وب XML ،وجود دارد .
جدول زير ويژگي هر يک را نشان مي دهد :

استاندارد کنسرسيوم وب | MSXML ( محيط مبتنی بر COM ) | کلاس های XML فريمورک دات نت ( محيط مديريت يافته دات نت )
XML 1.0 and Namespaces in XML | yes | yes
XPath | yes | yes
XSLT | yes | yes
DOM Level 1 | yes | yes
DOM Level 2 Core | no | yes
XML Schemas | yes | yes
XML Schema Object Model(SOM) | yes (فقط خواندنی) | yes
Simple API for Xml (SAX) | yes | no

XML و امنيت در دات نت
XML ،مهمترين امکان ذخيره سازي داده ها و انتقال اطلاعات د ر فريمورک دات نت محسوب مي گردد. بنابراين تمام ملاحظات امنيتي در فريمورک دات نت، به رويکردهاي امنيتي XML مربوط مي گردد . دستيابي به سرويس هاي وب XML مي تواند محدود به سرويس گيرندگان تائيد شده و مجاز باشد( مشابه دستيابي کاربران مجاز به يک وب سايت ) .

مدل مبتني بر شي XML براي رمزنگاري اشياء
کلاس SecurityElement ، مدل XML لازم بمنظور رمزکردن اشياء را ارائه مي نمايد. کلاس فوق ، بمنظور استفاده همراه يک سيستم ايمني در نظرگرفته شده است و امکان استفاده از آن بعنوان يک کلاس شي XML عمومي وجود نخواهد داشت .

XML signature . کنسرسيوم وب در حال پياده سازي مشخصه اي براي امضاء ديجيتالي مبتني بر XML است . System.Security.Cryphtography.xml ،مدلي مبتني بر XML براي استفاده از سيستم امنيتي فريمورک دات نت بوده که از امضاهاي XML حمايت مي نمايد. مدل فوق اين امکان را به اشياء XML خواهد داد که از طريق يک امضاء ديجيتالي تاييد گردند . رمزنگاري باعث حفاظت اطلاعات در مقابل نمايش و يا تغييرات شده وبدين ترتيب يک کانال ايمن ارتباطي ايجاد خواهد شد .

رمزنگاري سرويس هاي وب XML بمنظور انتقال . برنامه هاي مبتني بر دات نت از پروتکل SOAP ، بمنظور ارتباط با سرويس هاي وب XML استفاده مي نمايند( فرمت اوليه پيام ها ) . کتابخانه کلاس فريمورک دات نت ، ضمائم SOAP را بمنظور اجراء ، همراه با يک متد سرويس وب XML ، ارائه مي نمايد . namespace ، شامل کلاس هائي است که پروتکل هاي مورد نياز براي انتقال داده ها را فراهم مي نمايد .

ارسال مدارک تائيد شده .در موارديکه يک سند XML ايمن شده باشد ،بدون ارسال مدارک لازم، امکان دستيابي و استفاده از آن وجود نخواهد داشت. کلاس XmlTextReader ،امکان ارسال مدارک را از طريق استفاده از کلاس CredentialCache موجود در System.Net فراهم مي نمايد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


نمونه هائي از حملات اينترنتي توسط نامه هاي الکترونيکي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۶۳ مراجعه امروز
۴۷۷۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نمونه هائي از حملات اينترنتي توسط نامه هاي الکترونيکي
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۳/۲/۱۳۸۲ اين مقاله ۷۴۸ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.

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

بررسي عملکرد کرم ILOVEYOU
کرم فوق ، در يک اسکريپت ويژوال بيسيک و بصورت فايلي ضميمه در يک نامه الکترونيکي عرضه مي گردد .همزمان با بازنمودن فايل ضميمه توسط کاربران، زمينه فعال شدن کرم فوق، فراهم خواهد شد . عملکرد اين کرم ، بصورت زير است :

نسخه هائي از خود را در فولدر سيستم ويندوز با نام MSKernel32.vbs و LOVE-LETTER-FOR-YOU.vbs تکثير مي نمايد.

نسخه اي از خود را در فولدر ويندوز و با نام Win32DLL.vbs تکثير مي نمايد .

اقدام به تغيير مقادير دو کليد ريجستري زير مي نمايد .کليدهاي فوق، باعث فعال نمودن ( فراخواني ) کرم ، پس از هر بار راه انداري سيستم مي گردند .

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\Run\MSKernel32
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\RunService\Win32DLL

در ادامه، بررسي مي گردد که آيا دايرکتوري سيستم شامل فايل WinFAT32.exe است؟ در صورت وجود فايل فوق( نشاندهنده ويندوز 95 و 98 )، صفحه آغاز برنامه مرورگر اينترنت( IE ) ، به فايل WIN-BUGFIX.exe بر روي سايت www.skyinet.net تبديل مي گردد . فايل فوق از يکي از دايرکتوري هاي موجود در سايت فوق با نام angelcat , chu , koichi دريافت خواهد شد . پس از فعال شدن مرورگر اينترنت ( در زمان آتي ) ، صفحه آغاز ، آدرس فايل مورد نظر را از راه دور مشخص وبدين ترتيب فايل از سايت skyinet اخذ مي گردد . کليد ريجستري صفحه آغاز، در آدرس زير قرار مي گيرد .

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Start Page

ما قادر به دستيابي به www.skyinet.net ، بمنظور اخذ يک نسخه از فايل فوق نمي باشيم . با پيگيري انجام شده بر روي اينترنت مشخص شده است که برنامه فوق ، ممکن است آژانسي بمنظور جمع آوري رمزهاي عبور و ارسال آنها به يک سايت مرکزي از طريق پست الکترونيکي باشد .

ILOVEYOU در ادامه بررسي مي نمايد که آيا ماشين را آلوده کرده است؟ بدين منظور در دايرکتوري مربوط به اخذ فايل ها (Download directory) ، بدنبال فايل WIN-BUGFIX.exe مي گردد . در صورتيکه فايل فوق پيدا گردد ، کدهاي مخرب ، يک کليد RUN را بمنظور فراخواني WIN-BUGFIX.exe از دايرکتوري مربوطه فعال مي نمايند .نشانه گوياي اين کليد ريجستري، بصورت زير است :

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WINBUGFIX

ILOVEYOU در ادامه ، يک فايل با نام LOVE-LETTER-FOR-YOU.HTM در دايرکتوري سيستم ايجاد مي نمايد .فايل Htm ، شامل منطق VBScript بوده که به نسخه مربوطه vbs ارتباط خواهد داشت .

کدهاي مخرب در ادامه ، از طريق نامه الکترونيکي براي افراديکه در ليست دفترچه آدرس مربوط به کاربر مي باشند،اشاعه و توزيع مي شوند . براي هر شخص موجود در دفترچه آدرس، يک پيام الکترونيکي ايجاد و يک نسخه از فايل LOVE-LETTER-FOR-YOU.vbs قبل از ارسال به آن ضميمه مي گردد. پس ازارسال پيام براي تمام افراد موجود در ليست دفترچه آدرس، ILOVEYOU برروي تمام درايوهاي موجود در کامپيوتر ، عمليات خود را تکرار مي نمايد . درصورتيکه درايو يک درايو شناخته شده ( نظير هارد و يا CDROM ) باشد ، در تمام زيرفهرست هاي موجود در درايو مربوطه ، عمليات جستجو براي يافتن فايل هاي با انشعاب vbs , vbe , sct , hta jpg , jpeg . انجام خواهد شد . تمامي فايل ها ي با انشعابات فوق، توسط کدهاي مخرب بازنويسي و يک نسخه از کدهاي مخرب در آنها قرار خواهد گرفت .

در صورتيکه فايلي از نوع mp2 و يا mp3 پيدا گردد، يک نسخه از کدهاي مخرب در فايلي با انشعاب vbs ايجاد و در دايرکتوري مربوطه مستقر مي گردد . نام فايل به نام دايرکتوري بستگي داشته و داراي انشعاب vbs است .

در صورتيکه ILOVEYOU فايلي با نام micr32.exe , mlink.exe mric.ini و يا mirc.hlp را پيدا نمايد، فرض را بر اين خواهد گذاشت که فهرست مربوطه ، يک دايرکتوري شروع IRC)Internet Relay Chat) است وفايلي با نام Script.ini را ايجاد و در محل مربوطه قرار خواهد داد . اسکريپت فوق، زمانيکه برنامه سرويس گيرنده IRC اجراء گردد، شروع به فعاليت نموده و اقدام به ارسال کدهاي مخرب براي تمام کامپيوترهائي که با ميزبان آلوده يک ارتباط IRC ايجاد نموده اند ، خواهد کرد .

بررسي عملکرد ويروس Melissa
Melissa يک ويروس در ارتباط با فايل هاي Word97 و Word2000 بوده که امکان توزيع آن توسط برنامه Microsoft Outlook فراهم مي گردد . ويروس فوق، نسخه هائي از خود را با سرعت بسيار زياد براي کاربران توزيع مي نمايد . نحوه انتشار و گسترش ويروس فوق ، مشابه بروز يک حريق بزرگ در سيستم هاي پست الکترونيکي در يک سازمان و اينترنت بوده که آسيب هاي فراواني را بدنبال خواهد داشت . اين ويروس با نام Mellissa ويا W97M/Melissa (نام کلاسي که شامل ماکرو ويروس است) ناميده مي شود. ويروس فوق، با استفاده از VBA)Visual Basic for Application) سندهاي ايجاد شده توسط Microsoft word را آلوده مي نمايد.( VBA يک زبان مبتني بر اسکريپت بوده که امکان استفاده از آن در مجموعه برنامه هاي آفيس وجود دارد). ويروس فوق سه عمليات اساسي را انجام مي دهد :

Word را آلوده و در ادامه تمام سندهاي فعال شده word را نيز آلوده و.بدين ترتيب امکان توزيع و گسترش آن فراهم مي گردد .

باعث بروز برخي تغييرات در تنظيمات سيستم بمنظور تسهيل در ماموريت خود ( آلودگي اطلاعات ) مي گردد .

با استفاده از برنامه Microsoft Outlook و در ظاهر يک پيام دوستانه ، نمونه هائي از خود را به مقصد آدرس هاي متعدد، ارسال مي نمايد.

زمانيکه يک فايل Word آلوده به ويروس Melissa فعال مي گردد،Melissa به تمپليت سند NORMAL.DOT نيز سرايت مي گردد. محل فوق،مکاني است که Word تنظيمات خاص و پيش فرض در ارتباط با ماکروها را ذخيره مي نمايد . Melissa ، با تکثير خود درون NORMAL.DOT برنامه نصب شده Word را آلوده و بدين ترتيب هر سند و يا تمپليتي که ايجاد مي گردد، ويروس به آن اضافه خواهد شد. بنابراين در موارديکه يک سند فعال و يا غيرفعال مي گردد ، زمينه اجراي ويروس فراهم خواهد شد . در صورتيکه کليد ريجستري زيردر کامپيوتري وجود داشته باشد، نشاندهنده آلودگي سيستم به ويروس Melissa است . مقدار کليد ريجستري فوق " by Kwyjibo..." است .

HKEY_CURRENT_USER\Software\Microsoft\Office\Melissa

بررسي عملکرد ويروس BubbleBoy
BubbleBoy يک کرم مبتني بر اسکريپت در يک نامه الکترونيکي بوده که از نقاط آسيب پذير IE 5.0 استفاده و باعث آسيب سيستم هاي مبتني بر ويندوز 98 و 2000 مي گردد . کرم فوق بصورت Html در يک پيام الکترونيکي قرار مي گيرد. در زمان مشاهده نامه هاي الکترونيکي با استفاده از برنامه Outlook Expree بصورت حتي پيش نمايش ، زمينه فعال شدن کرم فوق فراهم خواهد شد . در صورتيکه از برنامه Microsoft Outlook استفاده مي گردد، پس از فعال شدن( باز شدن ) نامه الکترونيکي، زمينه اجراي آن فراهم خواهد شد .کرم فوق با استفاده از VBScript نوشته شده و پس از فراهم شدن شرايط لازم براي اجراء ، فايلي با نام UPDATW.HTA را در دايرکتوري Startup ويندوز ايجاد مي نمايد . فايل فوق تغييرات زير رادر ريجستري سيستم ، انجام خواهد داد :

تغيير Registered owner به BubbleBoy

تغيير Registered organization به Vandelay Industries

کرم فوق درادامه اقدام به تکثير خود از طريق يک نامه الکترونيکي به تمام افراد موجود در ليست دفترچه آدرس برنامه Outlook Express مي نمايد . علت انتشار و اجراي کرم فوق بدليل وجود نقص امنيتي در تکنولوژي ActiveX ماکروسافت است . اشکال فوق به عناصر scriplet , typelib و Eyedog در ActiveX ، مربوط مي گردد . عناصر فوق بعنوان المان هاي امين و تائيد شده در نظر گرفته شده و اين امکان به آنها داده خواهد شد که کنترل عمليات را بر اساس حقوق کاربران بر روي ماشين مربوطه انجام دهند . ماکروسافت بمنظور مقابله با مشکل فوق اقدام به عرضه يک Patch امنيتي براي برنامه IE نموده است .

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


بررسي فشردن كليد توسط كاربر در هنگام اجراي يك حلقه ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۶۶ مراجعه امروز
۴۱۸۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بررسي فشردن كليد توسط كاربر در هنگام اجراي يك حلقه
نويسنده : بابک ساطلي
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۲/۱۳۸۲ اين مقاله ۲۴۰۹ بار مطالعه شده است
۳۳ نفر تا به حال به اين مقاله رای داده اند.
زماني كه شما از حلقه ها يا همان Loop در برنامه خود استفاده مي كنيد
در برخي مواقع شايد لازم باشد كه كاربر بتواند اين حلقه را در هر لحظه اي
متوقف سازد. در اكثر برنامه هاي ديده شده اين عمل انجام نمي شود و كاربر
بايد زمان طولاني براي رسيدن به آخر حلقه صبر كند.

به طور مثال فرض كنيد برنامه شما مي خواهد يك سري اعداد اتفاقي توليد كند
و به كاربر نمايش دهد. تعداد اين اعداد شايد به صدهزار عدد برسد. حال فرض
كنيد حلقه اي بسازيد كه براي كاربر ، اين اعداد را يكي يكي نشان دهد.

شايد كاربر شما در حين كار خسته شود و بخواهد اين عمل را لغو كند.
اما اگر به صورت معمول اين حلقه را اجرا كنيد ، وي مجبور است تا انتهاي حلقه
صبر كند و اين كار بسيار خسته كننده اي مي باشد.

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

اما را حل چيست ؟ آيا راهي وجود دارد كه به كاربر اجازه دهد تا عمليات را
در هر زماني لغو كند ؟

جواب اين سوال در استفاده از دستور ProcessMessages خلاصه مي شود.
به كار بردن اين دستور باعث مي شود تا دلفي متوجه باشد كه ديگر دستورات
برنامه را حين عمليات زير نظر بگيرد و آنها را اجرا كند.

به طور مثال با به كار بردن اين دستور ، دلفي مي تواند فشار دادن يك كليد
توسط كاربر را هنگام اجراي حلقه متوجه شود و آن را اجرا كند.

اما در صورتي كه از اين دستور استفاده نكنيم ، دلفي فشاردادن كليد را متوجه
مي شود ، اما صبر مي كند تا حلقه تمام شود و سپس دستورات بعدي را
اجرا مي كند.

اين دستور ، به صورت Application.ProcessMessages به كار مي رود.

حال به كد زير دقت فرماييد :

procedure TForm1.Button1Click(Sender: TObject);
var
LoopAborted: Boolean;
i: Integer;
begin
LoopAborted := False;
i := 0;
repeat

Label1.Caption := IntToStr(i);
Application.ProcessMessages;

if GetKeyState(VK_Escape) and 128 = 128 then
begin
LoopAborted := True;
Break;
end;

Inc(i);
until i = 100000;
if LoopAborted then
ShowMessage('User has aborted the loop!');
end;

همان طور كه ملاحظه مي كنيد دستور ذكر شده در داخل حلقه گنجانده
شده تا فشار دادن كليد ESC توسط كاربر در زمان اجراي حلقه شناخته شود.

اين دستور به كاربر اين امكان را مي دهد تا هر لحظه اي كه تمايل داشت
اجراي حلقه را لغو كند.

توجه داشته باشيد كه به كار بردن دستور ProcessMessages تنها محدود به
حلقه ها نمي باشد و در كل هر جايي كه لازم باشد تا چندين دستور به همراه
هم اجرا شوند ، اين دستور نقش اصلي را ايفا مي كند.

موفق باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


ارسال ايميل در ASP با استفاده از آبجکت CDONTS ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۹۲ مراجعه امروز
۵۲۰۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ارسال ايميل در ASP با استفاده از آبجکت CDONTS
نويسنده : مديريت سايت
موضوع : ASP [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۲/۱۳۸۲ اين مقاله ۳۹۱۴ بار مطالعه شده است
۵۵ نفر تا به حال به اين مقاله رای داده اند.

با استفاده از آبجکت CDONTS که يکي از کامپوننتهاي ويندوز سرور 2000 و ان تي مي باشد به راحتي مي توان در اسکريپتهاي سمت سرور
ايميل ارسال کرد.
طريقه استفاده به شکل زير مي باشد
<%
Dim objNewMail
Set objNewMail = Server.CreateObject("CDONTS.NewMail")
%>
مقادير قابل تنظيم براي اين آبجکت به شرح جدول زير مي باشد.
From | يک مقدار رشته اي که آدرس پست الکترونيکي فرستنده را مشخص مي کند (به طور مثال Me@somewhere.com)
To | يک مقدار رشته اي که آدرس پست الکترونيکي گيرنده را مشخص مي کند. (به طور مثال, someone@somewhere.com) آدرس گيرنده هاي مختلف با استفاده از علامت روبرو امکان پذير ميباشد ";"
Subject | عنوان پيام
Body | متن پيام
Cc | آدرس پست الکترونيکي شخصي که قرار است يک کپي از نامه را دريافت کند
Bcc | آدرس الکترونيکي شخصي که قرار است يک کپي از نامه را دريافت کند ( بدون اطلاع دريافت کننده نامه)
Importance | يک مقدار عددي که نشان دهنده در جه اهميت نامه مي باشد (براي مثال خيلي مهم , مهم , عادي )
BodyFormat | يک مقدار عددي که نشان دهنده فرمت اطلاعات متن نامه مي باشد ObjMail.BodyFormat = 0 (HTML format) ObjMail.BodyFormat = 1 (متن عادي)
MailFormat | يک مقدار عددي که نشان دهنده فرمت اطلاعات نامه مي باشد ObjMail.MailFormat = 0 (Mime format) ObjMail.MailFormat = 1 (متن عادي)

متودهاي اين آبجکت
AttachFile | اين متود يک فايل را به نامه پيوست مي کند
AttachURL | اين متود آدرس فايل پيوست شده را تخصيص مي دهد
Send | اين متود نامه را ارسال مي کند
بعد از ارسال ايميل مقادير در حافظه باقي مي ماند و شما بايد حافظه را خالي کنيد. همچنين براي ارسال يک ايميل جديد بايد يک آبجکت جديد
ايجاد کرده و از آن استفاده کنيد. کد زير نحوه استفاده از اين آبجکت را در asp نشان مي دهد.

<%
Option Explicit

Dim objNewMail

' ابتدا يک آبجکت از نوع cdonts ايجاد مي کنيم
Set objNewMail = Server.CreateObject("CDONTS.NewMail")

' بعد از ايجاد آبجکت ما بايد مقادير مربوط به آن را تنظيم کنيم

objNewMail.From = "webmaster@iran.com"
objNewMail.To = "test@yahoo.com"

objNewMail.Subject = "اين يک ايميل تستي است"
objNewMail.Body = "اين متن نامه است"
objNewMail.Send

' بعد از ارسال ايميل با استفاده از کد زير فضاي حافظه را خالي مي کنيم

Set objNewMail = Nothing

Response.Write "ايميل ارسال شد"

%>

موفق و پيروز باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


كدگذاري اطلاعات متني به روش Encrypt در دلفي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۷۲ مراجعه امروز
۴۱۸۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كدگذاري اطلاعات متني به روش Encrypt در دلفي
نويسنده : بابک ساطلي
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۲/۱۳۸۲ اين مقاله ۲۰۶۲ بار مطالعه شده است
۱۲ نفر تا به حال به اين مقاله رای داده اند.

يكي از روشهاي جالب براي ساختن فايلهاي نوشتاري كه در كنار برنامه
قرار مي گيرند و در برنامه از آنها استفاده مي شود روش Encrypt مي باشد.

توسط اين روش ، شما نوشته هاي خود را به صورت كدگذاري شده در فايل
ضبط مي كنيد تا ديگران نتوانند از نوشته هاي شما كه به صورت يك فايل
آماده در كنار برنامه شما است استفاده كنند. اگر كاربري اين فايل را ببيند
چيزي از آن متوجه نمي شود و از خير استفاده از آن مي گذرد.

شما مي توانيد با روش برعكس Decrypt آن نوشته هاي كد گذاري شده را
به حالت اوليه خود يعني نوشته هاي معمولي بازگردانيد و در برنامه خود
استفاده نماييد.

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

حال بياييد از نظر تئوري اين عمل را بررسي كنيم.

در رياضيات عملي به نام تبديل وجود دارد. به طور مثال فرض كنيد ما يك عدد
داريم (5). حال مي خواهيم با استفاده از تبديلات آن را Encrypt كنيم.
اگر من اين عدد را با 2 جمع كنم ، سپس ضربدر 4 كنم ، بعد تقسيم بر 2
و سپس منهاي 1 كنم ، عدد 13 حاصل مي شود.

حال اگر عمل برعكس را انجام دهم ، يعني عددي كه در حال حاضر دارم
( كه عدد 13 مي باشد ) را به علاوه 1 ، سپس ضربدر 2 ، تقسيم بر 4 و
منهاي 2 كنم عدد اوليه من يعني 5 به دست خواهد آمد.

به اين روش تبديل و برعكس آن Encrypt و Decrypt مي گويند.
خوب شايد بگوييد چرا از ابتدا عدد 5 را به علاوه 8 نكردم تا عدد 13 به دست
بيايد ؟ اين تنها يك مثال ساده بود تا شما متوجه بشيد كه چگونه رشته ها
به صورت كدگذاري شده در مي آيند.

حال بياييد همين روش را با رشته ها تكرار كنيم.
به طور مثال من كلمه Test را دارم. حال كاراكتر اوليه آن را از نظر مقدار دهي
كاراكترها 2 كاراكتر به جلو مي برم كه مي شود V.
سپس كاراكتر بعدي يا e را به همين روش 3 كاراكتر به عقب مي برم كه
مي شود b. به همين روش باقي كاراكترها را تغيير مي دهم.
به طور مثال نتيجه حاصل شده به اين صورت است :
Test -> Venh
توجه كنيد كه رشته جديد بدست آمده هيچگونه ارتباطي با رشته اوليه آن
ندارد و هيچ كاربري نمي تواند بدون داشتن جزئيات تغييرات ، آن را به كاراكتر
اوليه بازگرداند.

حال اگر محاسبات تغيير را بسيار پيچيده كنيم ، ديگر پيدا كردن رشته اوليه
بسيار مشكل مي شود و هيچ كاربري نمي تواند آن را پيدا كند.

در برنامه به صورت برعكس عمل مي كنيم ، يعني كاراكتر اول را 2 عدد به
عقب بازمي گردانيم ، دومي را 3 كاراكتر به جلو مي بريم و ...
كه نتيجه مي شود :
Venh -> Test

اين از نظر تئوري ، اما بياييد در عمل كدنويسي دلفي آن را ببينيم :

function Encrypt(Text : string; Key1, Key2, Key3, Key4 : Integer) : string;
var
BufS, Hexa, Hexa1, Hexa2 : string;
BufI, BufI2, Sc, Sl, Num1, Num2, Num3, Num4, Res1, Res2, Res3, Res4 : Integer;
begin
Sl := Length(Text);
Sc := 0;
BufS := '';
if (Key1 in [1 .. 120]) and (Key2 in [1 .. 120]) and (Key3 in [1 .. 120]) and (Key4 in [1 .. 120]) then
begin
BufI := Key1 * Key4;
BufI2 := Key3 * Key2;
BufI := BufI - BufI2;
if BufI = 0 then
begin
Result := '';
Exit;
end;
end
else
begin
Result := '';
Exit;
end;
repeat
Inc(Sc);
if Sc > Sl then Num1 := 0 else Num1 := Ord(Text[Sc]);
Inc(Sc);
if Sc > Sl then Num2 := 0 else Num2 := Ord(Text[Sc]);
Inc(Sc);
if Sc > Sl then Num3 := 0 else Num3 := Ord(Text[Sc]);
Inc(sc);
if Sc > Sl then Num4 := 0 else Num4 := Ord(Text[Sc]);
Res1 := Num1 * Key1;
BufI := Num2 * Key3;
Res1 := Res1 + BufI;
Res2 := Num1 * Key2;
BufI := Num2 * Key4;
Res2 := Res2 + BufI;
Res3 := Num3 * Key1;
BufI := Num4 * Key3;
Res3 := Res3 + BufI;
Res4 := Num3 * Key2;
BufI := Num4 * Key4;
Res4 := Res4 + BufI;
for BufI := 1 to 4 do
begin
case BufI of
1 : Hexa := IntToHex(Res1, 4);
2 : Hexa := IntToHex(Res2, 4);
3 : Hexa := IntToHex(Res3, 4);
4 : Hexa := IntToHex(Res4, 4);
end;
Hexa1 := '$' + Hexa[1] + Hexa[2];
Hexa2 := '$' + Hexa[3] + Hexa[4];
if (Hexa1 = '$00') and (Hexa2 = '$00') then
begin
Hexa1 := '$FF';
Hexa2 := '$FF';
end;
if Hexa1 = '$00' then Hexa1 := '$FE';
if Hexa2 = '$00' then
begin
Hexa2 := Hexa1;
Hexa1 := '$FD';
end;
BufS := BufS + Chr(StrToInt(Hexa1)) + Chr(StrToInt(Hexa2));
end;
until Sc >= Sl;
Result := BufS;
end;

همان طور كه مشاهده مي فرماييد ما با استفاده از يك Function يك رشته
را گرفته ، سپس متناسب با اعداد انتخابي داده شده ، كه همان عامل تغييرات
مي باشند ، رشته جديد به صورت كدگذاري شده مي سازيم.
حال به اين كد نگاهي بياندازيد :

function Decrypt(Text : string; Key1, Key2, Key3, Key4 : Integer) : string;
var
BufS, Hexa1, Hexa2 : string;
BufI, BufI2, Divzr, Sc, Sl, Num1, Num2, Num3, Num4, Res1, Res2, Res3, Res4 : Integer;
begin
Sl := Length(Text);
Sc := 0;
BufS := '';
if (Key1 in [1 .. 120]) and (Key2 in [1 .. 120]) and (Key3 in [1 .. 120]) and (Key4 in [1 .. 120]) then
begin
Divzr := Key1 * Key4;
BufI2 := Key3 * Key2;
Divzr := Divzr - BufI2;
if Divzr = 0 then
begin
Result := '';
Exit;
end;
end
else
begin
Result := '';
Exit;
end;
repeat
for BufI := 1 to 4 do
begin
Inc(Sc);
Hexa1 := IntToHex(Ord(Text[Sc]), 2);
Inc(Sc);
Hexa2 := IntToHex(Ord(Text[Sc]), 2);
if Hexa1 = 'FF' then
begin
Hexa1 := '00';
Hexa2 := '00';
end;
if Hexa1 = 'FE' then Hexa1 := '00';
if Hexa1 = 'FD' then
begin
Hexa1 := Hexa2;
Hexa2 := '00';
end;
case BufI of
1 : Res1 := StrToInt('$' + Hexa1 + Hexa2);
2 : Res2 := StrToInt('$' + Hexa1 + Hexa2);
3 : Res3 := StrToInt('$' + Hexa1 + Hexa2);
4 : Res4 := StrToInt('$' + Hexa1 + Hexa2);
end;
end;
BufI := Res1 * Key4;
BufI2 := Res2 * Key3;
Num1 := BufI - BufI2;
Num1 := Num1 div Divzr;
BufI := Res2 * Key1;
BufI2 := Res1 * Key2;
Num2 := BufI - BufI2;
Num2 := Num2 div Divzr;
BufI := Res3 * Key4;
BufI2 := Res4 * Key3;
Num3 := BufI - BufI2;
Num3 := Num3 div Divzr;
BufI := Res4 * Key1;
BufI2 := Res3 * Key2;
Num4 := BufI - BufI2;
Num4 := Num4 div Divzr;
BufS := BufS + Chr(Num1) + Chr(Num2) + Chr(Num3) + Chr(Num4);
until Sc >= Sl;
Result := BufS;
end;

در اينجا هم عمل برعكس را انجام داده ايم ، يعني رشته كدشده را به حالت
اوليه خود بازگردانديم.

توجه كنيد كه اعداد انتخابي براي كد گذاري ، كه همان Key1, Key2, Key3, Key4
مي باشند ، كاملاْ به صورت انتخابي و مي بايست بين دو عدد 1 تا 120
انتخاب شوند ، در غير اين صورت نتيجه درست حاصل نمي شود.

با اين روش مي توانيد اطلاعات متني خود را ، به خصوص در بانكهاي داده اي
به صورت كدگذاري شده تبديل نماييد. در اين صورت با خيالي آسوده مي توانيد
بانك خود را بدون هيچگونه كلمه رمز در كنار برنامه خود منتشر كنيد.

موفق باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


تشخيص ورود و خروج CD از CD-Rom ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۶۹ مراجعه امروز
۴۱۸۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تشخيص ورود و خروج CD از CD-Rom
نويسنده : بابک ساطلي
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۳۰/۲/۱۳۸۲ اين مقاله ۲۲۸۲ بار مطالعه شده است
۱۸ نفر تا به حال به اين مقاله رای داده اند.

برخي مواقع بعضي از برنامه هاي شما احتياج به خواندن اطلاعات از روي
CD را دارند. قبل از اجراي برنامه مي توان با استفاده از دستورات مختلفي
مانند FileExists وجود CD مورد نظر در CD-Rom را بررسي كرد و در صورت صحيح
بودن آن برنامه را اجرا كرد.

اما اگر كاربر در هنگام اجراي برنامه CD حاوي اطلاعات را از CD-Rom خارج كند
به چه صورت مي توان آن را تشخيص داد.

شايد بررسي مكرر توسط دستوراتي از قبيل FileExists كار درستي نباشد.
ويندوز براي شما يك دستور تدارك ديده كه توسط آن مي توانيد وارد و خارج شدن
CD از CD-Rom را تشخيص دهيد.

زماني كه شما يك CD را وارد CD-Rom مي كنيد آن به عنوان يك Device جديد
براي ويندوز شناخته مي شود. پس از اين روش مي توان وارد و خارج كردن آن را
در هنگام اجراي برنامه تشخيص داد.

به كد زير توجه فرماييد :

type
TForm1 = class(TForm)
private
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
// اين قسمت فراموش نشود
public

end;

{...}

implementation

{$R *.DFM}

procedure TForm1.WMDeviceChange(var Msg: TMessage);
const
DBT_DEVICEARRIVAL = $8000; // system detected a new device
DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone
var
myMsg: string;
begin
inherited;
case Msg.wParam of
DBT_DEVICEARRIVAL: myMsg := 'CD inserted!';
DBT_DEVICEREMOVECOMPLETE: myMsg := 'CD removed!';
end;
ShowMessage(myMsg);
end;

به همين سادگي مي توان اين عمل را تشخيص داد.
البته راههاي ديگري نيز براي تشخيص اين اعمال وجود دارند اما بهترين
و راحت ترين راه ممكن ، همان راهي است كه من براي شما نوشته ام.

از اين كد در برنامه هاي خود استفاده كنيد و جلوي Error هاي برنامه را در
صورت عدم وجود CD در CD-Rom بگيريد.

برنامه را اجرا كنيد ، سپس يك CD در درايو قرار دهيد ، بار ديگر CD را از
درايو خارج نماييد و نتيجه آن را مشاهده كنيد.

موفق باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


نوشتن يك DLL در دلفي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۷۵ مراجعه امروز
۴۱۹۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نوشتن يك DLL در دلفي
نويسنده : بهرام وکيلي
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱/۳/۱۳۸۲ اين مقاله ۲۶۴۲ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.
سلام
در ادامه بحثي كه مدتي پيش داشتيم بنده تصميم گرفتم كه به ساخت يك DLL بپردازم ... براي آشنايي ديگر دوستان با نحوه نوشتن DLL و همچنين راهنمايي اساتيد عزيز تصميم گرفتم اين مقاله را بنويسم

نوشتن يك DLL در دلفي
1) تشكيل يك فايل كتابخانه اي
File ->New ? DLL Wizard
فايل ايجاد شده مانند متن زير خواهد بود
library Project2;

uses
SysUtils,
Classes;

{$R *.res}

begin
end.
كه تفسير ان بصورت زير است
library نام كتابخانه ;

Uses
يونيتهاي مرجع (مثلا اگر از پايگاه داده اي استفاده مي كنيد بايد نام DBTablesرا قيد كنيد)
SysUtils,
Classes;
Const
…………
Type
…………
Var
………….
Procedure (……….);STDCALL;
Begin
…………………..
…………………..
…………………..
…………………..
End;
{$R *.res}
Export
نام زير برنامه1 ;
Export
نام زير برنامه2 ;
Begin
دستورات ثابت بهنگام احضار DLL
end.

نكته :
اگر فرمهارا بصورت ديناميك مي سازيد :
Form1:=Tform.Create(Self)
Form1.Free
بايد متغيرSelf را بصورت زير تعريف كنيد :
Var
Self : TComponent;

نكته :
بجز كلمه STDCALLميتوان كلمات زير را براي نحوه صدازدن پروسيجر مطرح كرد
Directive | Parameter order | Clean-up | Passes parameters in registers?
register | Left-to-right | Routine | Yes
pascal | Left-to-right | Routine | No
Cdecl | Right-to-left | Caller | No
stdcall | Right-to-left | Routine | No
safecall | Right-to-left | Routine | No

نكته :
در مورد استفاده از String ها در DLLها هشدارهاي فراواني داده شده است بهتر است در چنين مواردي كه نياز به ارسال و يا دريافت String داريد حتما به دو پند زير توجه فرماييد
الف ) در مورد مقدار باز گشتي از يك فانكشن سعي كنيد از Pcharو يا PansiChar استفاده كنيد (كه با 2 تابع String, Pcharمي توانيد تبديلات را انجام دهيد)
ب) در DLLسعي كنيد از رشته به عنوان يك آرايه استفاده نكنيد (A[1])

با مسايل گفته شده به نمونه برنامه اي شبيه به اين ميرسيم :
library MyMsgs;

uses
SysUtils,
Classes,
Controls,
Forms,
WinProcs,
ExtCtrls,
Buttons,
StdCtrls,
SysInfoCtrls;
Function IsBlank(St:String):Boolean;StdCall;
Const
Blank=' ';
begin
If St=Copy(Blank,1,Length(St)) Then
IsBlank:=True
Else
IsBlank:=False;
end;
exports
IsBlank;

begin

end.

2) استفاده از يك DLL در برنامه
براي استفاده از DLLدر يك برنامه 2 روش وجود دارد
الف ) بارگذاري بصورت اتوماتيك
با قيد كردن نام تابع خروجي DLLدر برنامه مقصد بصورت
implementation

{$R *.dfm}
Function IsBlank(St:String):Boolean;StdCall; external 'MyMsgs.Dll';

ب ) بارگذاري بصورت ديناميك
كه با كمك دستور Loadlibrary و توابع كمكي آن انجام مي شود (شرح كامل در Helpدلفي )

همچنين مي توانيد با ايجاد يك Unit ليست توابع را در اختيار كاربر قرار دهيد

3) مشكلات و سوالات من
تا اينجا نوشتن يك DLLرا بصورت ساده مشاهده كرديم .... اما هدفي كه من براي اينكار داشتم استفاده از يك فرم آماده در DLLبود براي اينكار فرم مذكور را Add To Project كردم و به نتيجه رسيدم :
library MyMsgs;

uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Wintypes,
WinProcs,
ExtCtrls,
Buttons,
StdCtrls,
DbTables,
TestForm in 'TestForm.pas' {Fname};

Var Self : TComponent;
Procedure ShowTestForm;StdCall;
Var
TestForm : TForm;
Begin
Application.CreateForm(TFname, Fname);
FName.ShowModal;
FName.Free;
End;
كه TestForm همان فرم آماده اي بود كه قبلا ايجاد كرده بودم
اما وقتي يك سلسه عمليات ديگر به ‏TestForm اضافه كردم (مانند ايجاد يك فرم ديگر و نمايش و آزاد كردن ان) بهنگام بازگشت از فرم دوم كه نام انرا Dform مي گذاريم با پيامي مبني بر نامشخص بودن Parentفرم مواجه شدم
براي حل اين مشكل نام فرم مادر )‏TestForm) را بصورت پارامتريك قيد كردم
اينكار باعث شد تا 1 بار عمليات درست انجام شود ولي در بار بعد سيستم اعلام خطا و برنامه اصلي ببندد شرح عمليات بصورت زير است
برنامه اصلي
var
Form1: TForm1;
Procedure DoRep(WorkForm:TForm);Stdcall;External 'Rep.Dll';
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
DoRep(Form1);
end;
برنامه DLL

library Rep;

uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Wintypes,
WinProcs,
ExtCtrls,
Buttons,
StdCtrls,
DbTables,
DbGrids,
Pset in 'Pset.pas' {PrinterSetup};

Procedure DoRep(WorkForm:TForm);Stdcall;
Begin
Try
PrinterSetup.ReportIt (WorkForm); فرم اول
Except

End;
End;
exports
DoRep;
begin
Application.Initialize;
Application.CreateForm(TPrinterSetUp,PrinterSetUp);
end.

برنامه فرم اضافه شده به DLL
procedure TPrinterSetup. ReportIt(InFormName : TForm);
var
aReport : TQuickRep;
begin
aReport :=TQuickRep.Create(Self);
aReport.Parent:=InFormName;
…………………
…………………
areport.preview;
aReport.Free;
End;
حال از اساتيد محترم چند سوال دارم
I) ايا استفاده از DLL را براي برنامه هاي طولاني و حجيم استفاده مي كنيد يا خير .... يكي از DLLهايي كه من ايجاد كردم به تنهايي 1 مگا بايت شد ... اين باعث نگراني من است كه چنين DLLاي اياباعث از بين رفتن RESOURCE ها خواهد شد يا خير
II) برخي در حين كار به من توصيه كردند كه بجاي وقت گذاشتن روي DLLبسراغ ابزار مطمئن تري بروم .... انها معتقد هستند كه DLLها داراي امنيت بالا ولي سرعت پايين مي باشند ... ايا اين حقيقت دارد ؟
III) در DLLآيا استفاده از فرمها را با روش بالا مجاز مي دانيد يا خير

ممنون و متشكر .... در ضمن من يه كمي اين مقاله را خلاصه كردم ... ولي چند برنامه نمونه دارم كه اگر كسي ميخواهد به من Email بزند

کيفيت مقاله :
عالی خوب متوسط ضعيف


چرخاندن يك تصوير با زواياي مختلف ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۷۸ مراجعه امروز
۴۱۹۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چرخاندن يك تصوير با زواياي مختلف
نويسنده : بابک ساطلي
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۶/۳/۱۳۸۲ اين مقاله ۲۰۷۵ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

اين مقاله مناسب كاربراني مي باشد كه استفاده زيادي
از گرافيك در برنامه هاي خودشان مي كنند. توسط اين مقاله
مي توانيد تا يك تصوير نقشه بيتي را در داخل صفحه
با زواياي مختلف بچرخانيد .

( شكل شماره – 1 )

اجازه دهيد تا در ابتدا نگاهي به اين موضوع از نظر رياضيات
بياندازيم. از نظر رياضيات ، هر نقطه اي مي تواند حول
يك نقطه ديگر و با زواياي مختلف بچرخد. اگر به شكل شماره 1
توجه فرماييد ، خواهيد ديد كه نقطه ( يا نيم خط ( P مي تواند
حول نقطه O و در زواياي مختلفي بچرخد.

فرمولي كه در رياضي براي چرخاندن يك نقطه حول نقطه ثابت
و با زاويه مشخص است ، بدين صورت مي باشد :

حال اگر بخواهيم نقطه مذكور را حول يك نقطه ديگر بچرخانيم
به اين فرمول احتياج پيدا خواهيم كرد :

اين فرمولها به صورت ماتريسي نوشته شده اند.
به طور كلي ماتريسها كمك بسيار زيادي در رابطه با گرافيك
و تغييرات آن اعمال مي كنند. در بسياري از روشهاي ويرايش
يك تصوير يا گرافيك ، ما از ماتريسها كمك مي گيريم.

حال اجازه دهيد اين فرمول را به دستورات دلفي تبديل كنيم
و نتيجه آن را مشاهده كنيم ...

كد:
CONST
MaxPixelCount = 32768;

TYPE
TRGBTripleArray = ARRAY[0..MaxPixelCount-1] OF TRGBTriple;
pRGBTripleArray = ^TRGBTripleArray;
...

// "Simple" approach. For pixel (i,j), use "reverse" rotation to find
// where the rotated pixel must have been before the rotation.
// Don't bother with center of pixel adjustment.
// Assumes input BitmapOriginal has PixelFormat = pf24bit.
FUNCTION RotateBitmapMethod1 (CONST BitmapOriginal: TBitmap;
CONST iRotationAxis, jRotationAxis: INTEGER;
CONST AngleOfRotation: DOUBLE {radians} ): TBitmap;

VAR
cosTheta : EXTENDED;
i : INTEGER;
iOriginal : INTEGER;
iPrime : INTEGER;
j : INTEGER;
jOriginal : INTEGER;
jPrime : INTEGER;
RowOriginal: pRGBTripleArray;
RowRotated : pRGBTRipleArray;
sinTheta : EXTENDED;
BEGIN
// The size of BitmapRotated is the same as BitmapOriginal. PixelFormat
// must also match since 24-bit GBR triplets are assumed in ScanLine.
RESULT := TBitmap.Create;
RESULT.Width := BitmapOriginal.Width;
RESULT.Height := BitmapOriginal.Height;
RESULT.PixelFormat := pf24bit; // Force this

// Get SIN and COS in single call from math library
sincos(AngleOfRotation, sinTheta, cosTheta);

// If no math library, then use this:
// sinTheta := SIN(AngleOfRotation);
// cosTheta := COS(AngleOfRotation);

// Step through each row of rotated image.
FOR j := RESULT.Height-1 DOWNTO 0 DO
BEGIN
RowRotated := RESULT.Scanline[j];
jPrime := j - jRotationAxis;

FOR i := RESULT.Width-1 DOWNTO 0 DO
BEGIN
iPrime := i - iRotationAxis;
iOriginal := iRotationAxis + ROUND(iPrime * CosTheta - jPrime * sinTheta);
jOriginal := jRotationAxis + ROUND(iPrime * sinTheta + jPrime * cosTheta);

// Make sure (iOriginal, jOriginal) is in BitmapOriginal. If not,
// assign blue color to corner points.
IF (iOriginal >= 0) AND (iOriginal <= BitmapOriginal.Width-1) AND
(jOriginal >= 0) AND (jOriginal <= BitmapOriginal.Height-1)
THEN BEGIN
// Assign pixel from rotated space to current pixel in BitmapRotated
RowOriginal := BitmapOriginal.Scanline[jOriginal];
RowRotated[i] := RowOriginal[iOriginal]
END
ELSE BEGIN
RowRotated[i].rgbtBlue := 255; // assign "corner" color
RowRotated[i].rgbtGreen := 0;
RowRotated[i].rgbtRed := 0
END

END
END
END {RotateBitmapMethod1};

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

در ابتدا ما به صورت موقت يك تصوير نقشه بيتي ديگر مي سازيم. سپس
تصوير اوليه را با استفاده از فرمول ذكر شده ، مي چرخانيم و در تصوير
جديد قرار مي دهيم. نتيجه يا همان Result اين Function به صورت يك
تصوير نقشه بيتي مي باشد كه همان تصوير چرخانده شده است.

به خاطر داشته باشيد كه تمامي دستورات مربوط به گرافيك و سرعت
عملكرد آنها بستگي كامل به سرعت كامپيوتر كاربر دارد.

موفق باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


DLL ها در دلفي - بخش اول ( ساخت DLL ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۸۱ مراجعه امروز
۴۱۹۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
DLL ها در دلفي - بخش اول ( ساخت DLL )
نويسنده : بابک ساطلي
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۶/۳/۱۳۸۲ اين مقاله ۲۴۴۳ بار مطالعه شده است
۱۹ نفر تا به حال به اين مقاله رای داده اند.

بخش اول - ساخت DLL

استفاده از DLL و كدهاي داخل آن بهترين راه حل براي برنامه شما مي باشد
چرا كه در آينده اگر قصد تغييراتي در برنامه خود را داشته باشيد مي توانيد
با ويرايش اين DLL آن تغييرات را اعمال كنيد.

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

ضمناْ به ياد داشته باشيد DLL نوشته شده در هر زباني قابل استفاده در
زبانهاي برنامه نويسي ديگر نيز مي باشند .
پس به خاطر داشته باشيد استفاده از DLL ها مزاياي فراواني را به شما
در برنامه نويسي مي دهد.

چگونگي ساخت DLL در دلفي ...

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

ابتدا از منوي File گزينه New و سپس Other را انتخاب نماييد.

سپس مطابق شكل گزينه DLL Wizard را انتخاي كرده و OK را فشار دهيد.

اكنون فرمي باز شده كه حاوي يك سري توضيحات مي باشد. اين فايل را
با نام MyDll.dpr ذخيره كنيد.
اكثر كتابهاي دلفي يا دوستاني كه در اين رابطه مطلبي نوشته اند به شما
مي گويند كه تمامي دستورات و متدهاي خود را در اين فايل بنويسيد. اما
اگر مي خواهيد فايل DLL شما به صورتي مرتب باشد ، شما بايد فايلهاي خود
را طبقه بندي و جدا نماييد كه من اين روش را به شما پيشنهاد مي كنم.

از منوي File گزينه New و سپس Unit را انتخاب نماييد

اكنون اين فايل را با نام uDll.pas در همان شاخه اي كه فايل قبلي خود را
با نام MyDll.dpr قرار داديد ، ذخيره نماييد.

براي يك شروع آسان اجازه دهيد عملكردي بنويسيم كه يك رشته را گرفته
و يك مقدار Boolean را برمي گرداند. اين اولين دستور ما در فايل DLL مي باشد.

فايل جديد باز شده را به صورت زير تغيير دهيد :
كد:

unit uDLL;

interface

uses Dialogs;

function DisplayMsg(s:String):Boolean;stdcall;

implementation

function DisplayMsg(s:String):Boolean; stdcall;
begin
ShowMessage(s);
Result := True;
end;

end.

*** فراموش نكنيد كه عبارت uses Dialogs را دقيقاْ در جاي خودش
قرار دهيد ، در غير اين صورت پيغام خطا دريافت خواهيد كرد.
در انتها فايل خود را ذخيره كنيد و آن را ببنديد.

حال نوبت استفاده از عملكرد ساخته شده در DLL مي باشد. در اصطلاح اين
عمل ، يعني اجازه استفاده از دستورات داخل DLL را Exports مي گويند.
اكنون دوباره فايل MyDll.dpr را كه در ابتدا ساخته بوديم باز كنيد .
همان طور كه در ابتداي فايل مشاهده مي نماييد ، توضيحاتي مربوط به
استفاده از يونيت ShareMem در صورت استفاده از رشته هاي استاندارد
دلفي و رد شدن آنها بين DLL و برنامه خود ، نوشته شده است.
اين بدين خاطر است كه در برخي مواقع استفاده از PChar بهتر از حالت
معمول مي باشد . به خصوص در حالت دلفي و C .

اگر شما تصميم به استفاده از ShareMem گرفته ايد مي بايست فايلي با
نام borlndmm.dll را به همراه برنامه خود منتشر نماييد. اين فايل حاوي
دستورات مربوط به رد شدن رشته ها و ... مي باشد. اين فايل مي بايست
در شاخه برنامه شما ، يا يكي از شاخه هاي سيستمي ويندوز قرار بگيرد.
من شخصاْ شاخه System ويندوز را ترجيح مي دهم.

البته اگر تمايلي به استفاده از دستورات رد و بدل رشته ها در DLL خود را
نداشتيد ، ديگر نيازي به اين همه دنگ و فنگ نداريد !

به فايل اصلي خودمان يعني MyDll.dpr باز مي گرديم. در اين مثال به خاطر
اينكه من در عملكرد خود ، از رشته ها استفاده كردم ، مي بايست در خط
uses برنامه ، گزينه ShareMem را اضافه كنيم .

كلمه كليدي ، همان طور كه قبلاْ توضيح دادم ، Exports مي باشد كه به
برنامه هاي ديگر مي گويد كه كدام دستور در داخل DLL قابل اجرا مي باشد.

پس كد ما به اين صورت مي شود :
كد:

library Mydll;

uses ShareMem,
SysUtils,
Classes,
uDLL in 'uDLL.pas';

{$R *.RES}

exports DisplayMsg;

begin
end.

در انتها فايل خود را كامپايل كنيد .
كار ساخت DLL تمام شد ! به شاخه ضبط فايل خود برويد و فايل DLL را مشاهده
كنيد. حال شما قادر هستيد تا از اين DLL در برنامه خودتان استفاده نماييد.

در انتها من توضيحي در رابطه به stdcall ، كه در فايل اول استفاده كرديم
مي دهم و اصولاْ چرا از اين دستور استفاده كردم ؟
همان طور كه در ابتداي بحث گفتم يكي از قابليتهاي DLL ها استفاده آنها
در تمامي برنامه ها مي باشد. به طور مثال DLL ساخته شده در دلفي
مي تواند در Visual Basic ، Visual C و ... استفاده شود.

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

استفاده از اين دستور بستگي به تصميم شما دارد كه آيا قرار است فايل DLL
شما در برنامه هاي ديگر هم استفاده شود يا خير ؟
در صورتي كه تصميم به استفاده از DLL فقط در دلفي داريد ، مي توانيد
به جاي دستور فوق ، از دستور register در انتهاي خطوط استفاده نماييد.
اما استفاده از stdcall ، خاطر شما را در استفاده از DLL در آينده راحت
مي سازد. چرا كه ممكن است روزي بخواهيد فايل DLL خود را در زبان
برنامه نويسي ديگري استفاده نماييد.

در بخش بعدي به شما نشان خواهم داد تا چگونه از اين DLL ساخته شده
در برنامه خود استفاده نماييد.

موفق باشيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


تغيير Alpha تصاوير در دلفی ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۸۴ مراجعه امروز
۴۲۰۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تغيير Alpha تصاوير در دلفی
نويسنده : محمد باقر معموری
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۶/۳/۱۳۸۲ اين مقاله ۲۱۰۳ بار مطالعه شده است
۱۱ نفر تا به حال به اين مقاله رای داده اند.

Alpha blending براى نمايش يك alpha Bitmap كه Bitmapي است كه پيكسل هاي transparent (شفاف) يا semi-transparent (نيمه شفاف) دارد استفاده مي شود.

به اضافه كانالهاي رنگ قرمز، سبز و آبي، هر پيكسلي در يك alpha Bitmap يك موله شفافيت دارد كه از آن به عنوان كانال آلفا ياد مي شود. كانال آلفا حاوي همان تعداد بيت هايي است كه در كانال رنگ وجود دارد. به عنوان مثال يك كانال آلفاي 8 بيت مي تواند 256 مرحله يا Level از شفافيت را به نمايش بگذاريد. از 0 (تمام تصوير شفاف است) تا 256 (تمام تصوير مات است). مكانيسم AlphaBlending (يا تركيب كردن آلفا) بوسيله صدا كردن تابع AlphaBlend احضار مي شود. تابع AlphaBlend بيت‌مت‌هايي را كه پيكسل هاي شفاف يا نيمه شفاف دارند نمايش مي دهد. اين تابع در ويندوز 95 و حتي در ويندوزهاي NT قبل از ويندوز 2000 پشتيباني نمي شد.

كد زير يك پنجره را به سه قسمت افقي تقسيم مي كند. آنگاه يك Bitmap به صورت alpha-blend شده (تركيب آلفا شده) در هر يك از قسمتهاي پنجره نمايش مي دهد.

const

AC_SRC_ALPHA = $1;

procedure DrawAlphaBlend (hWnd : HWND;  hdcwnd : HDC);
var
Ahdc : HDC;              // handle of the DC we will create
bf : BLENDFUNCTION;      // structure for alpha blending
Ahbitmap : HBITMAP;      // bitmap handle
bmi : BITMAPINFO;        // bitmap header
pvBits : pointer;        // pointer to DIB section
ulWindowWidth,
ulWindowHeight : ULONG;  // window width/height
ulBitmapWidth,
ulBitmapHeight : ULONG; // bitmap width/height
rt : TRect;

          // used for getting window dimensions
begin
// get window dimensions
GetClientRect(hWnd, rt);

// calculate window width/height
ulWindowWidth := rt.right - rt.left;
ulWindowHeight := rt.bottom - rt.top;

// make sure we have at least some window size
if ((ulWindowWidth

= 0 ) and

(ulWindowHeight=0)) then
exit;

// divide the window into 3 horizontal areas
ulWindowHeight := trunc(ulWindowHeight / 3);

// create a DC for our bitmap -- the source DC for AlphaBlend
Ahdc := CreateCompatibleDC(hdcwnd);

// zero the memory for the bitmap info
ZeroMemory(@bmi, sizeof(BITMAPINFO));

// setup bitmap info
bmi.bmiHeader.biSize := sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2);
ulBitmapWidth := trunc(ulWindowWidth - (ulWindowWidth/5)*2);
bmi.bmiHeader.biHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2);
ulBitmapHeight := trunc(ulWindowHeight - (ulWindowHeight/5)*2);
bmi.bmiHeader.biPlanes := 1;
bmi.bmiHeader.biBitCount := 32;         // four 8-bit components
bmi.bmiHeader.biCompression := BI_RGB;
bmi.bmiHeader.biSizeImage := ulBitmapWidth

* ulBitmapHeight * 4;

// create our DIB section and select the bitmap into the dc
Ahbitmap := CreateDIBSection(Ahdc,

bmi, DIB_RGB_COLORS, pvBits, 0, 0);
SelectObject(Ahdc, Ahbitmap);

bf.BlendOp :=

AC_SRC_OVER;
bf.BlendFlags :=

0;
bf.SourceConstantAlpha := $7f;  // half of 0xff = 50% transparency
bf.AlphaFormat := 0;             //

ignore source alpha channel

AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),

trunc(ulWindowHeight/5),
ulBitmapWidth, ulBitmapHeight,
Ahdc, 0, 0, ulBitmapWidth, ulBitmapHeight,

bf);

bf.BlendOp :=

AC_SRC_OVER;
bf.BlendFlags :=

0;
bf.AlphaFormat := AC_SRC_ALPHA;  //

use source alpha
bf.SourceConstantAlpha := $ff;  // opaque (disable constant alpha)

AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
trunc(ulWindowHeight/5+ulWindowHeight), ulBitmapWidth,

ulBitmapHeight,
Ahdc, 0,

0, ulBitmapWidth, ulBitmapHeight, bf);

bf.BlendOp :=

AC_SRC_OVER;
bf.BlendFlags :=

0;
bf.AlphaFormat := 0;
bf.SourceConstantAlpha := $3A;

AlphaBlend(hdcwnd, trunc(ulWindowWidth/5),
trunc(ulWindowHeight/5+2*ulWindowHeight), ulBitmapWidth,
ulBitmapHeight, Ahdc, 0, 0, ulBitmapWidth,
ulBitmapHeight, bf);

// do cleanup
DeleteObject(Ahbitmap);
DeleteDC(Ahdc);

end;

کيفيت مقاله :
عالی خوب متوسط ضعيف


رجيستري چيست؟ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۷۸ مراجعه امروز
۵۰۹۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
رجيستري چيست؟
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۳/۱۳۸۲ اين مقاله ۸۵۲ بار مطالعه شده است
۱۴ نفر تا به حال به اين مقاله رای داده اند.

در واقع رجيستري را مي توان به عنوان بانک اطلاعاتي معرفي کرد که براي نگهداري تنظيمات و گزينه هاي نسخه هاي 32 بيتي ويندوز همچون ويندوز 95،98،ME و NT/2000 مورد استفاده قرار مي گيرد. و شامل اطلاعات و تنظيماتي است که براي تمام قطعات سخت افزاري ، نرم افزاري ، کاربران و تنظيمات مربوط به خود سيستم مورد استفاده قرار مي گيرد. هر زمان که کاربري تغييري در تنظيمات مربوط به Control Panel يا File Associations ، System Policies ايجاد کند و يا برنامه نرم افزاري جديدي را نصب کند ، اين تغييرات در رجيستري ويندوز ثبت شده و باقي مي مانند.

فايل هاي فيزيکي که رجيستري را تشکيل مي دهند بسته به نسخه ويندوز شما در محل و مکان خاصي نگهداري مي شوند، در ويندوز 95 و 98 بصورت دو فايل مخفي در پوشه ويندوز قرار دارند و با نام هاي USER.DAT و SYSTEM.DAT شناخته مي شوند . در نسخه ME علاوه بر اين دو فايل ، فايل ديگري نيز به نام CLASSES.DAT به آنها اضافه شده است.در حاليکه در نسخه هاي NT/2000 ويندوز فايلها در آدرس SystemRoot%\System32\Config % قرار گرفته اند.اين فايلها را نمي توان بصورت مستقيم ويرايش کرد و براي انحام چنين کاري نياز به ابزار رايجي که با نام ويرايشگر رجيستري شناخته مي شود مي باشد .

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

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

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

براي اجراي اين برنامه مي توانيد دستور Regedit را در کادر Run منوي Start وارد کنيد. اما از آنجا که با هر نوع تغيير در رجيستري ممکن است تنظيمات سيستم عامل شما دچار مشکل شود ، بهتر است قبل از هر کار اقدام به تهيه نسخه پشتيبان از اين برنامه کنيد. بدين منظور يکي از روشهاي زير را بکار گيريد :

الف) استفاده از System Restore

اين برنامه تحت ويندوز هاي Xp و ME قابل اجرا است . براي استفاده از اين برنامه قبل از تغيير در رجيستري، بر روي دكمه Start ، کليک کرده و گزينه Accessories را از منوي Programs انتخاب کرده سپس در System Tools گزينه System Restore را انتخاب کنيد. سپس گزينه را Create a restore point انتخاب كنيد . دكمه Next را كليك كرده و از دستورالعملهاي آن پيروي کنيد.

ب) استفاده از ويرايشگر رجيستري

کاربران ويندوز 2000 مي توانند با استفاده از گزينه Export موجود در خود برنامه Regedit اقدام به تهيه پشتيبان از رجيستري کنند. بدين منظور با اجراي دستور Regedit در گزينه Run منوي Start برنامه ويرايشگر رجيستري را فعال کنيد . سپس گزينه Export Registry File را انتخاب کنيد .

ج) کپي دستي فايل هاي رجيستري

کاربران سيستم عامل ويندوز 98 و يا 95 مي توانند با کپي کردن فايل هاي User.dat و system.dat که در محل نصب ويندوز قرار دارند از آنها نسخه پشتيبان تهيه کنند . البته در ويندوز Me فايل ديگري نيز با نام Classes.dat وجود دراد . توجه داشته باشيد از آنجا که اين فايل ها بصورت مخفي و سيستمي هستند قبل از آنکه بتوانيد آنها را مشاهده کنيد بايد تنظيمات مربوط به مشاهده اين فايل ها را در ويندوز اجرا کنيد .( در ادامه به شرح اين فايل ها مي پردازيم )

آشنايي با فايلهاي User.dat و System.dat در رجيستري

براي ايجاد رجيستري برنامه Setup ويندوز ، دو فايل به نامهاي User.dat و System.dat را ايجاد مي کند. که از نوع پنهان سيستمي و فقط خواندني هستند و در داخل پوشه اصلي ويندوز قرار مي گيرند.

فايل User.datبراي ذخيره اطلاعات کاربر طراحي شده است و در آن فايل اطلاعات زير ذخيره مي شوند :
1-کاغذ ديواري ، الگوي رنگ ، گزينه ها ي ماوس، گزينه هاي Accesibility و ديگر پارامترهايي که در پنجره Control Panel تعيين مي شوند .
2- نمادهاي روي Desktop

3- پوشه ها ، ميانبر هاي موجود در منو
4- پيکر بندي تعريف شده براي پنجره Windows explorer

5- پارامترهاي تعيين شده براي Accessories ويندوز

6- اتصالات شبکه و کلمات رمز

هر زمان که از ويندوز خارج مي شويد سيستم کپي پشتيبان جديدي از فايل User.dat را ايجاد مي کند . اين کپي پشتيبان نيز از نوع پنهان ، سيستمي و فقط خواندني است و نام آن User.DA0 مي باشد . اگر به هر دليلي فايل User.dat خراب شده و يا از بين برود سيستم از اين فايل استفاده مي کند .

فايل System.dat نيز براي نگهدار ي اطلاعات سيستم طراحي شده است . اين فايل نيزاطلاعات زير را در خود نگه مي دارد .

1- گروههاي مختلف سخت افزار هاي شناسايي شده توسط ويندوز

2- دستگاه هاي مختلف متصل شده به کامپيوتر

3- منابع مورد استفاده در هر دستگاه

4- اطلاعات Plug&play بدست آمده از بايوس و يا دستگاههاي Plug&Play

5- درايورهايي که درمود حفاظت شده کار مي کنند و در زمان شروع به کار ويندوز بارگذاري مي شوند.

6- پارامترهاي داخلي ويندوز

7- پارامترهاي برخي از برنامه هاي کاربردي 32 بيتي

پاكسازي رجيستري

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

کاربران ويندوز 95 مي توانند بر روي دكمه Start و سپس گزينه Run كليك کرده، عبارت regclean را تايپ کنند و سپس دكمه Enter را فشار دهند .

در نسخه هاي بعدي غير از ويندوز Xp ، از برنامه هاي ديگري براي اين کار استفاده مي شود و ديگر خبري از Regclean نيست .دو برنامه از اين دست با نام هاي Regclean و EasyCleaner مي باشند که مي توانيد آنها را از طريق شبکه اينترنت دريافت کنيد .

البته برنامه هاي ديگري نيز همچون Norton System Works و يا Ontrack System Suite نيز وجود دارند که مي توانيد در ويندوز Xp نيز از آنها استفاده کنيد .

ذخيره و بازيابي رجيستري

ممکن است در مواردي اقدام به تغيير رجيستري کنيد و حتي خطايي در ظاهر نشان داده نشود ، مثلا تنظيمي را انجام مي دهيد که مجاز است ولي اين تنظيم مناسب کار شما نيست . در اين حالت در برنامه Registry Checker گزينه restore را براي بازيابي نسخه هاي قبلي فعال کنيد . البته بايد توجه داشته باشيد که فايل پشتيبان رجيستري تان قديمي نباشد . زيرا آدرس و مشخصات برنامه هايي که شما نصب مي کنيد در رجيستري ثبت مي شود و درصورت استفاده از نسخه پشتيبان قديمي تمامي اطلاعات مربوط به برنامه هاي جديد تر از بين خواهد رفت .

در مبحث بعدي ساختار کلي پوشه ها در رجيستري را بررسي کرده و نکات مفيد تري درباره آن را مرور مي کنيم.

کيفيت مقاله :
عالی خوب متوسط ضعيف


تاريخچه مختصري در مورد فايلهاي پيکر بندي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۸۱ مراجعه امروز
۵۰۹۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تاريخچه مختصري در مورد فايلهاي پيکر بندي
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۳/۱۳۸۲ اين مقاله ۶۳۱ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

در زمان DOS و ويندوز نگارش 1 اطلاعات سيتمي در دو فايل مشهور به نامهاي CONFIG.SYS و AUTOEXEC.BAT ذخيره مي شدند.

با ظهور ويندوز نگارش 2( که شايد شما اصلاً از ظهور آن با خبر نشده باشيد!) دو فايل جديد به دنيا آمدند که عبارت بودند ازSYSTEM.INI, WIN.INI . اين دو فايل که به آنها " فايلهاي شروع به کار اوليه" (initialization files) نيز گفته مي شد نيز همانند فايل هاي قديمي تر خود فايلهاي متني ساده اي بودند . وظيه WIN.INI ذخيره کردن اطلاعات پيکر بندي مربوط به ويندوز و برنامه هاي کاربردي تحت آن و وظيفه SYSTEM.INI ذخيره کردن اطلاعات مربوط به سخت افزار و پارامترهاي سيستمي بود. هيچ عجيب نبود که هر برنامه کاربردي براي خودش فايلهاي INI مخصوصي درست کند تا پارامترهاي تعريف شده توسط کاربران و يا خود آن برنامه را در آنها جاي دهد. در اين دوران دايرکتوري Windows پر از انواع و اقسام فايلهاي INI بود.

اوضاع با ظهور ويندوز 0/3 از قبل هم بدتر شد. ويندوز 0/3 نه تنها همان دو فايل WIN.INI وSYSTEM.INI قبلي را داشت بلکه چندين فايل INI جديد نيز براي Program Manager ( با نام PROGRAM.INI) و File Manager ( با نام WINFILE.INI) و Control Panel ( با نام CONTROL.INI) و غيره به آن اضافه شد.

تا زمان ظهور ويندوز 1/3 خبري از رجيستري نبود. اما رجيستري ويندوز 1/3 نيز با ويندوز 98 بسيار متفاوت بود. رجيستري ويندوز 1/3 يک بانک اطلاعاتي( database) بود که از آن براي ثبت اطلاعات OLE ( لينک کردن و ادغام کردن اجسام) مربوط به برنامه هاي کاربردي استفاده مي شد.

در نهايت در Windows for Workgroups با اضافه شدن فايلهاي جديد مربوط به پيکر بندي( نظير PROTOCOL.INI) اوضاع از قبل هم بدتر شد.

رجيستري به عصر فايلهاي INI پايان داد

اين تعداد فايلهاي INI باعث سردرگمي کاربران و ناظران سيستم مي شد . از آنجاييکه اين فايلهاي INI فايلهايي متني (text) بودند که در دايرکتوري اصلي ويندوز قرار مي گرفتند همواره در معرض خطر بودند. احتمال زيادي وجود داشت که با زدن يک دکمه توسط يک نفر تازه کار اين فايلها حذف شوند . افراد کمي بودند که مي دانستند در کدام فايل INI کدام پارامترها ذخيره شده اند. هيچ مکانيزمي براي کمک به شما دريافتن پارامترهاي مورد نيازتان در يک فايلINI بزرگ وجود نداشت و شيوه خطي "عنوان – و – پارامتر" نگهداري پارامترهاي پيچيده اي که با چندين فايل سرو کار داشتند را دشوار مي کرد.

براي حل همه اين مشکلات طراحان ويندوز 95 تصميم گرفتند که در رجيستري ويندوز 95 يک تحول بزرگ بوجود آورند. آنها بويژه تصميم گرفتند که رجيستري را به يک بانک اطلاعات مرکزي تبديل کنند که همه پارامترهاي سيستم و برنامه هاي کاربردي را در خود جاي دهد. در ويندوز 98 هم رجيستري همچنان همان ساختار اوليه خود در ويندوز 95 را حفظ کرده است.

در زير بعضي از مزاياي اين رجيستري جديد ارائه شده اند:

فايلهاي رجيستري داراي ويژگيهاي :Hidden (پنهان)، System (سيستم) وRead-only ( فقط خواندني) هستند. بنابراين احتمال آنکه بطور تصادفي حذف شوند از بين رفته است. حتي اگر کاربري به طريقي اين فايلها را حذف کند باز هم ويندوز 98 کپي هاي پشتيباني از آنها درست کرده است که توسط آنها براحتي مي تواند فايلهاي رجيستري قبلي را بازگرداند.

رجيستري نه تنها مکاني براي ذخيره کردن پارامترهاي سخت افزاري و سيستم عامل است بلکه برنامه هاي کاربردي نيز مي توانند به جاي استفاده از فايلهاي INI جداگانه براي ذخيره کردن پارامترهاي خود، آزادانه از رجيستري براي اين کار استفاده کنند.

اگر لازم باشد که يک ورودي رجيستري را مشاهده کرده يا تغيير دهيد مي توانيد از برنامه خدماتي Registry Editor استفاده کنيد. اين برنامه همه بانک اطلاعات رجيستري را بصورت سلسله مراتب درختي نمايش مي دهد.

در رجيستري ابزارهايي وجود دارند که شما را قادر مي سازند هر پارامتري را يافته و اطلاعات رجيستري را از راه دور درخواست کنيد.

البته نمي توان گفت که رجيستري يک راه حل کامل است. بسياري از پارامترهاي آن کلاً مبهم هستند، رجيستري ساختاري دارد که شايد کسي آن را دوست نداشته باشد و نيز يافتن پارامترهاي مورد نظر اغلب بصورت سعي و خطا بايد انجام شود. اما با همه اينها اکثر اين مشکلات با اندکي تمرين وآشنا شدن بيشتر با رجيستري حل مي شوند.

فايلهاي پيکر بندي قديمي هنوز کار مي کنند

اگر چه رجيستري همه کارهاي فايلهاي INI و شروع کار( startup) اوليه را انجام مي دهد اما همه وظيفه پيکر بندي را به تنهايي بر دوش نمي کشد. ويندوز 98 هنوز هم فايلهاي WIN.INI و SYSTEM.ini را مي شناسد و با آنها کار مي کند تا بتواند سازگاري خود با برنامه هاي قديمي 16 بيتي، که فقط مي توانند اطلاعات پيکربندي خود را از اين فايلها بدست آورند، کار کند. علاوه بر اين اگر سخت افزاري از سيستم شما به درايورهاي کار کننده در مود حقيقي نياز داشته باشد يا چنانچه يک برنامه کاربردي خاص به پارامترهاي ويژه اي که تحت DOS بايد تعيين شوند احتياج داشته باشد شما هنوز هم به فايلهاي CONFIG.SYS وAUTOEXEC.BAT نياز خواهيد داشت. ( مثلاً يک برنامه ممکن است به متغيرهاي محيطي يا دستور PATH نياز داشته باشد.) البته برنامه هاي 16 بيتي نيز هنوز مي توانند فايلهاي INI شخصي خودشان را داشته باشند.

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۰۴ مراجعه امروز
۴۹۲۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۳/۳/۱۳۸۲ اين مقاله ۱۱۴۸ بار مطالعه شده است
۱۸ نفر تا به حال به اين مقاله رای داده اند.
بنام انكه جان را فكرت آموخت

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

1) انچه در شروع بايد بدانيم
الف ) بنابر يك اصل كلي در حل مسائل "ابتدا بايد مقصد را مشخص سپس ابزار رسيدن را انتخاب نمود "
اگر به اين مسئله معتقد باشيم باشيم انگاه ديگر درگير معضلاتي همچون "تعصب بروي يك نرم افزار خاص" و يا "چون من فقط همين نرم افزار را مي دانم پس بهترين راه همين است " نخواهيم شد. وصد البته اينكار نيازمند مطالعه و تحقيق مداوم براي رسيدن به بهترين راه حل خواهد بود.

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

ج ) "چند كار كوچك بهتر از 1 كار بزرگ است "
اين به معناي اينست كه
• اگر تازه كار هستيد با پروژه هاي كوچك شروع كنيد و پس از كسب تجربه به سراغ اهداف بزرگتر برويد
• اگر پروژه بزرگي داريد (بزرگي پروژه بنابر منطق فازي به خودتان بستگي دارد) آنرا به قسمتهاي كوچكتري تقسيم كنيد تارسيدن به انها ساده تر باشد

د) "مشكلترين راه حل هميشه بهترين نيست"
هميشه اينگونه نيست كه بتوانيد همه چيز را بنابر مصالحي (همچون "استقلال برنامه از ابزار" ) با كد نويسي حل كنيد چرا كه اينكار نه تنها باعث افزايش زمان پروژه خواهد شد كه احتمال خطا را نيز افزايش مي دهد . بنده از سال 74 تا 75 در حدود 12000 خط برنامه بزبان پاسكال نوشتم كه Utilityمحسوب مي شد و باعث گرديد كه مشكلاتي همچون فارسي نويسي، ارتباط با شبكه مرتب سازي بانكهاي اطلاعاتي و غيره را حل كنم و باكمك آنها چند برنامه مفيد نوشتم اما اكنون از عيب يابي اين برنامه ها وحشت دارم چه رسد به كسترش اين برنامه ها

ه) "خيال پرداز باشيد "
در سينما به اين اصطلاح "حس گرفتن " گفته مي شود. در واقع تخيل شما در باره محصول نهايي هميشه مشوق شما براي پيدا كردن راه حلها و فهم ندانسته هاي شما خواهد بود . اين حس ذاتي است و انهايي كه از اين حس كمتر بهره مند هستند تا زمان تحويل پروژه متوجه نواقص ان نخواهند شد

و) "دست پيش را بگيريد تا پس نيفتيد"
در مورد 2 عامل مهم تاكيد مي كنم اين ضرب المثل را فراموش نكنيد
• زمان انجام پروژه
• مبلغ قرارداد
همواره پس از شنيدن صورت مسئله ،اعداد و ارقام ذهنتان را 2 تا 3 برابر اعلام كنيد چراكه در اين صورت نه تنها با ارامش خيال بدون واهمه زمان كافي براي انجام پروژ خواهيد داشت كه در اخر كار پس از كسر صورت هزينه هايي كه حتي تصورشان را هم نمي كرديد مقداري استفاده برايتان خواهد ماند.

ز) "شما 2 گوش داريد و 1 زبان "
مشتري هميشه مي داند كه چه كار مي خواهد انجام شود ولي قرار نيست شما با حرفهاي بزرگ زدن مسئله را براي او وخودتان پيچيده تر از آنچه كه هست كنيد . هميشه گوش كنيد و نكات ظريف مسئله را با دقت تمام دنبال كنيد . شايد در لحظه اي كه شما فكر مي كنيد "مسئله ساده اي است " يك "فاجعه" در انتظار شما باشد در ان لحظه به اين مسئله فكر كنيد "زبان سرخ سرسبز مي دهد برباد"

ح) "من نمي دانم "
هميشه با همه براي فهم انچه نمي دانيد در ارتباط باشيد .
• همواره با مشتري خود مشورت كنيد . شايد او از مسائل برنامه نويسي چيزي نداند ولي مطمئننا از انچه كه مي خواهد با اطلاع است . نگذاريد اين دانش او با ايراد گرفتن به شما منتقل شود.
• هميشه در حال جستجوي اطلاعات جديد در اينترنت و يا كتب ويا حتي دوستاني كه داريد باشيد .

ط) "اول كوچكترها بعد بزرگترها"
يكي از عوامل موفقيت شما در شبيه سازي پروژه هاي بزرگ به صورت كوچك و تعميم آن به برنامه هاي بزرگتر است . بياد داشته باشيد كه در پروژه هاي بزرگ شما بايد مسائل حاشيه اي را ( كه حتي ممكن است به اصل صورت مسئله ارتباط مستقيم ندارد ) در نظر بگيريد . اما شبيه سازي در مقياس كوچك به شما فرصت حل اصل مسئله را خواهد داد.

ي)"سريع و كثيف "
زيبا سازي برنامه را براي بعد بگذاريد .. مهم نيست اول چه فونتي با چه رنگي انتخاب مي شود . مهم اينست كه ايا برنامه درست عمل مي كند يا خير . مشتري در هنگام استفاده ديدن يك برنامه زيبا را مهم مي داند نه در هنگام توليد .

ك) "عقل تابع چشم است "
• (در مورد مشتري )يك برنامه زيبا بيشتر به دل مي نشيند
• (در مورد برنامه نويس ) هرچه بيشتر نمونه برنامه ببينيد ، ذهن شما قدرت خيالپردازي بيشتري پيدا ميكند و بالطبع ديد وسيع تري را در عمل كردن خواهيد داشت

در مقاله بعدي خواهم گفت كه از كجا شروع كنيم

کيفيت مقاله :
عالی خوب متوسط ضعيف


نكات مفيد براي كار در محيط دلفي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۸۷ مراجعه امروز
۴۲۰۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نكات مفيد براي كار در محيط دلفي
نويسنده : صادق علوی زاده
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۳/۳/۱۳۸۲ اين مقاله ۳۲۴۷ بار مطالعه شده است
۳۱ نفر تا به حال به اين مقاله رای داده اند.

محيط دلفي براي برنامه نويسي يكي از بهترين محيطهاي برنامه نويسي است گذشته از كاركرد داخلي و كمپايلر آن كه بسيار قوي و سريع است، محيط آن يعني IDE آنهم قدرت بسيار زيادي دارد كه باعث شده يكي از بهترين اديتورها باشد. در اين مقاله من سعي بر اين داشته ام تا با ارائه يك سري از نكات و كليدهاي ميانبر كه مي توانند براي كار در دلفي بسيار مفيد و كارا باشند، كمك كنم تا شما بتوانيد با قدرت بيشتر به برنامه نويسي و كار در اين محيط قدرتمند ادامه دهيد.
در قسمت اول مقاله كه در حال حاضر در مقابل شماست من يك سري از كليدهاي ميانبر و تركيبي مورد استفاده در IDE دلفي را بصورت ليست وار و همراه يك توضيح كوچك آورده ام. با توجه به اينكه اين مطالب حاصل تجربه هاي خودم در كار با دلفي (از 1 تا 7) بوده ممكنه كه يك سري موارد ديگري هم باشد كه من تا حالا برخورد نداشتم كه دوستان عزيز ميتونند به اين ليست اضافه كنند و نام خود را در انتهاي اين مقاله ذكر كنند و حتما يك نسخه از آن را براي من ارسال كنند.
اميدوارم كه اين سري مقالات با كمك شما در اثر مرور زمان بهتر و مفيد تر شود.
دوستان عزيز برنامه نويس ممكنه كه شما مدتها با دلفي مشغول برنامه نويسي بوده باشيد اما من يقين دارم كه در اين ليست نكات و روشهاي جديدي را خواهيد آموخت.

قسمت اول - كليدهاي ميانبر و تركيبي:

جستجو در متن بصورت مستقيم:
براي اينكار كليدهاي Ctrl+E را بفشاريد و بدنبال آن شروع به تايپ كلمه مورد نظر كنيد نتيجه آن را خود ببينيد. براي اينكه به كلمه بعدي برويد كافيست كليد F3 را بزنيد.

ايجاد فرورفتگي در كد:
بعضي اوقات - كه خيلي هم پيش مي‌آيد - لازم است كه يك مقداري از متن را بصورت بلوك شده به جلو و يا عقب ببريم. منظور دندانه دار كردن متن است كه به خوانايي برنامه كمك مي كند. براي اينكار مي تونيد از كليد Ctrl +Shift+I براي جلو بردن و Ctrl+Shift+U براي عقب برگرداندن متن بلوك شده استفاده كنيد.

پرش به قسمت تعريف يك شي (Object):
براي اينكه ببنيد شي مورد نظرتون (از قبيل VCL, Procedure, Function,...) در كجا و چطور تعريف شده مي توانيد كليد Crtl رو پايين نگه داشته و روي شي مورد نظر Click كنيد.

براي تغيير حالت كاراكترها:
شما مي توانيد يك قسمت از متن (كه ممكن است با حروف بزرگ و يا كوچك تايپ شده باشد) را انتخاب كنيد و با زدن كليدهاي Ctrl+o+u به ترتيب تمامي حروف كوچك آن قسمت از متن را به حروف بزرگ و تمامي حروف بزرگ آنرا به حروف كوچك تبديل كنيد.
براي تعيير حالت يك كلمه نيز ميتوانيد روي كلمه مورد نظر رفته و كليدهاي Ctrl+k+f براي بزرگ كردن و كليدهاي ctrl+k+e را براي كوچك كردن حروف آن كلمه بكار برد.

درست كردن ماكرو متني:
اين امكان بسيار مفيد است و مي توانيد بسياري از كارهاي نوشتاري را كاهش دهد با اينكار شما ميتوانيد يك سري از كارهاي تكراري كه روي متون انجام مي دهيد را بصورت ماكرو در آورده و از آنها به راحتي استفاده كنيد. براي شروع به ضبط ماكرو كليدهاي ctrl+shift+r را بفشاريد و آن سري كارهايي را كه مي خواهيد را انجام دهيد و سپس براي اينكه به كار ضبط ماكرو پايان دهيد كليدهاي ctrl+shift+r را دوباره بزنيد. حال براي استفاده از ماكرو كافيست در هر جا كه لازم بود كليدهاي Ctrl+Shift+P را بفشاريد.

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

گذاشتن علامت روي متن:
اين كار كه به BookMark معروف است بسيار مفيد و كارا مي باشد. در هنگامي كه شما روي قسمتي از متن برنامه كار ميكنيد و مي خواهيد به يك قسمت ديگر برويد ممكن است براي برگشتن به مكان اول خود كمي مشكل پيدا كنيد. ولي شما ميتوانيد با زدن چند دكمه به محل مورد نظرتون باز گرديد. براي اينكار در خطي كه قصد داريد علامت بگذاريد كليدهاي Ctrl+Shift+0..9 را بفشاريد. منظور اينست كه كليدهاي ctrl+Shift را نگه داريد و يكي از اعداد 0 تا 9 را وارد كنيد تا آن خط به همان شماره علامت گذاري شود و سپس هر جا كه خواستيد برويد و سپس هر بار كه كليد Ctrl را نگه داريد و شماره مورد نظر را وارد كنيد به همان خط باز خواهيد گشت. البته توجه داشته باشيد كه فقط مي توانيد 10 خط را با اين روش علامت گذاري بكنيد و براي برداشتن علامت ها كافيست روي همان خط دوباره كليد Ctrl+shift و شماره‌اي كه براي آن خط وارد كرده ايد را بفشاريد با اينكار علامت آن خط برداشته مي شود.

ايجاد كلاس مورد نظر :
شما هنگامي كه در قسمت Private و يا Public يك type، روال يا تابع درست كرديد لازم داريد كه قسمتي را براي قرار دادن كدهاي مربوط به آن روال يا تابع را ايجاد كنيد. براي اينكار شما پس از اينكه نام تابع را تايپ كرديد مي توانيد كليدهاي Ctrl+Shift+C را فشار دهيد تا دلفي يك قسمت براي نوشتن كدهاي مورد نظرتان ايجاد كند.

ظاهر كردن پنجره Code insight :
شما حتما به اهميت و مفيد بودن اين قسمت دلفي واقفيد كه در هنگام كد نويسي تا چه حد مي تواند كارها را راحت كند. بله در هنگام وارد كردن كدها بعد از وارد كردن نام يك كلاس و يا Object با زدن يك نقطه (.) پنجره Code Insight‌ ظاهر مي شود. حال در بعضي وقتها شما ممكن است كه نقطه را قبلا وارد كرده باشيد و يا در مواقع ديگر اين پنجره ظاهر نشود. در
اين صورت براي اينكه پنجره را ظاهر كنيد بايد دوباره نقطه را وارد كنيد ولي راه اسانتري هم وجود دارد و آن اينست كه كليدهاي Ctrl+Speacebar را فشار دهيد.

ظاهر كردن پنجره Code Parameter:
همانند بالا در هنگام ظاهر شدن Hint مربوط به راهنماي توابع كه معمولاً بعد از گذاشتن پرانتز مربوط ظاهر ميشود و در مورد پارامترهاي لازم مي باشد نيز مي توانيد از كليدهاي Ctrl+Shift+SpaceBar استفاده كنيد.

رفتن از قسمت تعريف توابع و روالها به قسمت كد آنها:
هميشه اين نياز وجود خواهد داشت كه شما در هنگامي كه داريد به دنبال يك روال در قسمت type ميگرديد بعد از پيدا كردن نام آن مي خواهيد كه خود آن تابع يا روال را نيز ببنيد. براي اينكار خوب حتما نام آن را جستجو ميكنيد ولي يك راه آسانتر اينست كه شما روي نام آن تابع قرار گيريد و كليدهاي Ctrl+Shift+Up/Down را بزنيد. در اينحالت اگر روي كد تابع باشيد به قسمت تعريف آن خواهيد رفت.

خوب اين هم قسمت اول اين مقاله كه اميدوارم مفيد بوده باشد.

من منتظر شنيدن نظرات و تجربيات شما هستم.

استفاده از اين مقاله در سايتها و ديگر رسانه ها بشرط ذكر نام و نشاني نويسنده بلامانع مي باشد.

موفق باشيد - صادق علوي زاده

کيفيت مقاله :
عالی خوب متوسط ضعيف


Import و Export کردن تنظيمات رجيستري ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۸۴ مراجعه امروز
۵۱۰۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
Import و Export کردن تنظيمات رجيستري
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۱۳/۳/۱۳۸۲ اين مقاله ۶۱۲ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

يکي از ويژگي هاي بزرگ رجيستري توانايي و قابليت import و export تنظيمات رجيستري به فايل متني است. اين فايل با پسوند reg . قابل شناسايي است .محيط قالب بندي اين فايل هاي متني را مي توان با برنامه اي همچون Notepad مشاهده کرد.بدين منظور در رجيستري کليدي را که قصد تغيير در آن دارير را انتخاب کرده و سپس از منوي Registry گزينه... Export Registry File را انتخاب کنيد .سپس يک نام براي آن وارد کرده و آن را ذخيره کنيد. اگر اين فايل را در برنامه Notepad باز کنيد فايلي همچون شکل زير را مشاهده خواهيد کرد:

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\Setup]
"SetupType"=dword:00000000
"CmdLine"="setup -newsetup"
"SystemPrefix"=hex:c5,0b,00,00,00,40,36,02

اين محيط کاملا ساده است ، عبارت REGEDIT4 به نوع فايل و نسخه آن اشاره دارد .عبارت [HKEY_LOCAL_MACHINE\SYSTEM\Setup] به کليد اشاره دارد و مقادير نيز بصورت "SetupType"=dword:00000000 هستند و در خود مقادير نيز کلمه بعد از کاراکتر " = " نشان دهنده نوع مقادير آنها است که عبارتند از DWORD ، String و يا Binary

از اين رو مي توانيد فايل را به راحتي ويرايش کرده و تغييرات مورد نظرتان را به آن اعمال کنيد .و سپس به آساني و با دوبار کليک سريع و يا با انتخاب گزينه "Import" از منوي Registry آن را براي قابل استفاده و اعمال شدن در تنظيمات مربوط به ويندوز امکان پذيرکنيد .

حذف کليد ها و مقادير با استفاده از فايل REG:
حذف کليدها و مقادير در فايلهاي REG با قرار دادن يک کاراکتر "-" در جلوي نام کليدي که قصد حذف آن را داريد امکان پذير است.بعنوان مثال براي حذف کليد [HKEY_LOCAL_MACHINE\SYSTEM\Setup] در فايل فوق بايد به شکل ژير عمل نمائيد: :

REGEDIT4
[-HKEY_LOCAL_MACHINE\SYSTEM\Setup]

اين ويژگي بسيار دلواپس کننده است ، زيرا وقتي کليد و يا مقداري را به اشتباه پاک کنيد ممکن است باعث مشکلات اساسي در تنظيمات رجيستري شود ، از اين رو به خآير داشته باشيد که حتما در ابتدا نسبت به پشتيبان گيري از رجيستري اقدام کنيد.

گزينه هاي خط فرمان در رجيستري :

Regedit داراي تعدادي گزينه خط فرمان است که مي توان براي اجراي سرِيع آنها از طريق فايل هاي batch و يا از طريق command prompt ، از آنها استفاده کرد.

regedit.exe [options] [filename] [regpath]
[filename] براي Import کردن فايل reg.
/s [filename] براي Import کردن آسان و بدون ويزاردي که از شما سوالي پرسيده شود.
/e [filename] [regpath] رجيستري را با [filename] شروع کنيد سپس مسير [regpath] .بعنوان مثال :
regedit /e file.reg HKEY_USERS\.DEFAULT
/L:system تعيين موقعيت فايل system.dat
/R:user تعيين موقعيت فايل system.dat
/C [filename] فشرده سازي (در ويندوز 98)
/D [regpath] حذف کليد تعيين شده ( در ويندوز 98

کيفيت مقاله :
عالی خوب متوسط ضعيف


ساختار رجيستري ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۸۷ مراجعه امروز
۵۱۰۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ساختار رجيستري
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۲۰/۳/۱۳۸۲ اين مقاله ۶۴۴ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

ساختار رجيستري

رجيستري داراي يک ساختار درختي است - هرچند ساختاري پيچيده همانند پوشه هاي مختلف موجود در هارد ديسک مي باشد - که همانند برنامه Windows Explorer مي باشد .

هر شاخه اصلي ( که با يک آيکون پوشه از بقيه مجزا شده است ) کندو (Hive) ناميده مي شود و هر کندو نيز دربردارنده کليد هاست (Keys) . هر کليد شامل کليد هاي ديگر ( گاهي اوقات نيز خود آنها داراي زير کليدهاي ديگري است ) و به همين ترتيب آن هم شامل مقادير ديگري است. مقادير در بردارنده اطلاعات حقيقي است که در رجيستري باقي مي ماند. بسته به نوع مفاهيمي که مورد استفاده قرار مي گيرند ، سه نوع مقدار وجود دارد : String, Binary و DWORD

6 شاخه اصلي که بخش هاي مختلف اطلاعات را در رجيستري ذخيره مي کنند عبارتند از :

HKEY_CLASSES_ROOT : اين شاخه شامل تمام فايل نقشه برداري ضميمه سازي براي پشتيباني از ويژگي کشيدن و رها کردن (drag-and-drop) ، اطلاعات مربوط به OLE، کليدهاي ميانبر ويندوز و هر جزء اصلي مربوط به رابط هاي کاربري ويندوز را در خود جاي داده است .

HKEY_CURRENT_USER : اين شاخه به بخشي از HKEY_USERS مربوط به کاربري که در سيستم Login کرده است لينک شده و پيوند برقرار مي کند و دربردارنده اطلاعاتي همانند نام هاي Logon ، تنظيمات مربوط به Desktop و نيز تنظيمات Start menu مي باشد.

HKEY_LOCAL_MACHINE : اين شاخه دربردارنده اطلاعات خاص کامپيوتر درباره نوع قطعات سخت افزاري ، نرم افزاري است که براي تمامي کاربراني که در آن سيستم Login نمايند مورد استفاده قرار مي گيرد.

HKEY_USERS : اين شاخه شامل تنظيمات منحصر به فرد اي است که براي هر يک از کاربران مورد استفاده قرار مي گيرد و از کاربري به کاربر ديگر متفاوت است. هر کاربر نيز با يک رابط جانبي همانند s-1-5-18 از بقيه جدا مي شود.

HKEY_CURRENT_CONFIG :اين شاخه به بخشي از HKEY_LOCAL_MACHINE که مربوط به ساختار بندي سخت افزار هاست لينک مي شود .

هر مقدار رجيستري به يکي از 5 حالت زير ذخيره مي شود:

REG_BINARY : در اين شيوه مقادير بصورت رديف داده هاي باينري ذخيره مي شوند. اغلب اطلاعات اجزاء سخت افزار ها بصورت داده هاي باينري ذخيره شده و در يک ويرايشگر بصورت قالب بندي hexadecimal ديده مي شوند.

REG_DWORD : اين حالت براي داده هاي 4 بايتي که معمولا مقادير boolean ، همانند "0" براي غير فعال کردن و "1" براي فعال کردن . از ديگر موارد اين حالات راه انداز دستگاه و سرويس هايي از اين نوع هستند . و در REGEDT32 با قالب بندي هاي binary، hexadecimal و decimal و در REGEDIT نيز در قالب بندي هاي hexadecimal و decimal نشان داده مي شوند .
REG_EXPAND_SZ : اين حالت رشته داده اي قابل توسعه اي هستند و بصورت رشته اي شامل يک متغير است که در هنگام فراخواني توسط يک برنامه کاربردي جايگزين آن مي شوند براي مثال ، در مقادير زير :
رشته "%SystemRoot%" با موقعيت واقعي دايرکتوري که دربردارنده فايل هاي سيستمي Windows NT است ، جايگزين مي شود.

REG_MULTI_SZ : اين حالت درواقع بصورت چند رشته اي است و براي نمايش مقاديري که دربردارنده ليست ها و يا مقادير چند تايي هستند بکار مي رود، و هر عضو بوسيله يک کاراکتر NULL از بقيه جدا مي شود .البته اين حالت از مقادير تنها در موارد پيشرفته رجيستري همانند REGEDT32 مورد استفاده قرار مي گيرد.

REG_SZ : اين حالت نيز يک رشته استاندارد است که براي نمايش مقادير متني است که براي خواندن و استفاده افراد بکار مي رود.

مواردي از حالات داده ها که بوسيله ويرايشگر هاي استاندارد رجيستري در دسترس نيستند عبارتند از :

REG_DWORD_LITTLE_ENDIAN

REG_DWORD_BIG_ENDIAN

REG_LINK

REG_NONE

REG_QWORD

REG_QWORD_LITTLE_ENDIAN

REG_RESOURCE_LIST

کيفيت مقاله :
عالی خوب متوسط ضعيف


ويرايش رجيستری ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۹۰ مراجعه امروز
۵۱۰۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ويرايش رجيستری
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۲۰/۳/۱۳۸۲ اين مقاله ۵۸۳ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

برنامه ويرايشگر رجيستري (REGEDIT.EXE) که در نسخه هاي مختلف ويندوز قرار دارد (که از طريق منوي Start قابل دسترسي است) شما را قادر به مشاهده اطلاعات ، انجام جستجو و در نهايت امکان ويرايش مطالب به شکل مورد نظرتان را در رجيستري فراهم مي کند .براي اجراي اين برنامه چندين شيوه مختلف وجود دارد ، اما ساده ترين آنها تايپ عبارت "regedit" در پنجره Run که از طريق منوي Start در دسترس شما قرار دارد ، مي باشد. البته درصورتي که شما نرم افزار Registry Editor را در سيستم خود نصب کرده باشيد ، با تايپ دستور regedit

يک شکل ديگر از اين برنامه (REGEDT32.EXE) که مي توان در نسخه هاي 2000 و NT از آنها استفاده کرد ( که در واقع داراي برخي ويژگي هاي اضافي است که در نسخه هاي استاندارد قرار ندارد از جمله : توانايي مشاهده و تغيير مجوزهاي امنيتي و نيز امکان ايجاد و تغيير در مقادير رشته هاي REG_EXPAND_SZ & REG_MULTI_SZ.

ايجاد يک کليد ميانبر براي دسترسي سريع و آسان به اين برنامه
اين کار به سادگي و از طريق راست کليک کردن در يک محيط خالي صفحه Desktop ، انتخاب گزينه Shortcut و در نهايت تايپ عبارت "regedit.exe" در کادر پنجره Command line و انتخاب گزينه Next ، وارد کردن يک نام آشنا و قابل شناسايي همانند Registry Editor و در نهايت کليک کردن گزينه Finish امکان پذير مي باشد.در اين مرحله بر روي صفحه desktop شما يک ميانبر ايجاد شده و مي توانيد با دوبار کليک سريع بر روي آن برنامه Regedit را فعال کنيد.

استفاده از Regedit براي ايجاد تغييرات در رجيستري
اولين باري که اقدام به اجراي اين برنامه مي کنيد توجه داشته باشيد که در سمت چپ اين برنامه يک منوي درختي از پوشه ها قرار گرفته است و در سمت راست نيز مفاهيم ( مقادير) پوشه انتخاب شده شما قرار دارد.
درست همانند Windows explorer ، شاخه مورد نظر خود را انتخاب کرده و با کليک کردن علامت + و يا دوبار کليک سريع بر روي پوشه مربوطه آن را توسعه دهيد.براي مشاهده مفاهيم يک کليد (پوشه ) فقط کافي است کليد مربوطه را يک بار کليک نمائيد و مقادير آن را در پنجره سمت راست مشاهده کنيد .براي افزودن يک کليد و يا يک مقدار جديد مي توانيد از منوي Edit گزينه New را انتخاب کنيد. براي تغيير نام دادن يک مقدار و نيز اغلب کليد ها مي توان از همان ترتيبي که براي تغيير نام ساير آبجکت ها استفاده مي شود ، بهره برد. ( آبجکت مربوطه را راست کليک کنيد و گزينه Rename را انتخاب کنيد و يا به آهستگي آبجکت را کليک و يا بعد از انتخاب آن کليد F2 را فشار دهيد .
براي حذف هر يک از مقادير نيز مي توانيد آبجکت را انتخاب کرده و سپس کليد Delete را فشار دهيد . کرده و و يا دکمه سمت راست ماوس را برگزيده و و به مقاديري که در منوي زمينه ليست خواهند شد دقت کنيد.

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


نگهداري از رجيستري ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۹۳ مراجعه امروز
۵۱۰۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نگهداري از رجيستري
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۲۰/۳/۱۳۸۲ اين مقاله ۶۰۱ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

ويندوز 95
در cd نصب ويندوز 95 نرم افزاري وجود دراد که به شما امکان تهيه پشتيبان از رجيستري کامپيوتر را مي دهد . برنامه Microsoft Configuration Backup ، CFGBACK.EXE، در مسير Other\Misc\Cfgback و در Cd نصب ويندوز قابل دسترسي است .فايل هاي پشتيبان گرفته شده توسط اين برنامه با پسوند هاي RBK و در پوشه ذخيره مي شود Windows \ نگهداري مي شوند. اگر سيستم شما براي استفاده چندين کاربر ساختار بندي شده باشد، CFGBACK.EXE از فايل USER.DAT پشتيبان نمي گيرد.
بعد از پشتيبان گيري از رجيستري مي توانيد فايل RBK را به داخل يک فلاپي ديسک و براي موارد اضطراري کپي کنيد. اين فايل هاي پشتيبان در ويندوز 95 بصورت فشرده شده ذخيره مي شوند که تنها با استفاده از برنامه CFGBACK.EXE قابل استفاده هستند.

ويندوز 98
ويندوز 98 بطور اتوماتيک در هر زماني که راه اندازي مي شود ، يک نسخه پشتيبان از رجيستري را ايجاد مي کند. علاوه بر اين مي توانيد بطور دستي نسخه پشتيبان را از طريق نرم افزار Registry Checker که از طريق اجراي دستور SCANREGW.EXE از منوي Start | Run

چه راه حلي براي مواقع خراب شدن رجيستري وجود دارد؟
ويندوز 95، 98 و Nt همگي داراي مکانيسم پشتيبان گيري يکساني هستند که کاملا قابل اعتماد است .
ويندوز 95
در دايرکتوري ويندوز چندين فايل مخفي وجود دارد، 4 تا از اين فايل ها عبارتند از SYSTEM.DAT & USER.DAT که به عنوان فايل هاي جاري رجيستري و دو فايل SYSTEM.DA0 & USER.DA0 نيز که به عنوان فايل هاي پشتيبان هستند. ويندوز 9x داراي ويژگي جالبي است که هر زمان ويندوز به درستي و با موفقيت راه اندازي مي شود فايل هاي رجيستري را بر روي اين نسخه هاي پشتيبان کپي مي کند. بطوريکه در مواقعي که اين فايل ها دچار ايراد مي شوند ، اين فايل ها به جاي فايل هاي دچار ايراد جايگزين مي شوند .براي محافظت از رجيستري از مراحل زير پيروي کنيد :

1- دکمه Start را کليک کرده و سپس گزينه Shut Down را انتخاب کنيد.

2- گزينه Restart The Computer In MS-DOS Mode را انتخاب کرده و سپس yes را انتخاب نمائيد.

3- به پوشه نصب ويندوز وارد شويد.به عنوان مثال اگر دايرکتوري نصب آن c:\windows است ، آدرس cd c:\windows را تايپ نمائيد.

4- دستورات زير را تايپ

کرده و بعد از هر مورد کليد Enter را فشار دهيد :

attrib -h -r -s system.dat
attrib -h -r -s system.da0
copy system.da0 system.dat
attrib -h -r -s user.dat
attrib -h -r -s user.da0
copy user.da0 user.dat
5- کامپيوتر خود را مجددا راه اندازي نمائيد.
انجام دستورات فوق رجيستري را به حالتي بر مي گرداند که براي آخرين بار رجيستري در وضعيت صحيحي از آن قرار گرفته بوده است.

ويندوز NT
در ويندوز NT شما مي توانيد يا از گزينه Last Known Good و يا از گزينه RDISK استفاده کنيد تا رجيستري را به آخرين وشعيت قابل استفاده برگردانيد.
چطور مي توان داده هاي قديمي را از رجيستري حذف کرد؟

اگر چه مي توان بطور دستي اقدام به حذف مفاهيم غير قابل استفاده نمود، اما مايکروسافت ابزاري را تهيه کرده که مي تواند بطور اتوماتيک اين فرايند را انجام دهد. اين برنامه با نام RegClean شناخته مي شود .اين برنامه کليد هاي Windows Registry را آناليز مي کند.سپس اين برنامه کليد هاي داراي مقادير نادرست را يافته و آنها را از رجيستري حذف مي کند.اين نرم افزار از طريق آدرس زير نيز قابل دسترسي است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت دوم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۸ بيننده در حال حاضر
۱۶۸۰ مراجعه امروز
۴۲۷۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت دوم)
نويسنده : بهرام وکيلي
موضوع : C [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۳/۱۳۸۲ اين مقاله ۲۳۱۰ بار مطالعه شده است
۲۵ نفر تا به حال به اين مقاله رای داده اند.

براي شروع لازم است در مورد مسائلي كه به ترتيب عنوانهاي آنها قيد مي شود ... علاوه بر توضيحات اين مقاله مطالعه وسيع و مداومي نيز داشته باشيد

البته لازم به ذكر است كه فرض اين مقاله بر اين است كه مشتري يا خود شما امكان و يا به صرفه بودن توليد نرم افزار را براورد و درمورد ان مطمئن هستيد.

حل هر مسئله و خصوصا برنامه هاي كامپيوتري مستلزم گذراندن 5 مرحله است كه در شكل نشان داده شده است

همانگونه كه از شكل مشخص است هرچه 4 مرحله اول دقيق تر انجام شود احتمال تكرار مراحل قبلي كمتر و بالطبع زمان و در پي ان هزينه توليد نرم افزار كاهش مي يابد . در ميان 5 مرحله تحليل مهمترين بخش است چراكه تعريف صورت مساله در تحليل انجام ميشود. نمي خواهم بحث را طولاني كنم .فقط اين قضيه را خاطر نشان مي كنم كه اهميت "تحليل " بقدري زياد است كه در خارج از كشور شركتها ي توليدكننده نرم افزار حتما داراري چندين تحليلگر ماهر هستند كه از ابتدا تا انتهاي پروژه هدف پروژه را كنترل و مسير انرا اصلاح ميكنند.

بعنوان يك حاشيه مي توان زمانبندي 5 مرحله را نيز بصورت زير ترسيم نمود كه با مراجعه به كتابها و نرم افرارهاي مختلف مي توانيد اين نمودار را دقيق تر كنيد .
الف ) تحليل

"فهم مساله نيمي از حل مساله مي باشد"

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

پس قدم اول شناخت صورت مساله است .هدف از انجام اين قدم را مي توان پرداختن به 4 موضوع زير دانست

تعيين اطلاعاتي كه قابل مكانيزه كردن مي باشد
افرادي كه لازم است با اين ابزار(نرم افزارها) كار كنند.در پروژه هاي بزرگ اين مسئله شامل سلسله مراتب اولويت افراد نيز مي گردد
انتخاب نمونه هاي اصلي براي كار روي انها(فرمها پرونده ها اسناد و غيره.......)
ميزان گستردگي نمونه هاي انتخاب شده و همچنين كاهش ميزان پيچيدگي نرم افزار در موارد كم اهميت

براي انجام اين كار راههاي متععدي وجود دارد مانند :

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

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

البته در حين مراحل تحقيق چند نكته را از ياد نبريد

پررو باشيد : از سه عامل پول ، پارتي و پررويي اگر دوتاي اول را نداريد حداقل سومي را داشته باشيد . البته اين به معناي بي ادب بودن نيست بلكه به معناي سمج بودن يا در اصطلاح ادبي "پشتكار داشتن " براي دست يافتن به مطلب مورد نظر است
ايجاد وحشت نكنيد : با فيلمبرداري و ضبط صدا و يا حتي يادداشتها كاري نكنيد كه كارمندان احساس كنند شما درحال جمع اوري مدرك عليه او هستيد

يك تحليل گر علاوه بر ارائه انچه كه وجوددارد بايد بتواند راهكارهاي اصلاح سيستم فعلي را نيز ارائه كند كه به اين مقوله در بخش بعدي خواهيم پرداخت

کيفيت مقاله :
عالی خوب متوسط ضعيف


امکان حذف اجزاء و ملحقات ويندوز ( در ويندوز XP) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۲۹۶ مراجعه امروز
۵۱۱۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
امکان حذف اجزاء و ملحقات ويندوز ( در ويندوز XP)
نويسنده : مديريت سايت
موضوع : Windows [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۳/۱۳۸۲ اين مقاله ۸۰۳ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

در ويندوز اجزائي وجود دارد که بطور معمول در ليست Add/Remove Windows Components در دسترس نمي باشند. از اين رو نمي توان آنها را از طريق اين ليست حذف کرد. اين کليد به شما امکان حذف اجزاء مورد نظرتان را مي دهد .
فايل SYSOC.INF را که در پوشه INF در محل نصب سيستم عامل ويندوز قرار دارد باز کنيد .( بعنوان مثال C:\Windows\INF)
در زير قسمت سر صفحه آن اجزاء سيستمي نصب شده در کامپيوتر تان نشان داده شده اند . عناويني که کلمه "HIDE" يا "hide" در آنها وجود دارد در ليست Add/Remove Programs ديده نمي شوند .بعنوان مثال از آنجا که برنامه WordPad داراي عبارت "HIDE" مي باشد، در ليست نشان داده نمي شود.

MSWordPad=ocgen.dll,OcEntry,wordpad.inf,HIDE,7

براي تغيير يک آيتم بصورتي که در ليست مزبور نشان داده شود بايد عبارت HIDE را از آن حذف کرد . بعنوان مثال براي آنکه برنامه Wordpad در ليست مزبور نشان داده شود بايد عبارت

MSWordPad=ocgen.dll,OcEntry,wordpad.inf,HIDE,7 به عبارتMSWordPad=ocgen.dll,OcEntry,wordpad.inf,,7 : تغيير پيدا کند . اجزاء اصلي که در برنامه ويندوز XP بصورت مخفي هستند ، عبارتند از :

Accessibility Wizard
AccessOpt=ocgen.dll,OcEntry,optional.inf,HIDE,7

Automatic Windows Update
AutoUpdate=ocgen.dll,OcEntry,au.inf,hide,7

COM+
com=comsetup.dll,OcEntry,comnt5.inf,hide,7

Communications components (including Chat, Hyperterminal, and Phone Dialer)
CommApps=ocgen.dll,OcEntry,communic.inf,HIDE,7

Distributed Transaction Coordinator
dtc=msdtcstp.dll,OcEntry,dtcnt5.inf,hide,7

Windows Messenger
msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,hide,7

WordPad
MSWordPad=ocgen.dll,OcEntry,wordpad.inf,HIDE,7

Multimedia components (including Media Player, Volume Control, and Sound Recorder)
MultiM=ocgen.dll,OcEntry,multimed.inf,HIDE,7

Pinball game
Pinball=ocgen.dll,OcEntry,pinball.inf,HIDE,7

Tablet PC
TabletPC=tabletoc.dll,TabletSetupProc,Tabletpc.inf,HIDE,7

Terminal Server
TerminalServer=TsOc.dll, HydraOc, TsOc.inf,hide,2

Windows Management Instrumentation
WBEM=ocgen.dll,OcEntry,wbemoc.inf,hide,7
براي مشاهده اين برنامه ها در ليستAdd/Remove عبارت Hide را از آنها حذف کرده و فايل را دخيره کنيد .حال برنامه Add/Remove را اجرا کنيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


مباني زيرساخت شبکه هاي مبتني بر ويندوز ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۶۶ مراجعه امروز
۴۷۸۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مباني زيرساخت شبکه هاي مبتني بر ويندوز
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۳/۱۳۸۲ اين مقاله ۹۰۵ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.

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

مروري به زيرساخت شبکه هاي مبتني بر ويندوز
محصولات خانواده ويندوز 2000 سرويس دهنده ، مجموعه اي از تکنولوژي ها و سرويس ها را بمنظور نصب ،پيکربندي، مديريت و حمايت از زيرساخت شبکه ارائه مي نمايند. زير ساخت شبکه، مي تواند شامل هر يک از عناصر زير باشد :

اينترانت (Intranet) . يک شبکه خصوصي در يک سازمان که از آن بمنظور توزيع اطلاعات داخلي استفاده مي گردد. اينترانت ، يک شبکه محلي (LAN) نيز ناميده مي شود. اينترانت، شامل سرويس هاي متعددي نظير : توزيع مستندات، توزيع نرم افزار ،دستيابي به بانک هاي اطلاعاتي و موارد ديگر است . علاوه بر امکان اشتراک فايل و چاپگر، يک اينترانت امکان استفاده از نرم افزارهاي مرتبط با اينترنت را نيز فراهم مي نمايد: صفحات وب ،مرورگرهاي وب، پروتکل ارسال فايل (FTP) ،پست الکترونيکي، گروه هاي خبري و ليست هاي ارسال نامه الکترونيکي ، نمونه هائي در اين زمينه مي باشند.

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

ادارات از راه دور . بخشي از يک سازمان که از لحاظ جغرافيائي در يک مکان مجزاء نسبت به اداره مرکزي است . اين نوع دفاتر خود داراي يک شبکه محلي (LAN) بوده و مي توانند به شبکه سازمان مربوطه متصل و يک شبکه WAN را ايجاد نمايند. اتصال WAN ، يک اتصال از راه دور اشتراکي به شبکه بمنظور امکان دستيابي کاربران ادارات راه دوربه منابع مشترک در تمام سازمان است . لينک هاي WAN دائمي بوده و همواره قابل دستيابي مي باشند .

اينترنت . مجموعه اي گسترده از شبکه ها و دروازه ها که از پروتکل TCP/IP بمنظور ارتباط با يکديگر استفاده مي نمايند. اينترنت، شامل خطوط ارتباطي با سرعت بالا بين گره هاي اصلي و يا کامپيوترهاي ميزباني است که داده ها و پيام ها را Route مي نمايد.

اکسترانت (Extranet) . يک شبکه مشترک که از تکنولوژي اينترنت بمنظور تسهيل در ارتباط بين بنگاه هاي تجاري ، تهيه کنندگان ، مشتريان و يا ساير فعاليت هاي تجاري استفاده مي گردد . يک اکسترانت ،ممکن است بعنوان بخشي از يک اينترانت سازمان بوده که ساير سازمان ها قادر به دستيابي به آن مي باشند. اشتراک و استفاده از اطلاعات مي تواند جنبه عمومي داشته و يا صرفا" گروه هاي خاصي را شامل گردد .

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

اينترانت ها
اينترانت، يک شبکه خصوصي است که امکان اتصال کامپيوترها و دستگاه هاي مورد نظر را بمنظور ارتباط با يکديگر فراهم مي نمايد. مهمترين وظيفه ( عمليات ) يک اينترانت ،امکان اشتراک اطلاعات و منابع براي کاربران است . بمنظور ارتباط با شبکه از پروتکل TCP/IP ،استفاده مي گردد . TCP/IP ، مجموعه اي از پروتکل ها ئي است که بعنوان يک استاندارد صنعتي پذيرفته شده و اغلب سرويس هاي شبکه در ويندوز وابسته به آن مي باشند. قابليت TCP/IP ، بگونه اي است که امکان استفاده از آن درشبکه هائي با ابعاد متفاوت وجود خواهد داشت . پروتکل فوق ، در زمان نصب ويندوز 2000 بصورت استاندارد و پيش فرض نصب مي گردد.

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

دستيابي از راه دور بصورت Dial-up . بمنظور دستيابي به شبکه از راه دور توسط Dial-up ، يک سرويس گيرنده ، از شبکه تلفن موجود استفاده تا با يک پورت بر روي سرويس دهنده مرتبط و يک ارتباط فيزيکي را ايجاد نمايد. در اين روش ، اغلب از يک مودم و يا آداپتورهاي ISDN)Integrated Services Digital Network ) ، استفاده تا با سرويس دهنده ، ارتباط برقرار گردد .

دستيابي از راه دور VPN . يک VPN)Virtual private network ) ، امکان دستيابي از راه دور ايمن و مطمئن ، بکمک اينترنت ، را فراهم مي نمايد( در مقابل تماس مستقيم تلفني ) . سرويس گيرنده VPN يک اتصال رمزشده مجازي و نقطه به نقطه (Point-to-point) را با يک دروازه VPN که در شبکه خصوصي وجود دارد، برقرار مي نمايد.در اين روش مي توان به اينترنت و با سرعت بالا متصل و در ادامه اتصال VPN را ايجاد کرد .

ارزيابي روش هاي دستيابي از راه دور
بمنظور ارائه يک راه حل جهت دستيابي از راه دور ، مي بايست در ابتدا نيازها و خواسته هاي مربوط مشخص و در ادامه با توجه به گزينه هاي موجود ، مزايا و ويژگي هاي هر يک از راه حل هاي موجود ( Dial-up و يا VPN) بررسي و مقايسه گردد .براي ارائه يک راه حل ، مي توان صرفا" اقدام به انتخاب يک روش و يا از هر دو روش ممکن ، استفاده کرد. مثلا" برخي سازمان ها از يک VPN بعنوان اتصال اوليه استفاده و از اتصال Dial-up ، براي موارديکه دستيابي به اينترنت غيرممکن است ،استفاده مي نمايند . براي ارزيابي روش هاي دستيابي از راه دور ، موارد زير پيشنهاد مي گردد :

استفاده از روش Dial-up ، در موارديکه سازمان ها و موسسات داراي کاربران از راه دور محدود و يا کاربران ساکن در مناطق محلي تماس مي باشند ، پيشنهاد مي گردد .

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

ارتباط با ادارات از راه دور
سازمان ها و موسسات ، اغلب داراي يک و يا چندين شعبه در مکان هاي از راه دور بوده که در هر يک از آنها شبکه هاي محلي ، نيز وجود دارد . با اتصال اين شبکه ها بيکديگر يک سازمان قادر به ارائه خدمات و عمليات خود بصورت موثرتر، خواهد بود . بدين ترتيب ، کارکنان ادارات راه دور، قادر به اشتراک اطلاعات و ارتباط با کارکنان مستقر در دفاتر مرکزي ، خواهند بود . کارکناني که بين ادارات متعدد مسافرت مي نمايند ، نيز قادر به دستيابي فايل ها و منابع از طريق هر يک از ادارت راه دور، مي باشند . سگمنت هاي متعدد شبکه هاي مبتني بر پروتکل TCP/IP را مي توان با استفاده از روتر بيکديگر متصل نمود. روتر باعث forward نمودن بسته ها ي اطلاعاتي از يک سگمنت شبکه به سگمنت ديگر مي گردد .

امکان دستيابي به اينترنت
سازمان ها و موسسات متعدد، نيازمند دستيابي به اينترنت براي ايجاد يک وب سايت، دستيابي از راه دور VPN , انجام تحقيقات و يا استفاده از سيستم پست الکترونيکي، مي باشند . ويندوز 2000 ، سرويس هاي لازم بمنظور ارتباط يک سازمان به اينترنت را فراهم مي نمايد. بمنظور دستيابي به اينترنت از گزينه هاي متعددي استفاده مي گردد :

Dial-Up به ISP . از روش فوق، در سازمان هاي کوچک و برخي کاربران خانگي ، استفاده مي گردد.

يک خط اختصاصي نظير T1 که به يک شبکه LAN متصل مي گردد . روش فوق، براي سازمان هاي بزرگ که داراي کاربران متعدد با نوع استفاده متنوع از اينترنت ، مي باشند ، مناسب است . سازمان ها و موسساتي که تمايل به راه اندازي وب سايت و يا سرويس پست الکترونيکي و ساير سرويس هاي اختصاصي خود در اينترنت را دارند ، مي توانند از گزينه فوق استفاده نمايند .

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


مباني ويندوز و شبکه ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۶۹ مراجعه امروز
۴۷۸۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مباني ويندوز و شبکه ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۳/۱۳۸۲ اين مقاله ۱۰۰۲ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

سيستم عامل ويندوز يکي از متداولترين سيستم هاي عامل شبکه اي است که براي برپاسازي شبکه هاي کامپيوتري استفاده مي گردد . در اين مقاله قصد داريم به بررسي اوليه ويندوز بعنوان يک سيستم عامل پرداخته و در ادامه با مفاهيم اوليه شبکه آشنا و در نهايت به بررسي برخي از مفاهيم اوليه ويندوز بعنوان يک سيستم عامل شبکه اي ، بپردازيم .

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

نسخه هاي متفاوت ويندوز 2000
ويندوز 2000 ، مجموعه اي گسترده از امکانات و ابزارهاي لازم ، بمنظور مديريت يک شبکه کامپيوتري را ارائه و داراي نسخه هاي متفاوت زير است :

Microsoft Windows 2000 Professional . نسخه فوق، داراي امکانات گسترده ويندوز 98 بوده و بر اساس قدرت سنتي سيستم عامل ويندوز NT 4.0 ، ايجاد شده است . اين نسخه ، داراي يک رابط کاربر ساده بوده و علاوه بر بهبود در عمليات Plug&Play و مديريت Power ، مجموعه اي گسترده از دستگاه هاي سخت افزاري را حمايت مي نمايد. نسخه فوق، حداکثر دو پردازنده و 4 گيگابايت حافظه را حمايت مي نمايد.

Microsoft Windows 2000 Server . نسخه فوق، بعنوان نسخه استاندارد خانواده windows 2000 server ، مطرح مي باشد. اين نسخه داراي تمامي امکانات windows 2000 professional بوده و براي سازمان هاي کوچک تا متوسط ايده آل و بخوبي با سرويس دهندگان فايل ، چاپگر ، وب و Workgroup ، کار مي نمايد. نسخه فوق، قادر به حمايت از حداکثر 4 پردازنده و 4 گيگابايت حافظه فيزيکي است .

Microsoft Windows 2000 Advanced Server . نسخه فوق، داراي تمامي امکانات نسخه windows 2000 server بوده و علاوه بر آن قابليت گسترش و در دسترس بودن بيشتري را دارا است . با گسترش شبکه ، قدرت پردازش سيستم بصورت تصاعدي افزايش خواهد يافت.بدين منظور از کلاسترهائي که شامل چندين سرويس دهنده مي باشند ، استفاده مي گردد. سرويس دهندگان فوق ، توان پردازشي اضافه اي را ارائه و بدين ترتيب قابليت در دسترس بودن سيستم نيز، افزايش خواهد يافت . در صورتيکه يکي از سرويس دهندگان بدلايلي غيرقابل دسترس گردد، ساير سرويس دهندگان موجود در کلاستر، سرويس هاي مورد نياز را ارائه خواهند داد . نسخه فوق، مختص سرويس دهندگاني است که در شبکه هاي بسيار بزرگ ايفاي وظيفه نموده و عمليات گسترده اي را در ارتباط با بانک هاي اطلاعاتي انجام مي دهند. نسخه فوق، قادر به حمايت از هشت پردازنده و هشت گيگابايت حافظه فيزيکي است .

Microsoft Windows 2000 Datacenter Server . نسخه فوق، داراي تمام امکانات Advanced server بوده و علاوه بر آن امکان استفاده از حافظه و پردارنده هاي بمراتب بيشتري در هر کامپيوتر را فراهم مي نمايد. نسخه فوق، براي ذخيره سازي حجم بسيار بالائي از داده ها ، پردازش هاي تراکنشي online و شبيه سازي هاي بزرگ استفاده مي گردد . نسخه فوق، قادر به حمايت از حداکثر 32 پردازنده و 64 گيگابايت حافظه فيزيکي است .

وظايف سيستم عامل
سيستم عامل ، نرم افزاري است که امکانات لازم بمنظور ارتباط برنامه ها با سخت افزار را فراهم مي نمايد. مهمترين وظايف يک سيستم عامل در ارتباط با عمليات در يک کامپيوتر ، بشرح زير مي باشد :

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

مديريت نرم افزار. سيستم عامل ، مکانيزمي براي مقداردهي اوليه پردازه ها ي مربوط به برنامه ها را فراهم مي نمايد.

مديريت حافظه . سيستم عامل، عمليات اختصاص حافظه براي هر برنامه بدون تاثيرگذاري بر فضاي استفاده شده توسط ساير برنامه ها را فراهم مي نمايد.

مديريت داده . سيستم عامل، مديريت فايل هاي ذخيره شده بر روي هارد ديسک و ساير رسانه هاي ذخيره سازي را بر عهده دارد . در اين راستا ، امکان ايجاد و فعال کردن فايل ها در اختيار برنامه ها قرار گرفته و زمينه مباددله داده بين دستگاههاي فراهم خواهدشد. سيستم عامل، امکان انجام عمليات مديريتي در ارتباط با فايل ها نظير تغيير نام و يا حذف فايل ها را نيز فراهم مي نمايد.

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

سيستم عامل ويندوز 2000 ، امکانات گسترده و پيشرفته اي را در اختيار کاربران قرار مي دهد:

Multitasking . با استفاده از ويژگي فوق، کاربران قادر به اجراي چندين برنامه بصورت همزمان بر روي يک سيستم مي شوند. تعداد برنامه هائي که يک کاربر قادر به اجراي همزمان آنان خواهد بود به ميزان حافظه موجود بر روي سيستم بستگي خواهد داشت .

Memory Support . بمنظور انجام عمليا ت مربوط به برنامه هائي که در محيط ويندوز 2000 اجراء مي گردند ، به ميزان مطلوبي از حافظه ، نياز خواهد بود. براي اجراي چندين برنامه بصورت همزمان و يا اجراي برنامه هائي که ميزان بالائي از حافظه را نياز دارند ، ويندوز 2000 امکان حمايت تا 64 گيگابايت را فراهم مي نمايد.

Symmetric Multiprocessing . سيستم هاي عامل از ويژگي فوق، بمنظور استفاده همزمان از چندين پردازنده استفاده مي نمايند .بدين ترتيب کارآئي سيستم بهبود و يک برنامه در محدوده زماني کمتري اجراء خواهد شد .ويندوز 2000 ، امکان حمايت ( با توجه به نوع نسخه ) از حداکثر 32 پردازنده را فراهم مي نمايد.

Plug &Play . با استفاده از ويندوز 2000 ، دستگاههائي از نوع PNP بسادگي نصب مي گردند . دستگاههاي PNP ، دستگاههائي هستند که پس از اتصال به سيستم ، بدون نياز به انجام فرآيندهاي پيچيده ، نصب خواهند شد . پس از اتصال چنين دستگاههائي، ويندوز 2000 بصورت اتوماتيک آنان را تشخيص و عناصر مورد نياز را نصب و پيکربندي مربوطه را انجام خواهد داد .

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

File System . ويندوز 2000 ، از سه نوع متفاوت سيستم فايل حمايت مي نمايد : FAT(File Allocation table) ، FAT32 و NTFS . در صورتيکه نيازي به استتفاده از قابليت هاي بوت دوگانه (راه اندازي سيستم از طريق دو نوع متفاوت سيستم عامل با توجه به خواسته کاربر) وجود نداشته باشد، ضرورتي به استفاده از سيستم فايل FAT و يا FAT32 وجود نخواهد داشت . NTFS ، سيستم فايل پيشنهادي براي ويندوز 2000 بوده و امکانات امنيتي مناسبي را ارائه مي نمايد. ويندوز 2000 ، با استفاده از سيستم NTFS امکانات متعددي نظير : بازيافت سيستم فايل، اندازه پارتيش هاي بالا، امنيت، فشرده سازي و Disk Quotas را ارائه مي نمايد.

Quality of Service )QoS) . امکان QoS ، مجموعه اي از سرويس هاي مورد نظر بمنظور حصول اطمينان از انتقال داده ها با يک سطح قابل قبول در يک شبکه است با استفاده از QoS ، مي توان نحوه پهناي باند اختصاصي به يک برنامه را کنترل نمود. QoS ، يک سيستم مناسب ، سريع و تضمين شده براي اطلاعات در شبکه را فراهم مي نمايد .

Terminal Service . با استفاده از ويژگي فوق ، امکان دستيابي از راه دور به يک سرويس دهنده از طريق يک ترمينال شبيه سازي شده ، فراهم مي گردد . يک ترمينال شبيه سازي شده ، برنامه اي است که امکان دستيابي به يک کامپيوتر از راه دور را بگونه اي فراهم مي نمايد که تصور مي شود شما در کنار سيستم بصورت فيزيکي قرار گرفته ايد. با استفاده از سرويس ترمينال، مي توان برنامه هاي سرويس گيرنده را بر روي سرويس دهنده اجراء و بدين ترتيب کامپيوتر سرويس گيرنده بعنوان يک ترمينال ايفاي وظيفه خواهد کرد ( نه بعنوان يک سيستم مستقل) . بدين ترتيب هزينه مربوط به عمليات و نگهداري شبکه کاهش و مي توان مديريت سرويس دهنده را از هر مکاني بر روي شبکه انجام داد.

Remote Installation Services)RIS) . سرويس فوق، امکان بکارگيري سيستم عامل در يک سازمان توسط مديران سيستم را تسريع و بهبود خواهد بخشيد. بدين ترتيب نياز به ملاقات فيزيکي هر يک از کامپيوترهاي سرويس گيرنده وجود نداشته و مي توان از راه دور ، اقدام به نصب نمود. سرويس فوق ، يک عنصر انتخابي بوده و بعنوان بخشي از نسخه windows 2000 server است .

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

مزاياي شبکه
برپاسازي يک شبکه کامپيوتري داراي مزاياي زير است :

اشتراک اطلاعات . امکان اشتراک اطلاعات و داده ها با سرعت مطلوب و هزينه پايين ، از مهمترين مزاياي يک شبکه کامپيوتري است .

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

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

نقش ( وظايف ) کامپيوترها در شبکه
کامپيوترهاي موجود در شبکه بعنوان سرويس گيرنده و يا سرويس دهنده، ايفاي وظيفه مي نمايند .

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

کامپيوترهاي سرويس دهنده، کامپيوترهائي هستند که سرويس ها و داده هاي مورد نياز کامپيوترهاي سرويس گيرنده را ارائه مي نمايند. سرويس دهندگان در شبکه ، عمليات متفاوت و پيچيده اي را انجام مي دهند. سرويس دهندگان، براي شبکه هاي بزرگ اختصاصي شده تا قادر به پاسخگوئي به نيازهاي توسعه يافته کاربران باشند. نمونه هاي زير انواع متفاوت سرويس دهندگان در يک شبکه بزرگ را نشان مي دهد:
سرويس دهنده فايل و چاپ . اين نوع سرويس دهندگان، منابع فايل و چاپگر را از طريق يک نقظه متمرکز، ارائه مي نمايند. زمانيکه سرويس گيرنده اي درخواست خود را براي دريافت داده ، فايل و سرويس دهنده چاپ ، ارسال مي نمايد، تمام اطلاعات و يا فايل درخواستي بر روي کامپيوتر متقاصي دريافت مي گردد. مثلا" زمانيکه يک برنامه واژه پرداز فعال مي گردد، برنامه برروي کامپيوتر شما اجراء و مستندات ذخيره شده بر روي سرويس دهنده چاپ و يا فايل در حافظه کامپيوتر شما مستقر تا امکان ويرايش و يا استفاده محلي از مستندات فراهم گردد . زمانيکه مستندات مجددا" بر روي سرويس دهنده ذخيره مي گردد، ساير کاربران شبکه که داراي مجوزهاي لازم دستيابي مي باشند ، قادر به مشاهده و استفاده از مستندات خواهند بود.سرويس دهندگان فايل و چاپ، تمرکزدر ذخيره سازي فايل ها و داده ها را بدنبال خواهند داشت.
سرويس دهنده بانک اطلاعاتي . سرويس دهندگان بانک اطلاعاتي، قادر به ذخيره سازي حجم بالائي از داده ها در يک مکان متمرکز بوده و از اين طريق داده ها در دسترس کاربران قرار گرفته و ضرورتي به دريافت تمام بانک اطلاعاتي نخواهد بود. با استفاده از يک سرويس دهنده بانک اطلاعاتي، تمام بانک اطلاعاتي بر روي سرويس دهنده ذخيره و صرفا" نتايج مربوط به يک درخواست براي متقاضي ارسال خواهد شد. مثلا" مي توان از بانک اطلاعاتي کارکنان بر روي يک سرويس دهنده اطلاعاتي نظير Microsoft SQL Server استفاده کرد. زمانيکه سرويس دهنده درخواست شما را پردازش مي نمايد ، صرفا" نتايج پرس و جو (Query) از طريق سرويس دهنده براي سرويس گيرنده ارسال مي گردد.
سرويس دهنده پستت الکترونيکي . سرويس دهنده پست الکترونيکي، نظير سرويس دهنده بانک اطلاعاتي رفتار مي نمايد با اين تفاوت که از برنامه هاي سرويس دهنده و سرويس گيرنده مجزائي استفاده مي گردد. داده هاي انتخابي از سرويس دهنده براي سرويس گيرنده ارسال خواهد شد. سرويس دهنده پست الکترونيکي، مديريت پيام هاي الکترونيکي در شبکه برعهده دارد.
سرويس دهنده فاکس (نمابر) . سرويس دهندگان فاکس، مديريت ترافيک فاکس به و يا از شبکه را با اشتراک يک و يا چندين دستگاه فاکس مودم ، فراهم مي نمايند. بدين ترتيب، سرويس فاکس براي هر يک از کاربران شبکه فراهم و ضرورتي به نصب يک دستگاه فاکس براي هر يک از کامپيوترها ، وجود نخواهد داشت .
سرويس دهنده Directory Service . سرويس دهنده فوق، يک محل مرکزي بمنظور ذخيره اطلاعات در رابطه با شبکه نظير اسامي کاربران و منابع موجود در شبکه است . بدين ترتيبز امنيت شبکه بصورت متمزکز مديريت خواهد شد . مديريت شبکه قادر به تعريف يک منبع نظير چاپگر و نوع دستيابي کاربران،خواهد بود. پس از تعريف منابع توسط مديريت شبکه، کاربران قادر به دستيابي و استفاده از منابع خواهند بود. نوع استفاده از منابع بر اساس سياست هاتي است که توسط مديريت شبکه براي کاربران تعريف و درنظر گرفته شده است .

انواع شبکه
با توجه به نحوه پيکربندي کامپيوترها در شبکه و نحوه دستيابي به اطلاعات ، شبکه ها را به دو گروه عمده Peer-To-Peer و Client Server تقسيم مي نمايند:

Peer-To-Peer ( نظير به نظير ) . در شبکه هاي نظير به نظير، سرويس دهنده اختصاصي وجود نداشته و سلسله مراتبي در رابطه با کامپيوترها رعايت نمي گردد. تمام کامپيوترها معادل و همتراز مي باشند. هر کامپيوتر در شبکه هم بعنوان سرويس گيرنده وهم بعنوان سرويس دهنده ايفاي وظيفه نموده و امنيت بصورت محلي و بر روي هر کامپيوتر ارائه مي گردد . کاربر هر يک از کامپيوترها مشخص مي نمايد که چه داده ئي بر روي کامپيوتر خود را مي بايست به اشتراک قرار دهد. شبکه هاي نظير به نظير workgroup ، نيز ناميده مي شوند . واژه workgroup ، نشاندهنده يک گروه کوچک ( معمولا" ده و يا کمتر ) از کامپيوترهاي مرتبط با يکديگر است . شبکه هاي نظير به نظير ، گزينه اي مناسب براي محيط هائي با شرايط زير مي باشند:
? حداکثر تعداد کاربران ده و يا کمتر .
? کاربران منابع و چاپگرها را به اشتراک گذاشته و در اين راستا ، سرويس دهندگان خاصي وجود ندارد.
? امنيت متمرکز مورد نظر نباشد .
? رشد سازمان و شبکه بر اساس آناليز شده، محدود باشد .

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

در بخش دوم اين مقاله ، به بررسي سيستم هاي عامل شبکه اي پرداخته و نحوه پياده سازي شبکه در ويندوز بررسي خواهد شد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مباني ويندوز و شبکه ( بخش دوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۷۲ مراجعه امروز
۴۷۸۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مباني ويندوز و شبکه ( بخش دوم )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۳/۱۳۸۲ اين مقاله ۸۹۷ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

در بخش اول اين مقاله به مفاهيم اوليه ويندوز و شبکه اشاره گرديد . در اين بخش به بررسي سيستم هاي عامل شبکه اي و نحوه پياده سازي شبکه با استفاده از ويندوز 2000 خواهيم پرداخت .

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

هماهنگي لازم در خصوص عملکرد دستگاه هاي متفاوت در شبکه بمنظور حصول اطمينان از برقراري ارتباط در مواقع ضروري

امکان دستيابي سرويس گيرندگان به منابع شبکه نظير فايل ها و دستگاه هاي جانبي نظير چاپگرها و دستگاه هاي فاکس

اطمينان از ايمن بودن داده ها و دستگاههاي موجود در شبکه از طريق تمرکز ابزارهاي مديريتي

ويژگي هاي يک سيستم عامل شبکه اي
يک سيستم عامل شبکه اي مي بايست امکانات و خدمات اوليه زير را ارائه نمايد:

ارائه مکانيزم ها ي لازم بمنظور برقراري ارتباط بين چندين دستگاه کامپيوتر براي انجام يک فعاليت

حمايت از چندين پردازنده

حمايت از مجموعه اي (کلاستر) ديسک درايو

ارائه امکانات و سرويس هاي امنيتي در رابطه با حفاظت از داده ها و ساير منابع موجود در شبکه

قابليت اطمينان بالا

تشخيص و برطرف نمودن خطاء با سرعت مناسب

بر اساس نوع سيستم عامل ، يک نرم افزار شبکه اي مي تواند به سيستم عامل ، اضافه و يا بصورت يکپارچه با سيستم عامل همراه باشد . نرم افزار سيستم عامل شبکه اي با مجموعه اي از سيتسم هاي عامل رايج نظير : ويندوز 2000 ، ويندوز NT ، ويندوز 98 ، ويندوز 95 واپل مکينتاش ، بصورت يکپارچه همراه مي گردد .

پياده سازي شبکه در ويندوز 2000
ويندوز 2000 ، با سازماندهي Domain وسرويس Active Directory ، نياز سازمان ها و موسسات بمنظور ارتباط کاربران و شبکه ها با يکديگر را فراهم مي نمايد. برپاسازي يک شبکه مبتني بر ويندوز 2000 ، بهبود در اشتراک اطلاعات ، انجام موثرتر عمليات ، ايجاد زيرساخت مناسب ارتباطي ، ارائه سرويس هاي ارتباطي مطلوب را براي سازمان ها بدنبال خواهد داشت .

ويژگي هاي يک Domain
Domain ، يک گروه بندي منطقي از کامپيوترهاي شبکه اي است که از يک محل مشترک بمنظور ذخيره سازي اطلاعات امنيتي ، استفاده مي نمايند. استفاده از Domain ، تمرکز در مديريت منابع شبکه را بدنبال خواهد داشت . بدين ترتيب پس از ورود کاربران به شبکه و تائيد صلاحيت آنان ، زمينه استفاده از منابع به اشتراک گذاشته شده در ساير کامپيوترهاي موجود در Domain ، با توجه به مجوزهاي تعريف شده ، فراهم مي گردد . Domain ، درمفهوم مشابه Workgroup بوده ولي امکانات و ويژگي هاي بمراتب بيشتر و مفيدتري را ارائه مي نمايد :

Single logon . با استفاده از Domain ، فرآيند ورود به شبکه صرفا" يک مرتبه انجام و کاربران قادر به استفاده از منابع متفاوت موجود درشبکه شامل: فايل ها ، چاپگرها و برنامه ها ، خواهند بود. Account مربوط به تمامي کاربران در يک مکان متمرکز ، ذخيره مي گردد.

Single User Account . کاربران يک Domain ، صرفا" از يک Account بمنظور دستيابي به منابع موجود بر روي کامپيوترها ، استفاده خواهند کرد ( بر خلاف workgroup که نيازمند يک account مجزاء بمنظور دستيابي به هر يک از کامپيوترها است ) .

مديريت متمرکز . با استفاده از Domain ، امکان مديريت متمرکز فراهم خواهد شد . Account مربوط به کاربران و منابع اطلاعاتي موجود، از طريق يک نقطه متمرکز ، مديريت خواهد شد.

Scalability . استفاده از Domain ، امکان گسترش و توسعه در شبکه را افزايش خواهد داد . روش دستيابي کاربران به منابع و نحوه مديريت منابع در يک شبکه بسيار بزرگ مشابه يک شبکه کوچک خواهد بود .

مزاياي استفاده از Domain
استفاده از Domain ، داراي مزاياي زير است :

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

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

دستيابي آسان و موثر . تعريف و بکارگيري يک سياست گروهي در ارتباط با يک Domain ،نحوه دستيابي کاربران به منابع تعريف شده در Domain را مشخص مي نمايد. بدين ترتيب استفاده از منابع بهمراه رويکردهاي امنيتي ، يکپارچه مي گردد .

تفويض اختيار. با استفاده از Domain ، امکان واگذاري مسئوليت مربوط به مديريت اشياء در تمام Doamin و يا در بخش هائي خاص ، فراهم مي گردد .

ساختار Domain
هر Domain توسط يک کنترل کننده Domain ، مديريت مي گردد. بمنظور تسهيل در مديريت چندين Domain ، مي توان Domain ها را در ساختارهائي با نام درخت (Tree) و جنگل (Forest) ، گروه بندي کرد .

کنترل کننده Domain
کامپيوتري که برروي آن سرويس دهنده ويندوز 2000 اجراء و مديريت Domain را برعهده مي گيرد، کنترل کننده Domain ناميده مي شود. کنترل کننده Domain ، تمام عملياتي امنيتي مرتبط با کاربران و Domain را مديريت مي نمايد.

درخت
درخت، يک سازماندهي سلسله مراتبي از Domain هاي ويندوز 2000 بوده که يک نام را به اشتراک مي گذارند . زمانيکه يک Domain به يک درخت موجود اضافه مي گردد، بعنوان يک subDomain ، در نظر گرفته مي شود. SubDomain ، يک Child domain نيز ناميده شده و Domain اضافه شده از طريق Parent domain مربوطه شناخته مي گردد . پس از اينکه Child Domain به درخت ملحق گرديد نام Domain آن به نام Domain parent اضافه مي شود. مثلا" زمانيکه يک Domain با نام Tehran به يک درخت موجود ملحق و بعنوان يک Chid Domain از Domain با نام Citys.com مطرح گردد ، نام Domain مربوطه، بصورت Tehran.Citys.com خواهد بود.

جنگل
جنگل، شامل گروهي از درخت ها بوده که در مقابل استفاده از يک نام مشترک، از يک پيکربندي مشترک استفاده مي نمايند. بمنظور مراجعه به جنگل ، بصورت پيش فرض از نام ريشه درخت و يا اولين درختي که در جنگل ايجاد مي گردد ، استفاده مي گردد . مثلا" در صورتيکه Citys.com اولين Domain در اولين درخت باشد و درخت ديگر به آن ملحق تا يک جنگل را ايجاد نمايند نام، جنگل Citys.com خواهد بود.

ويژگي هاي Active Directory
Active Directory ، سرويس دايرکتوري ويندوز 2000 است . Active Directory ، اطلاعات مربوط به اشياء شبکه را ذخيره و با ارائه يک ساختار سلسله مراتبي، زمينه سازماندهي Domain ها و منابع را بسادگي فراهم مي نمايد . بدين ترتيب کاربران بسادگي قادر به مکانيابي منابع شبکه نظير فايل ها و چاپگرها ، خواهند بود . Active Directory داراي ويژگي هاي متعددي است :

Active Directory ، باعث سازماندهي دايرکتوري به بخش هائي خواهد شد که امکان ذخيره سازي حجم بالائي از اشياء را فراهم مي آورد . دستاورد ويژگي فوق ، توسعه Active Directory ، همزمان با رشد يک سازمان ، خواهد بود. بدين ترتيب، امکان رشد شبکه اي با صرفا" يک سرويس دهنده و کمتر از يکصد شي به شبکه اي با هزاران سرويس دهنده و ميليون ها شي فراهم خواهد شد .

Active Directory ،يک مکان متمرکز بمنظور جمع آوري و توزيع اطلاعات در رابطه با اشياء موجود در شبکه شامل کاربران، گروهها و چاپگرها بوده و امکان يافتن و استفاده از اطلاعات را آسان خواهد کرد.

تدابير امنيتي در ارتباط با Active Directory ، پيش بيني و زمينه تحقق آن با استفاده از Log on و کنترل دستيابي به اشياء موجود در دايرکتوري، فراهم مي گردد . پس از فرآيند ورود به شبکه ( يک log on به يک شبکه ) ، مديران شبکه قادر به مديريت داده ها ي موجود در دايرکتوري مي گردند . کاربران تائيد شده نيز امکان دستيابي به منابع موجود درشبکه را از هر مکاني بدست خواهند آورد.

مزاياي Active Directory
استفاده از Active Directory ، داراي مزاياي زير است :

کاهش مجموع هزينه مالکيت . پارامتر فوق به هزينه مالکيت يک کامپيوتر، مرتبط مي گردد . هزينه فوق شامل : هزينه هاي مربوط به نگهداري ، آموزش ،پشتيباني فني ، ارتقاء سخت افزار و نرم افزار است . Active Directory، با پياده سازي سياست ها باعث کاهش برخي از هزينه هاي فوق ،مي گردد . بکارگيري يک سياست بهمراه Active Directory ، اين امکان را فراهم مي آورد که پيکربندي محيط مربوطه ونصب برنامه ها ، از يک مکان مرکزي ، انجام شود. بدين ترتيب زمان مربوط به پيکربندي و نصب برنامه ها بر روي هر کامپيوتر ،کاهش پيدا خواهد کرد .

مديريت انعطاف پذير . واحد هاي سازماني درون يک Domain را مي توان بر اساس سياست هاي موجود در Active Directory ، تقسيم نمود. بدين ترتيب ، واحدهاي سازماني ،امکان تعريف کاربراني خاص بمنظور مديريت بخش هائي خاص از شبکه را بدست مي آورند .

Scalability . با استفاده از Active Directory ، امکان استفاده از سرويس هاي دايرکتوري براي سازمان ها ئي با ابعاد متفاوت، فراهم مي گردد .

تسهيل در مديريت . Active Directory ، ابزارهاي مديريتي خاصي را ارائه که مديران شبکه، با استفاده از آنان قادر به مديريت منابع موجود در شبکه خواهند بود.

دستيابي به يک شبکه ويندوز 2000
براي استفاده از منابع تعريف شده در شبکه، کاربران مي بايست فرآيند Log on را دنبال نمايند . در زمان فرآيند Log on ، ويندوز 2000 اعتبار و هويت يک کاربر را تائيد خواهد کرد . فرآيند فوق ، اين اطمينان را بوجود خواهد آورد که صرفا" کاربران معتبر و تائيد شده، قادر به دستيابي منابع موجود بر روي يک کامپيوتر در شبکه ،خواهند بود . پس از اتمام موفقيت آميز فرآيند ورود به شبکه ،زمينه استفاده از منابع موجود در تمام شبکه با توجه به سياست هاي تعريف شده، فراهم مي گردد . کاربران براي دستيابي به منابع در يک شبکه مبتني بر ويندوز 2000 ، به يک Account ، نياز خواهد داشت . Account ، شامل اطلاعات مرتبط با يک کاربر بوده و شامل نام و رمز عبور است . در صورتيکه کامپيوتر يک Memeber Domain باشد ، Account مربوط به کاربر، امکان log on نمودن به کامپيوتر بصورت محلي و يا به Domain ( اما نه هر دو ) را فراهم و زمينه استفاده از منابع موجود در شبکه با توجه به مجوزهاي تعريف شده ، فراهم خواهد شد . در صورتيکه کامپيوتر عضوي از يک Workgroup باشد ، Account مربوطه ، امکان Log on نمودن کاربر را صرفا" به کامپيوتر محلي، فراهم مي نمايد. ( چون Account کاربر صرفا" بر روي بانک اطلاعاتي امنيتي همان کامپيوتر محلي ذخيره شده است ) . براي ورود به يک Domain ويندوز 2000 ، کاربران مي بايست ، نام خود را بصورت خاصي وارد نمايند .نام فوق، شامل نام کاربر بوده که بدنبال آن از کاراکتر @ و يک پسوند استفاده مي گردد. پسوند فوق، Domain مربوطه اي است که account بر روي آن وجود دارد . User1@Citys.com نمونه اي در اين زمينه است .

ورود به شبکه
براي ورود به ويندوز 2000 ، کليدهاي CTRL+ALT+DELETE بصورت همزمان فشرده و فعال مي گردند. پس از فعال نمودن کليدهاي فوق جعبه محاوره اي ورود به ويندوز فعال مي گردد . با تايپ نام و رمز عبور در محل مربوطه ، فرآيند ورود به شبکه انجام خواهد شد. در ادامه مي توان با کليک نمودن برروي کامپيوترهاي محلي و يا Domain مربوطه در ليست به هر يک از آنها log on نمود.

مشاهده Network Membership
پس از ورود به شبکه، مي توان با استفاده از جعبه محاوره اي System Properties ، از نوع عضويت در شبکه آگاهي پيدا کرد : يک Domain و يا يک Workgroup . براي دستيابي به جعبه محاوره اي System Properties مراحل زير را دنبال نمائيد :
از طريق Desktop بر روي آيکون MyComputer کليک سمت راست نموده و در ادامه برروي گزينه Properties کليک نمائيد. جعبه محاوره اي System Properties ، داراي پنج Tab است . بر روي Network Identification کليک تا مشخص گردد که کامپيوتر مورد نظر به يک Doamin و يا Workgroup تعلق دارد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت سوم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۰۷ مراجعه امروز
۴۹۲۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت سوم)
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۳/۴/۱۳۸۲ اين مقاله ۱۲۶۹ بار مطالعه شده است
۱۶ نفر تا به حال به اين مقاله رای داده اند.

در ادامه بحث قبل اكنون ميرسيم به اينكه با نتايج مرحله قبل چه كنيم
مواردي كه اكنون در اختيار ما هست عبارنتد از
• كليه فرمهاي ورودي و خروجي سيستم
• توضيحات مربوط به هريك از فرمها بصورت كامل
• نوارهاي صوتي و تصويري احتمالي از مصاحبه ها

طراحي شامل قسمت هاي مختلفي است كه مي توان اولين قسمت انرا ترسيم وضعيت موجود و دسته بندي عنوان كرد

حال بترتيب عمليات زير را انجام دهيد
1 <<<انچه در اختيار داريد را دسته بندي كنيد
مثلا در مورد يك سيستم پرسنلي دسته ها مي توانند بصورت : اطلاعات پرسنل، مدارك ، مرخصي ، مزايا و... باشند
2<<<بر اساس دسته بندي اوليه خود نمودار كلي نظام را ترسيم كنيد(System Narrative)

اين نمودارها در واقع عملكرد سيستم فعلي را براي انجام كار نشان مي دهند

3<<< نمودار گردش داده(Data Flow Diagram يا DFD) را ترسيم كنيد اين نمودار مي تواند به ما نشان دهد كه دادهاي خروجي و ورودي هريك از اجزاء چيست و وضعيت گردش انها به چه ترتيب است . در مورد ترسيم اين نمودار مي بايستي تمامي گردش كار بدقت ترسيم شود چرا كه به عنوان يك نمودار عملياتي بعدا مورد استفاده مكرر شما و مشتري خواهد بود

4<<< نمودارهاي DFD خود را از سطح صفر به سطح يك و ... ببريد. هر سطح نشانه داخلي تر بودن پردازش خواهد بود : مثال سطح 1

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

پايگاهها
اصلي ترين منبع براي اطلاعات فرمهايي است كه در يك سيستم رد و بدل مي شوند.براي پردازش اين فرمها مي بايستي تمامي اطلاعات قيد شده در انها را بصورت يك جدول ليست كنيم . بالاي جدول نيز مي توانيم نام را قيد كنيم

مثال:

نكته
در هنگام بررسي Data ها متوجه خواهيد شد كه برخي مطالب داراي درجه اولويت بالاتري نسبت به برخي ديگر هستند . به عنوان مثال در همان مثال شماره تلفن داراي اهميت بالايي نيست.

حال در قدم بعدي مي توانيد اطلاعات موجود در جدول را بصورت زير در يك Data Catalog ثبت نمود . اين كاتالوگ پيشنهادي است كه اطلاح شده فرمهاي مفصل و دست و پاگير (ولي قدرتمند) اصلي (Data Dictionary)مي باشد. در Data Dictionaryهاي اصلي نه تنها همين مطالب كه مطالب بيشتري مانند محلهاي استفاده ، محدوديتهاي محل و غيره را ميتوان قيد نمود با مراجعه به كتب طراحي مي توانيد به مطالب بيشتري دست پيدا كنيد .
همچنين يك نام نيز براي پايگاه انتخاب كنيد
Factor(پايگاه فاكتور فروش)

اين طرح خام و اوليه پايگاه شماست

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه پروتکل TCP/IP ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۷۵ مراجعه امروز
۴۷۹۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه پروتکل TCP/IP ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۳/۴/۱۳۸۲ اين مقاله ۱۱۱۳ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.

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

مقدمه
امروزه اکثر شبکه هاي کامپيوتري بزرگ و اغلب سيستم هاي عامل موجود از پروتکل TCP/IP ، استفاده و حمايت مي نمايند. TCP/IP ، امکانات لازم بمنظور ارتباط سيستم هاي غيرمشابه را فراهم مي آورد. از ويژگي هاي مهم پروتکل فوق ، مي توان به مواردي همچون : قابليت اجراء بر روي محيط هاي متفاوت ، ضريب اطمينان بالا ،قابليت گسترش و توسعه آن ، اشاره کرد . از پروتکل فوق، بمنظور دستيابي به اينترنت و استفاده از سرويس هاي متنوع آن نظير وب و يا پست الکترونيکي استفاده مي گردد. تنوع پروتکل هاي موجود در پشته TCP/IP و ارتباط منطقي و سيستماتيک آنها با يکديگر، امکان تحقق ارتباط در شبکه هاي کامپيوتري را با اهداف متفاوت ، فراهم مي نمايد. فرآيند برقراري يک ارتباط ، شامل فعاليت هاي متعددي نظير : تبديل نام کامپيوتر به آدرس IP معادل ، مشخص نمودن موقعيت کامپيوتر مقصد ، بسته بندي اطلاعات ، آدرس دهي و روتينگ داده ها بمنظور ارسال موفقيت آميز به مقصد مورد نظر ، بوده که توسط مجموعه پروتکل هاي موجود در پشته TCP/IP انجام مي گيرد.
معرفي پروتکل TCP/IP
TCP/IP ، پروتکلي استاندارد براي ارتباط کامپيوترهاي موجود در يک شبکه مبتني بر ويندوز 2000 است. از پروتکل فوق، بمنظور ارتباط در شبکه هاي بزرگ استفاده مي گردد. برقراري ارتباط از طريق پروتکل هاي متعددي که در چهارلايه مجزا سازماندهي شده اند ، ميسر مي گردد. هر يک از پروتکل هاي موجود در پشته TCP/IP ، داراي وظيفه اي خاص در اين زمينه ( برقراري ارتباط) مي باشند . در زمان ايجاد يک ارتباط ، ممکن است در يک لحظه تعداد زيادي از برنامه ها ، با يکديگر ارتباط برقرار نمايند. TCP/IP ، داراي قابليت تفکيک و تمايز يک برنامه موجود بر روي يک کامپيوتر با ساير برنامه ها بوده و پس از دريافت داده ها از يک برنامه ، آنها را براي برنامه متناظر موجود بر روي کامپيوتر ديگر ارسال مي نمايد. نحوه ارسال داده توسط پروتکل TCP/IP از محلي به محل ديگر ، با فرآيند ارسال يک نامه از شهري به شهر، قابل مقايسه است .
برقراري ارتباط مبتني بر TCP/IP ، با فعال شدن يک برنامه بر روي کامپيوتر مبدا آغاز مي گردد . برنامه فوق ،داده هاي مورد نظر جهت ارسال را بگونه اي آماده و فرمت مي نمايد که براي کامپيوتر مقصد قابل خواندن و استفاده باشند. ( مشابه نوشتن نامه با زباني که دريافت کننده ، قادر به مطالعه آن باشد) . در ادامه آدرس کامپيوتر مقصد ، به داده هاي مربوطه اضافه مي گردد ( مشابه آدرس گيرنده که بر روي يک نامه مشخص مي گردد) . پس از انجام عمليات فوق ، داده بهمراه اطلاعات اضافي ( درخواستي براي تائيد دريافت در مقصد ) ، در طول شبکه بحرکت درآمده تا به مقصد مورد نظر برسد. عمليات فوق ، ارتباطي به محيط انتقال شبکه بمنظور انتقال اطلاعات نداشته ، و تحقق عمليات فوق با رويکردي مستقل نسبت به محيط انتقال ، انجام خواهد شد .

لايه هاي پروتکل TCP/IP
TCP/IP ، فرآيندهاي لازم بمنظور برقراري ارتباط را سازماندهي و در اين راستا از پروتکل هاي متعددي در پشته TCP/IP استفاده مي گردد. بمنظور افزايش کارآئي در تحقق فرآيند هاي مورد نظر، پروتکل ها در لايه هاي متفاوتي، سازماندهي شده اند . اطلاعات مربوط به آدرس دهي در انتها قرار گرفته و بدين ترتيب کامپيوترهاي موجود در شبکه قادر به بررسي آن با سرعت مطلوب خواهند بود. در اين راستا، صرفا" کامپيوتري که بعنوان کامپيوتر مقصد معرفي شده است ، امکان باز نمودن بسته اطلاعاتي و انجام پردازش هاي لازم بر روي آن را دارا خواهد بود. TCP/IP ، از يک مدل ارتباطي چهار لايه بمنظور ارسال اطلاعات از محلي به محل ديگر استفاده مي نمايد: Application ,Transport ,Internet و Network Interface ، لايه هاي موجود در پروتکل TCP/IP مي باشند.هر يک از پروتکل هاي وابسته به پشته TCP/IP ، با توجه به رسالت خود ، در يکي از لايه هاي فوق، قرار مي گيرند.

لايه Application
لايه Application ، بالاترين لايه در پشته TCP/IP است .تمامي برنامه و ابزارهاي کاربردي در اين لايه ، با استفاده از لايه فوق، قادر به دستتيابي به شبکه خواهند بود. پروتکل هاي موجود در اين لايه بمنظور فرمت دهي و مبادله اطلاعات کاربران استفاده مي گردند . HTTP و FTP دو نمونه از پروتکل ها ي موجود در اين لايه مي باشند .

پروتکل HTTP)Hypertext Transfer Protocol) . از پروتکل فوق ، بمنظور ارسال فايل هاي صفحات وب مربوط به وب ، استفاده مي گردد .
پروتکل FTP)File Transfer Protocol) . از پروتکل فوق براي ارسال و دريافت فايل، استفاده مي گردد .
لايه Transport
لايه " حمل " ، قابليت ايجاد نظم و ترتيب و تضمين ارتباط بين کامپيوترها و ارسال داده به لايه Application ( لايه بالاي خود) و يا لايه اينترنت ( لايه پايين خود) را بر عهده دارد. لايه فوق ، همچنين مشخصه منحصربفردي از برنامه اي که داده را عرضه نموده است ، مشخص مي نمايد. اين لايه داراي دو پروتکل اساسي است که نحوه توزيع داده را کنترل مي نمايند.

TCP)Transmission Control Protocol) . پروتکل فوق ، مسئول تضمين صحت توزيع اطلاعات است .
UDP)User Datagram Protocol) . پروتکل فوق ، امکان عرضه سريع اطلاعات بدون پذيرفتن مسئوليتي در رابطه با تضمين صحت توزيع اطلاعات را برعهده دارد .
لايه اينترنت
لايه "اينترنت"، مسئول آدرس دهي ، بسته بندي و روتينگ داده ها ، است. لايه فوق ، شامل چهار پروتکل اساسي است :

IP)Internet Protocol) . پروتکل فوق ، مسئول آدرسي داده ها بمنظور ارسال به مقصد مورد نظر است .
ARP)Address Resoulation Protocol) . پروتکل فوق ، مسئول مشخص نمودن آدرس MAC)Media Access Control) آداپتور شبکه بر روي کامپيوتر مقصد است.
ICMP)Internet Control Message Protocol) . پروتکل فوق ، مسئول ارائه توابع عيب يابي و گزارش خطاء در صورت عدم توزيع صحيح اطلاعات است .
IGMP)Internet Group Managemant Protocol) . پروتکل فوق ، مسئول مديريت Multicasting در TCP/IP را برعهده دارد.
لايه Network Interface
لايه " اينترفيس شبکه " ، مسئول استقرار داده بر روي محيط انتقال شبکه و دريافت داده از محيط انتقال شبکه است . لايه فوق ، شامل دستگاه هاي فيزيکي نظير کابل شبکه و آداپتورهاي شبکه است . کارت شبکه ( آداپتور) داراي يک عدد دوازده رقمي مبناي شانزده ( نظير : B5-50-04-22-D4-66 ) بوده که آدرس MAC ، ناميده مي شود. لايه " اينترفيس شبکه " ، شامل پروتکل هاي مبتني بر نرم افزار مشابه لايه هاي قبل ، نمي باشد. پروتکل هاي Ethernet و ATM)Asynchronous Transfer Mode) ، نمونه هائي از پروتکل هاي موجود در اين لايه مي باشند . پروتکل هاي فوق ، نحوه ارسال داده در شبکه را مشخص مي نمايند.

مشخص نمودن برنامه ها
در شبکه هاي کامپيوتري ، برنامه ها ي متعددي در يک زمان با يکديگر مرتبط مي گردند. زمانيکه چندين برنامه بر روي يک کامپيوتر فعال مي گردند ، TCP/IP ، مي بايست از روشي بمنظور تمايز يک برنامه از برنامه ديگر، استفاده نمايد. بدين منظور ، از يک سوکت ( Socket) بمنظور مشخص نمودن يک برنامه خاص ، استفاده مي گردد.

آدرس IP
برقراري ارتباط در يک شبکه ، مستلزم مشخص شدن آدرس کامپيوترهاي مبداء و مقصد است ( شرط اوليه بمنظور برقراري ارتباط بين دو نقطه ، مشخص بودن آدرس نقاط درگير در ارتباط است ) . آدرس هر يک از دستگاه هاي درگير در فرآيند ارتباط ، توسط يک عدد منحصربفرد که IP ناميده مي شود ، مشخص مي گردند. آدرس فوق به هريک از کامپيوترهاي موجود در شبکه نسبت داده مي شود . IP : 10. 10.1.1 ، نمونه اي در اين زمينه است .

پورت TCP/UDP
پورت مشخصه اي براي يک برنامه و در يک کامپيوتر خاص است .پورت با يکي از پروتکل هاي لايه "حمل" ( TCP و يا UDP ) مرتبط و پورت TCP و يا پورت UDP ، ناميده مي شود. پورت مي تواند عددي بين صفر تا 65535 را شامل شود. پورت ها براي برنامه هاي TCP/IP سمت سرويس دهنده ، بعنوان پورت هاي "شناخته شده " ناميده شده و به اعداد کمتر از 1024 ختم و رزو مي شوند تا هيچگونه تعارض و برخوردي با ساير برنامه ها بوجود نيايد. مثلا" برنامه سرويس دهنده FTP از پورت TCP بيست و يا بيست ويک استفاده مي نمايد.

سوکت (Socket)
سوکت ، ترکيبي از يک آدرس IP و پورت TCP ويا پورت UDP است . يک برنامه ، سوکتي را با مشخص نمودن آدرس IP مربوط به کامپيوتر و نوع سرويس ( TCP براي تضمين توزيع اطلاعات و يا UDP) و پورتي که نشاندهنده برنامه است، مشخص مي نمايد. آدرس IP موجود در سوکت ، امکان آدرس دهي کامپيوتر مقصد را فراهم و پورت مربوطه ، برنامه اي را که داده ها براي آن ارسال مي گردد را مشخص مي نمايد.

در بخش دوم اين مقاله به تشريح هر يک از پروتکل هاي موجود در پشته TCP/IP، خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


معرفي اوليه VB.NET ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۲۵ مراجعه امروز
۵۲۴۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
معرفي اوليه VB.NET
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۳/۴/۱۳۸۲ اين مقاله ۲۶۴۵ بار مطالعه شده است
۴۲ نفر تا به حال به اين مقاله رای داده اند.

يک برنامه کامپيوتري ، از مجموعه اي دستورالعمل که نوع و نحوه انجام يک فعاليت را براي کامپيوتر مشخص مي نمايند ، تشکيل مي گردد. دستورالعمل هاي نوشته شده بعنوان نمونه ممکن است به کامپيوتر اعلام نمايند که تعدادي از اعداد را با يکديگر جمع و يا دو عدد را بايکديگر مقايسه و بر اساس نتيجه بدست آمده ، اتخاذ تصميم نمايد. دستورالعمل هاي نوشته شده ، صرفا" براي کامپيوتر قابل فهم و اجراء خواهند بود.کامپيوتر دستورالعمل هاي نوشته شده را اجراء و ماحصل آن رسيدن به اهدافي خواهد بود که بر اساس آن برنامه طراحي و پياده سازي شده است . دستورالعمل ها ، مي بايست با استفاده از يکي از زبانها ي برنامه نويسي نوشته شده ( کد ينگ ) و در ادامه در اختيار کامپيوتر قرار داده شوند. زبانهاي برنامه نويسي متعددي نظير : فرترن ، بيسيک ، کوبال ، پاسکال، ،C ، جاوا ، ويژوال بيسيک و ... وجود دارد.
برنامه نويسي کامپيوتر ، مشابه آموزش گره زدن کفش به کودکان است . براي نيل به هدف فوق ، مي بايست تمامي مراحل لازم بصورت شفاف به کودکان آموزش داده شود . کودکان با دنبال نمودن دستورالعمل هاي ارائه شده ، قادر به گره زدن کفش خود خواهند بود ( روش انجام اين کار براي آنان مشخص شده و بر اساس آن ، امکان نيل به هدف مورد نظر توسط کودکان فراهم مي گردد ) . VB.NET ، زباني است که مي توا ن نحوه نيل به يک خواسته را بکمک آن بصورت شفاف ( نظير آموزش گره زدن کفش به کودکان ) مشخص و کامپيوتر با دنبال نمودن مراحل مشخص شده ، خواسته مورد نظر را محقق نمايد. با استفاده از VB.NET ، مي توان محصولاتي راايجاد که زمينه استفاده از آنان در محيط ويندوز و اينترنت ، وجود خواهد داشت . فراموش نکنيم در زمان فراگيري يک تکنولوژي در ابتدا مي بايست شيوه راه رفتن را بياموزيم و در ادامه اقدام به دويدن نمود .
VB.NET يکي از زبان هاي حمايت شده در دات نت مي باشد . با استفاده از زبان فوق علاوه بر اينکه مي توان برنامه هاي مبتني بر ويندوز را پياده سازي نمود ، امکان استفاده از آن بعنوان زبان مورد نظر در زمان ايجاد برنامه هاي مبتني بر وب که از تکنولوژي ASP.NET استفاده مي نمايند ، نيز وجود خواهد داشت . با توجه به اهميت و جايگاه خاص اين زبان در دات نت ، مجموعه مقالاتي در رابطه با آموزش اصولي اين زبان آماده شده که بتدريج بر روي سايت قرار خواهند گرفت . در اولين مقاله از اين مجموعه به معرفي اوليه VB.NET خواهيم پرداخت . در ابتدا لازم است با ويژگي هاي منحصر بفرد برنامه هاي مبتني بر ويندوز در قياس با برنامه هاي مبتني بر DOS ، آشنا شده و پس از مروري مختصر به روند شکل گيري نسخه هاي متعدد ويژوال بيسيک ، با نحوه نصب آن نيز آشنا شويم .

برنامه نويسي مبتني بر DOS در مقابل ويندوز
برنامه نويسي مبتني بر ويندوز داراي تفاوت هاي عمده اي نسبت به برنامه نويسي سنتي در محيط DOS است.برنامه هاي DOS ، مسيري دقيق و مشخص را ازابتدا تا پايان دنبال مي نمايند . رويکرد فوق ، باعث بروز محدوديت هائي در رابطه با عملکرد برنامه ها از يکطرف و تحميل محدوديت هائي به کاربران در طي نمودن مسير مشخص شده ، مي گردد. از زاويه اي خاص مي توان عملکرد يک برنامه مبتني بر DOS را مشابه قدم زدن در يک راهرو ( سالن )، در نظر گرفت . بمنظور رسيدن به نقطه انتهائي سالن ، مي بايست طول سالن طي تا به انتهاي آن رسيد . در اين راستا از موانع متعدد موجود در مسير ، مي بايست عبور تا سرانجام به مقصد مورد نظر رسيد . در زمان پيمودن مسير ، صرفا" امکان بازنمودن درب هاي خاصي ، وجود خواهد داشت . ويندوز ، دنياي جديدي از برنامه نويسي مبتني بر "رويداد" را ايجاد نموده است . کليک نمودن موس ، تغيير اندازه پنجره ، تغيير محتويات يک Textbox ، نمونه هائي از يک "رويداد" مي باشند. کدهاي نوشته شده ، نحوه برخورد با يک رويداد را مشخص مي نمايد. براي رسيدن به انتهاي يک سالن کافي است بر روي "انتهاي سالن " ، کليک نمود و ديگر ضرورتي به پيمودن تمامي مسير تا رسيدن به انتهاي سالن نخواهد بود . درصورتيکه به انتهاي سالن رسيده باشيم و متوجه گرديم که اين مکان ، محلي نيست که انتظار آن را داشته ايم ، بسادگي مي توان مقصد جديدي را براي خود انتخاب ، بدون اينکه ضرورتي به برگشت در نقطه آغازين مسير وجود داشته باشد. برنامه نوشته شده عکس العمل هاي لازم در ارتباط با حرکت شما را بهمراه عمليات مربوطه بمنظور تکميل فعاليت ها ي مورد نظر انجام خواهد داد . با استفاده از VB.NET ، مي توان کدهاي لازم بمنظور ارائه عکس العمل لازم در زمان تحقق يک رويداد را نوشت .در اين راستا ، برنامه نويسان مي توانند کدهاي لازم در رابطه با رويدادهائي که امکان تحقق آنها وجود دارد را نوشته تا در زمان بروز رويداد مورد نظر ، عکس العمل لازم از طرف برنامه صورت پذيرد.در اين زمينه مي توان از نوشتن کدهاي ديگر بمنظور برخورد با رويدادهاي غيرضروري ، صرفنظر کرد. مثلا" ويندوز قادر به تشخيص رويداد"کليک " از "کليک مضاعف " است . اين بدان معني است که اگر مي خواهيد برنامه مورد نظر شما ،عکس العمل لازم در ارتباط با رويداد "کليک" را داشته باشد ، مي بايست صرفا" کد مربوط به رويداد " کليک"، نوشته گردد و الزامي به نوشتن کدهاي لازم بمنظور برخورد با رويداد "کليک مضاعف" ، وجود نخواهد داشت . در دنياي برنامه نويسي DOS ، کاربر عکس العمل لازم را نسبت به برنامه انجام مي دهد در صورتيکه در ويندوز ، برنامه ها عکس العمل لازم را با توجه به رفتار کاربران ، انجام خواهند داد .
يکي ديگر از مزاياي مهم برنامه هاي ويندوز ، عدم وابستگي برنامه ها به يک سخت افزار خاص است . ويندوز تمهيدات لازم در خصوص ارتباط با سخت افزار را پيش بيني و برنامه نويسان نياز به آگاهي از نحوه عملکرد يک دستگاه سخت افزاري خاص بمنظور استفاده از آن ، نخواهند داشت . مثلا" برنامه نويسان ضرورتي به آگاهي از نحوه عملکرد هر نوع چاپگر ليزري، بمنظور ايجاد خروجي مورد نظر خود در برنامه ها ، نخواهند داشت. ويندوز، امکانات لازم در اين خصوص را از طريق ارائه روتين هاي عمومي که با درايورهاي مورد نظر مرتبط مي گردند ، فراهم مي نمايد. شايد همين موضوع دليل موفقيت ويندوز باشد .
روتين هاي عمومي اصطلاحا" Windows (API ) Application Programming Interface ناميده مي شوند .

تاريخچه ويژوال بيسيک
قبل از معرفي ويژوال بيسيک در سال 1991 ، پياده کنندگان نرم افزار مجبور به تسلط و مهارت در زمينه استفاده از ++C بهمراه موارد پيچيده اي در اين خصوص بودند . بدين ترتيب ، صرفا" افراد خاص آموزش ديده، قادر به خلق نرم افزارهاي قدرتمند بمنظور اجراء در محيط ويندوز بودند. ويژوال بيسيک ، محدوديت فوق را تغيير و مي توان اين ادعا را داشت که امروزه خطوط زيادي از برنامه هاي نوشته شده با استفاده از ويژوال بيسيک کد شده است . ويژوال بيسيک ، ظاهر برنامه نويسي تحت ويندوز را با حذف عمليات اضافي براي نوشتن کدهاي لازم جهت طراحي بخش رابط کاربر (UI) ، تغيير داده است . در اين راستا ، زمانيکه بخش رابط کاربر ، ترسيم مي گردد ، برنامه نويس مي تواند کدهاي لازم بمنظور انجام عکس العمل مناسب در رابطه با رويداد ها را به آن اضافه نمايد . زمانيکه ماکروسافت نسخه شماره سه ويژوال بيسيک را ارائه نمود ، مجددا" دنياي برنامه نويسي با تغيير مهمي مواجه گرديد. در اين راستا امکانات مناسبي براي نوشتن برنامه هاي مبتني بر بانک هاي اطلاعاتي ، در اختيار برنامه نويسان قرار گرفت. ماکروسافت بدين منظور محصول جديدي با نام DAO)Data Access Objects) را ارائه نمود . برنامه نويسان با استفاده از DAO ، امکان انجام عمليات متفاوت در رابطه با داده ها را ، بدست آوردند . نسخه هاي شماره چهار و پنج ، قابليت هاي نسخه سه را افزايش و اين امکان را براي پياده کنندگان نرم افزار فراهم نمود تا برنامه هاي خود را جهت اجراء در محيط ويندوز 95 ، طراحي و پياده سازي نمايند . در اين زمينه ، برنامه نويسان قادر به نوشتن کدهائي گرديدند که امکان استفاده از آنان توسط ساير پياده کنندگان نرم افزار که از زباني ديگر استفاده مي کردند، فراهم گرديد. نسخه شماره شش ويژوال بيسيک ، روش جديدي بمنظور دستيابي به بانک هاي اطلاعاتي را ارائه نمود: ADO)ActiveX Data Objects ) . يکي از اهداف اوليه طراحي ADO ، امکان دستيابي به بانک هاي اطلاعاتي براي پياده کنندگان برنامه هاي مبتني بر وب است که از تکنولوژي ASP ، استفاده مي نمايند.
همزمان با ارائه جديدترين نسخه ويژوال بيسيک که VB.NET ناميده مي شود ، بسياري از محدوديت هاي مرتبط با ويژوال بيسيک برطرف گرديد . در گذشته ويژوال بيسيک با انتفادات فراوان مواجه ( عدم وجود امکانات مناسب در مقايسه با جاوا و يا ++C ) و بسياري آن را نظير يک اسباب بازي در دنياي وسيع زبان هاي برنامه نويسي مي پنداشتند. VB.NET با غلبه بر مشکلات نسخه هاي پيشين ، توانسته است در مدت زمان کوتاهي ، بعنوان يک ابزار پياده سازي بسيار قدرتمند مطرح و گزينه اي مناسب براي برنامه نويسان در تمامي سطوح باشد .

نصب VB.NET
براي نصب VB.NET ، از دو رويکرد متفاوت مي توان استفاده کرد :

نصب بهمراه ويژوال استوديو دات نت

نصب نسخه استاندارد

هر يک از گزينه هاي فوق ، امکان ايجاد برنامه هاي مبتني بر ويندوز را فراهم مي نمايند . مراحلي که در ادامه ذکر مي گردد ، نحوه نصب ويژوال استوديو را تشريح مي نمايد .

مرحله اول : برنامه Setup.exe را از روي CD مربوطه فعال نمائيد.

مرحله دوم : جعبه محاوره اي ، مراحل و اولويت هاي عمليات نصب را نشان خواهد داد. بمنظور صحت عملکرد VB.NET ، چندين Component نصب و يا بهنگام خواهند شد . اولين مرحله نصب، بهنگام سازي عناصر (Components) است . بر روي گزينه Windows Component Update ، کليک نمائيد.

مرحله سوم : برنامه نصب در ادامه سيستم را بررسي تا نوع عناصري را که مي بايست بهنگام گردند، مشخص گردد. دامنه فرآيند بهنگام سازي به وضعيت ماشيني که بر روي آن ويژوال استوديو دات نت نصب مي گردد، بستگي خواهد داشت .

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

مرحله پنجم : در اين مرحله با فشردن دکمه ! Install Now ، بهنگام سازي عناصر (Components) آغاز مي گردد . با اتمام هر يک از آيتم ها يک Check mark بمنزله اتمام مرحله مربوطه نشان داده مي شود . در مقابل عنصر جاري براي بهنگام سازي نيز يک فلش قرمز رنگ نسان داده مي شود.

مرحله ششم : پس از بهنگام سازي عناصر ، مجددا" به صفحه اصلي Setup مراجعت و امکان نصب ويژوال استوديو دات نت فراهم مي گردد.( کليک نمودن برروي گزينه Visiual Studio.NET )
نکته : در صورتيکه قصد داريد که از طريق ماشين فوق ، يک برنامه تحت وب پياده سازي نمائيد ، لازم است IIS و FrontPage Extensions قبلا" نصب شده باشد( بصورت پيش فرض در زمان نصب ويندوز 2000 نصب خواهد شد ) در صورتيکه ويژوال استوديو دات نت ، بر روي کامپيوتري نصب مي گردد که داراي سيستم عامل ويندوز 2000 نسخه Professional است ، با يک پيام خطاء مواجه خواهيم شد( عدم وجود عناصر لازم ) با فشردن دکمه Install Component ، عمليات نصب IIS و Frontpage Extensions انجام خواهد شد . در صورتيکه دکمه Continue ، انتخاب گردد ، در آينده نمي توانيد برنامه هاي تحت وب را بصورت محلي بر روي کامپيوتر خود پياده سازي نمائيد .

مرحله هفتم : نظير اکثر برنامه هاي نصب ، ليستي از گزينه هاي موجود ( شامل عناصر ) براي نصب در اختيار شما قرار مي گيرد . شما مي توانيد ، صرفا" آنچيزي را که بدان نياز داريد ، نصب نمائيد . مثلا" در صورتيکه ظرفيت درايو شما پايين و يا ضرورتي به استفاده از ويژوال ++C دات نت را نداريد ، مي توان در اين مرحله از نصب آن صرفنظر کرد. هر گزينه اي که در اين مرحله انتخاب نمي گردد ، مي توان در صورت ضرورت آن را در آينده نصب کرد. براي هر يک از امکاناتي که قرار است نصب گردند ، سه بخش اطلاعاتي متفاوت نمايش داده مي شود :
بخش Feature Properties . فايل ها ي مورد نظر براي نصب و ميزان فضاي مورد نياز را نشان مي دهد .
بخش Feature description . هر Feature چيست و چه عملياتي را انجام مي دهد .
بخش Space Allocation ، وضعيت فضاي ذخيره سازي هارد را با توجه به گزينه هاي انتخاب شده ، نشان خواهد داد .
نکته : زمانيکه ويژوال استوديو دات نت ، اجراء مي گردد مجموعه اي از اطلاعات بين ديسک و حافظه مبادله مي گردد . بنابراين لازم است به ميزان کافي ظرفيت آزاد بر روي هارد ديسک وجود داشته باشد ، در اين راستا نمي توان دقيقا" مشخص نمود که به چه ميزان فضاي آزاد نياز خواهد بود ولي حداقل يکصد مگابايت توصيه مي گردد .

مرحله هشتم : ويژوال استوديو دات نت ، شامل مجموعه اي گسترده از فايل هاي مستندات ( راهنما ) است . در اين مرحله مي توان تنظيمات لازم در خصوص اجراي مستندات از طريق CD و يا دايرکتوري نصب شده بر روي هارد را انجام داد . در اين زمينه مي توان يک مسير بر روي هارد را مشخص تا مستندات نصب و يا گزينه Run From Source را انتخاب تا بر اساس آن مستندات همچنان بر روي CD باقي بمانند .

مرحله نهم : پس از انتخاب عناصر مورد نظر براي نصب ، با فشردن دکمه ! Install Now ، عمليات نصب آغاز مي گردد . مدت زمان نصب ، بستگي به موارد انتخابي و نوع سيستم دارد . مثلا" نصب تمام ويژوال استوديو دات نت بهمراه تمامي مستندات بر روي يک ماشين با دارا بودن 256 مگابايت حافظه اصلي، سرعت 650 مگاهرتز و دوازده گيگابايـت هارد ديسک ، حدود يک ساعت طول خواهد کشيد .

مرحله دهم : پس از اتمام مرحله قبل ، با انتخاب گزينه Service Release ، بررسي لازم در خصوص بهنگام سازي انجام مي گيرد . اين عمليات از طريق اينترنت انجام خواهد شد . در اين زمينه به يک خط پرسرعت و مطمئن نياز خواهد بود .

پس از انجام مراحل فوق ، ويزوال استوديو دات نت بر روي سيستم نصب و محيط لازم براي نوشتن برنامه هاي VB.NET فراهم شده است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


استراتژي حفاظت از اطلاعات در شبکه هاي کامپيوتري ( بخش دوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۷۸ مراجعه امروز
۴۷۹۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
استراتژي حفاظت از اطلاعات در شبکه هاي کامپيوتري ( بخش دوم )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۳/۴/۱۳۸۲ اين مقاله ۶۶۰ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

در بخش اول اين مقاله به چالش هاي سازمانها و موسسات براي حرکت بسمت يک سازمان مدرن اطلاعاتي اشاره و پس از بررسي اهميت ايمن سازي اطلاعات بر لزوم تدوين يک استراتژي امنيتي تاکيد گرديد . در اين زمينه به انواع حملات اطلاعاتي نيز اشاره و مشخصات هر يک از آنان توضيح داده شد . در اين بخش ، به بررسي عناصر اساسي در استراتژي پيشنهادي يعني انسان ، تکنولوژي و عمليات خواهيم پرداخت .

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

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

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

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

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

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

استفاده از مديريت کليد مقتدر و زير ساخت کليد عمومي، که قادر به حمايت از تمام تکنولوژي هاي مرتبط با ايمن سازي اطلاعات بوده و داراي مقاومت مطلوب در مقابل يک تهاجم اطلاعاتي باشد.

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

عمليات
منظور از عمليات ، مجموعه فعاليت هاي لازم بمنظور نگهداري وضعيت امنيتي يک سازمان است . در اين رابطه لازم است ، به موارد زير توجه گردد :

پشتيباني ملموس و بهنگام سازي سياست هاي امنيتي
اعمال تغييرات لازم با توجه به روند تحولات مرتبط با تکنولوژي اطلاعات. در اين رابطه مي بايست داده هاي مورد نظر جمع آوري تا زمينه تصميم سازي مناسب براي مديريت فراهم گردد ( تامين اطلاعات ضروري براي مديريت ريسک ) .

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه سرويس هاي وب - بخش اول ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۶ بيننده در حال حاضر
۹۸۱ مراجعه امروز
۴۷۹۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه سرويس هاي وب - بخش اول
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۳/۴/۱۳۸۲ اين مقاله ۶۴۶ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

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

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

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

چرا به برنامه هاي توزيع شده نياز داريم ؟
در اين رابطه دلايل متعددي عنوان مي شود که مهمترين آنان عبارتند از :

هزينه سيستم هاي Mainfarme . يکي از اولين دلايل مهم ، هزينه هاي بالاي سيستم هاي Mainframe است . اين مسئله از دو زاويه متفاوت قابل بررسي است : هزينه بالاي سرمايه گذاري اوليه که بسياري از سازمان ها و موسسات توان مالي آن را ندارند و دوم اينکه در اين مدل ، داراي صرفا" يک نقطه آسيب پذير با ريسک بالا مي باشيم .

مالکيت اختصاصي داده ها. يکي از فاکتورهاي مهم ديگر، سياست هاي مربوط به مالکيت داده ها است . سازمان ها و موسسات که داراي داده هاي اختصاصي خود مي باشند، علاقه مند به واگذاري مسئوليت مديريت داده هاي مربوطه ، به ساير مکان هاي فيزيکي نمي باشند .

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

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

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

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

مسائل مربوط به برنامه هاي توزيع شده سنتي
پياده سازي برنامه هاي توزيع شده مستلزم استفاده از تکنيک ها و مدل هاي جديد است . راهکارهاي انتخابي و استفاده شده ، خود باعث بروز مسائل جديد نيز خواهند شد. در اين بخش به بررسي مسائل مرتبط با طراحي برنامه هاي توزيع شده پرداخته و دو معماري خاص در اين زمينه را بررسي خواهيم کرد :

معماري RPC)Remote Procedure Call-based)

معماري مبتني بر پيام (Message-based)

ملاحظات مربوط به طراحي برنامه هاي توزيع شده
در زمان طراحي برنامه هاي توزيع شده مسائل متعددي وجود دارد که مي بايست به آنها توجه کرد :

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

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

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

تلاش براي فراخواني مجدد . در صورتيکه يک متد از راه دور فراخوانده شود و از طرف سرويس دهنده واکنش لازم داده نشود، نبايد تلاش مجددي براي فراخواني متد صورت پذيرد. مثلا" در صورتيکه متدي براي محاسبه هزينه يک سفارش فراخوانده شده و سرويس دهنده درخواستي را دريافت تا سفارش را انجام ولي پاسخ گم گردد منطقي نخواهد بود سفارش مربوطه مجددا" ارسال گردد .

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

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه سرويس هاي وب - بخش دوم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۹۸۴ مراجعه امروز
۴۸۰۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه سرويس هاي وب - بخش دوم
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۴/۱۳۸۲ اين مقاله ۶۵۲ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

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

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

RPC)Remote Procedure Call) ، يک نوع فراخواني به تابع و يا روتپني است که برروي يک سيستم از راه دور مستقر است .RPC ، مشابه فراخواني يک روتين و يا يک تابع معمولي است که کدهاي مربوط به فراخواني تابع ، توسط کاربر بکار گرفته مي شود . RPC ، داراي مشخصات زير است :

مشخص بودن محل سرويس . برنامه نويس ، ضرورتي به آگاهي از محل فيزيکي ارائه دهنده سرويس نخواهد داشت .

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

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

ايجاد افزونگي
اولين مسئله در ارتباط با معماري مبتني بر RPC ، به يافتن ( کشف ) اطلاعات بر مي گردد. برنامه ها چگونه اطلاعات مورد نياز خود را براي ارتباط با يک نقطه پاياني بمنظور دريافت سرويس مورد نظر، پيدا مي نمايند.ساده ترين گزينه در اين راستا که توسط اکثر برنامه نويسان استفاده مي گرد ، درج مستقيم (Hard code ) کدهاي مربوط به نقطه پاياني ( نقطه تماس ) است . روش فوق مکانيزمي بهينه در اين رابطه نبوده و از يکطرف افزونگي اطلاعات را بدنبال داشته و از طرف ديگر امکان اشکال زدائي يک برنامه را با موانع جدي روبرو خواهد ساخت .

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

Load balancing و بروز اشکال
درج مستقيم کد نقاط پاياني در يک برنامه ، باعث بروز مسئله ديگري مي گردد . در اين رابطه برنامه هاي مبتني برRPC قادر به استفاده از روشي مناسب و ساده بمنظور انجام عمليات Load Balancing پويا ، نخواهند بود .در صورت بروز اشکالات پويا و عدم دستيابي به سرويس دهنده ، برنامه مربوطه قادر به ارائه پاسخ شايسته نخواهد بود.

اولويت بندي
در معماري مبتني برRPC ، ا ولويت بندي درخواست ها تقريبا" غير ممکن بوده و تمام درخواست ها بصورت پيش فرض با توجه به الگوريتم FCFS)First Come First Serve) ، پردازش خواهند شد.در چنين مواردي اگر سرويس دهنده اي داراي حجم پردازش بالا( لود بالا ) باشد ، سرويس گيرندگان با اولويت بالا که نيازمند دريافت خدمات مربوطه از سرويس دهنده مربوطه مي باشند ، گرفتار تاخير فراوان خواهند شد.

برخورد با مسائل غيرقابل پيش بيني
يکي ديگر از مسائل مرتبط با برنامه هاي مبتني بر RPC ، عدم توانائي آنان بمنظور برخورد با مسائل غير قابل پيش بيني نظير موارد زير است :

قطع موقت جريان برق سرويس دهنده بر اساس بروز اشکال در سرويس دهنده
بروز اشکال در منابع مورد نياز برنامه نظير ارتباط با يک بانک اطلاعاتي
ضرورت استفاده از سخت افزار اضافه بمنظور برخورد با مسائل غيرقابل پيش بيني
معماري مبتني بر پيام
يکي ديگر از معماري هاي موجود براي ايجاد برنامه هاي توزيع شده ، معماري مبتني بر پيام است . رويکرد فوق، به برنامه ها امکان ارتباط با سرويس هاي داخلي را بکمک تکنولوژي صف بندي پيام ها ، خواهد داد . تکنولوژي صف بندي ، مسيريابي يک پيام را دنبال و ثبت مي نمايد . تکنولوژي فوق ، سطح مناسبي از اطمينان بمنظور تشخيص سريع اشکال و در صورت صلاحديد اصلاحات لازم بدون دخالت کاربر را فراهم مي نمايد. معماري مبتني بر پيام، عموما" در کنار پروتکل هاي صف بندي پيام ها نظير MSMQ)Microsoft Message Queuing) ايجاد مي گردد.

پيام هاي غير همزمان
مهمترين ويژگي معماري مبتني بر پيام ، قابليت غير همزماني آنان و ارسال پيام در مقابل فراخواني تابع است . مزاياي هر يک از موارد فوق بشرح زير است :

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

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

Interoperability
اغلب سيستم هاي مبتني بر پيام با استفاده از محصولات خاص صف بندي پيام ، پياده سازي مي گردند . در اين رابطه لازم است براي پياده سازي سيستم هائي که مي بايست با يکديگر تعامل اطلاعاتي بکمک پيام هاي مربوطه داشته باشند ، تدابير خاصي انديشيده گردد . مثلا" تمامي سازمان ها ي سهيم در عمليات توزيع شده، مي بايست داراي امکانات زير باشند :

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

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

در بخش سوم اين مقاله به بررسي استانداردهاي وب و تاثير آنها در ارتباط با طراحي و پياده سازي برنامه هاي توزيع شده خواهيم پرداخت

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه سرويس هاي وب - بخش سوم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۹۸۷ مراجعه امروز
۴۸۰۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه سرويس هاي وب - بخش سوم
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۴/۱۳۸۲ اين مقاله ۵۸۵ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

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

استانداردهاي وب
معماري هاي RPC و مبتني بر پيام ، توسط سازمان هاي متعددي پياده سازي شده و داراي مسائل خاص خود مي باشند . در اين بخش به برخي از اين موارد اشاره خواهد گرديد.

وجود مشکل در ارتباط با پروتکل هاي باينري
مدل هاي اشياء توزيع شده نظير DCOM)Distributed Component Object Model) ، ( RMI)Java Remote Method Invocation) و CORBA(Common Object Request Broker Architecture ) ، داراي محدوديت عمده استفاده از پروتکل هاي باينري مي باشند . استفاده از پروتکل هاي باينري ، باعث بروز مسائل متعددي مي گردد :

Firewalls . اولين مسئله در رابطه با پروتکل هاي باينري، Point to Point بودن آنان مي باشد . هر ارتباط با يک نقطه پاياني که درون فايروال وجود دارد، مستلزم باز نمودن برخي از پورت ها براي مبادله اطلاعات توسط مديريت فايروال سيستم است . براي اکثر سازمان ها اين ريسک امنيتي ،قابل قبول نخواهد بود .

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

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

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

اينترنت و وب
TCP و IP در ابتدا براي اتصال شبکه هاي متفاوتي که توسط طراحان مختلفي ، طراحي مي گرديدند ، مورد استفاده قرار مي گرفت و همين رويکرد باعث ايجاد شبکه اي از ساير شبکه ها و با نام اينترنت گرديد. در ادامه در اواخر سال 1990 " تيم برنرز- لي " در CERN ، وب را ابداع نمود. وب، يک شبکه بهم متصل سراسري از سندهاي ابرمتن است . در اين راستا دو انقلاب تکنولوژي تحقق پيدا کرد : ظهور HTML و HTTP)Hypertext Transfer Protocol) .
HTML ، زباني است که نحوه افزودن علائم نشانه گذاري ( بشکل مجموعه اي از تگ ها ) به سندهاي مبتني بر متن را بمنظور ارائه اطلاعات در يک مرورگر وب و نحوه نمايش متن موجود در سند ، مشخص مي نمايد. سندهاي حاوي تگ هاي HTML ، سندهاي ابرمتني ناميده مي شوند.

مزاياي HTTP
HTTP ، پروتکلي است که براي درخواست و دريافت سندهاي ابرمتن در وب استفاده مي گردد . يکي از نکات بسيار مهم در رابطه با پروتکل HTTP ، عدم محدوديت جهت کار با نوع خاصي از سندها است .( صرفا" شامل سندهاي HTML نمي گردد ) . براي تائيد گفته فوق، مي توان به سرويس هاي وب اشاره کرد. سرويس هاي وب و سرويس گيرندگان مربوطه قادر به مبادله سندهاي XML با استفاده از پروتکل HTTP مي باشند . همزمان با گسترش و عموميت يافتن وب، HTTP بعنوان يک پروتکل جامع و فراگير مطرح گرديد .استفاده از HTTP باعث غلبه بر يکي از موانع جدي براي ارتباط بين مدل هاي اشياء توزيع شده گرديد .

XML فرمتي مناسب براي داده ها
پياده کنندگان بسرعت متوجه اين حقيقت گرديدند که HTML ، صرفا" اين امکان را براي يک مولف سند، فراهم مي آورد که ساختار نمايشي خود را تعريف نموده و در رابطه با تعريف ساختار داده ها و يا ارتباط بين داده ها در يک سند ، سکوت و عملا" قادر به پاسخگوئي به اين نوع از خواسته ها نيست .محدوديت فوق تا سال 1996 تحمل ولي در همين سال بود که زبان جديدي بمنظور تشريح ساختار داده هاي موجود در يک سند ، ايجاد گرديد. اين زبان جديد XML ناميده گرديد .اسناد XML ، مي بايست اهداف زير را تامين نمايند:

استفاده آسان بر روي اينترنت
وضوح و شفافيت لازم
سهولت در ايجاد
تفسير و پردازش آسان
توسعه پذير، مستقل ازمحيط مربوطه
رشد و گسترش XML ، دليلي قاطع بر مناسب بودن آن بعنوان يک فرمت عمومي داده است .

فايروال دوستانه
نکته نهائي در رابطه با وب، جايگاه و نفش سرويس دهنده وب است . سرويس دهندگان وب ، عموما" از طريق پروتکل HTTP براي برقراري ارتباط با سرويس گيرندگان استفاده مي نمايند. يکي از مهمترين ويژگي يک سرويس دهنده وب، نقش آن بعنوان يک " دروازه" (Gateway) براي يک سازمان است. سرويس دهندگان وب ، صرفا" به ارائه محتويات HTML عمل نمي نمايند. با توجه به امکانات توسعه پذيري HTTP ، سرويس دهندگان وب، قادر به ارسال درخواست ها ي دريافت شده ، براي يک Request handler مناسب، نيز مي باشند. سرويس دهنده وب، با نحوه برخورد handler با يک درخواست HTTP ، کاري نداشته و مسئوليت پردازش درخواست ارسالي و توليد يک پاسخ HTTP بر عهده Handler ، خواهد بود. سرويس دهنده وب در ادامه پاسخ مربوطه را براي سرويس گيرنده ارسال ، خواهد کرد.
سرويس دهندگان وب قادر به Forward نمودن درخواست ها براي هر نوع سرويسي مي باشند که يک درخواست HTTP را تشريح و قادر به ارائه پاسخ مبتني بر HTTP باشند. تمامي عمليات فوق، بدون نياز به هرگونه پيکربندي مجدد و يا عدول از سياست هاي مربوط به فايروال، انجام مي شود.

مسائل در ارتباط با وب
در مقابل مزاياي گفته شده ، در اين رابطه مسائلي و مشکلاتي همچون امنيت و کارآئي وجود دارد .

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

کارآئي . عموم کاربران اينترنت همچنان از خطوط Dial-up براي دستيابي به اينترنت استفاده مي نمايند. همين مسئله باعث بروز مسائل متعددي در رابطه با کارآئي برنامه ها و خدمات مربوطه خواهد شد. بدين ترتيب در ارتباط با بکارگيري برنامه هائي با شرايطي خاص و پيچيده بر روي بستر وب ، دچار محدوديت هائي خواهيم بود .مثلا" برخي از برنامه ها ي محاوره اي نيازمند يک ارتباط متعامل مناسب با سرويس دهنده مي باشند. محدوديت هاي مربوط به پهناي باند ارتباطات از نوع Dial-up ، باعث محدوديت در ارائه نوع برنامه هاي محاوره اي بر روي بستر وب مي گردد.

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

در بخش چهارم اين مقاله ، به معرفي اوليه سرويس هاي وب خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه سرويس هاي وب - بخش چهارم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۹۹۰ مراجعه امروز
۴۸۰۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه سرويس هاي وب - بخش چهارم
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۴/۱۳۸۲ اين مقاله ۶۲۵ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

آنچه تاکنون گفته شده است :
بخش اول : مفاهيم اوليه برنامه هاي توزيع شده و چالش هاي مربوطه
بخش دوم : بررسي دو نمونه معماري در رابطه با برنامه هاي توزيع شده
بخش سوم : تاثير استانداردهاي وب در فرآيند طراحي و پياده سازي برنامه هاي توزيع شده
و اما در اين بخش ، به بررسي مفاهيم اوليه سرويس هاي وب خواهيم پرداخت .

مقدمه
مسائل موجود در رابطه با مدل هاي متفاوت اشياء در برنامه هاي توزيع شده ، باعث گرديد تا پياده کنندگان بدنبال راهکارهاي مناسب و جايگزيني در اين زمينه باشند . با توجه به سرعت در تطبيق استانداردهاي وب ، بديهي است که راه حل هاي ارائه شده مي بايست مبتني بر استانداردهاي وب باشد . همين امر باعث ظهور و عرضه سرويس هاي وب گرديد.

سرويس وب چيست ؟
سرويس وب، يک URL ، بمنظور آدرس دهي مجموعه اي از قابليت ها ئي است که مي توان آنان را از طريق شبکه و بمنظور ايجاد بلاک هاي اوليه در توليد يک برنامه هاي توزيع شده ، بخدمت گرفت. يکي از نمونه هاي اوليه در اين زمينه ، برنامه Microsoft passport است . برنامه فوق ، سرويس هاي تائيد اعتبار را ارائه مي نمايد . تمامي سرويس هاي فوق ، از طريق درخواست هاي مبتني بر HTTP ، قابل دسترس و استفاده خواهند بود .

عناصر اساسي سرويس هاي وب
عناصر اساسي در سرويس هاي وب، شامل : HTTP ,XML و SOAP) Simple Object Access Protocol) است . SOAP ، يک پروتکل HTTP کم حجم و مبتني بر XML بمنظور مبادله اطلاعات است . پياده سازي تکنولوژي هاي فوق ، توسط کنسرسيوم وب کنترل و هدايت مي گردد .

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

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

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

ارتباط و همبستگي سرويس هاي وب
يک سرويس وب ، قادر به ارتباط با ساير سرويس هاي وب بمنظور ارائه يک مجموعه مناسب از سرويس ها است . مثلا" يک سرويس وب براي يک آژانس مستغلات ، ممکن است از سرويس وب ديگر براي تائيد و صحت کارت اعتباري ، بمنظور موافقت در ارائه تسهيلاتي نظير وام بانکي بصورت Online استفاده نمايد .در آينده برنامه هاي توزيع شده فراواني با استفاده از سرويس هاي وب ، ايجاد مي گردد . در اين نوع برنامه ها ، سرويس هاي وب بر اساس شاخص هاي متعددي ، انتخاب خواهند شد. در دسترس بودن ، قيمت ، کارآئي و کيفيت، نمونه هائي از معيارهاي لازم در خصوص انتخاب يک سرويس وب ، بشمار مي آيد .

آينده سرويس هاي وب
چرا مي باسيت نسبت به موفقيت سرويس هاي وب ابراز اميدواري کرد ، در حاليکه تمام تکنولوژي هاي ديگر تاکنون با مشکل مواجه شده اند ؟ بمنظور پاسخ به سوال فوق ، لازم است به برخي از عوامل موفقيت سرويس هاي وب ، اشاره گردد .

Interoperability . سرويس هاي وب با استفاده از SOAP فراخوانده مي شوند . چون SOAP داراي ماهيتي مستقل از محيط مربوطه است ، پياده کنندگان ضرورتي به مشخص نمودن نحوه ارتباط بين عناصر DCOM ، CORBA و ساير پروتکل هاي ديگر ، نخواهد داشت . بدين ترتيب هر سرويس وب ، قادر به ارتباط با هر سرويس وب ديگر خواهد بود . با توجه به اينکه سرويس هاي وب ، قادر به ارتباط از طريق HTTP و XML مي باشند ، هر گره موجود در شبکه که قادر به حمايت از تکنولوژي هاي فوق باشد ، توان ميزبان بودن و يا دستيابي به سرويس هاي وب را دارا خواهد بود .

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

استفاده مجدد از برنامه ها . استفاده از عناصر و کتابخانه هاي موجود بهمراه سرويس هاي وب بسادگي انجام خواهد شد . توليدکنندگاني نظير شرکت ماکروسافت ، ابزار لازم براي بکارگيري عناصر و کتابخانه ها را فراهم نموده اند . اغلب شرکت ها داراي تعداد زيادي منابع نرم افزاري نظير : عناصر، توابع کتابخانه اي و برنامه ها ، مي باشند. استفاده از امکانات موجود ( منابع نرم افزاري ) ، همواره مقرون بصرفه تر از پياده سازي مجدد آنان است .

استفاده از استانداردهاي حمايت شده صنعتي . تمامي توليد کنندگان، از مشخصات تکنولوژي هاي مرتبط با سرويس هاي وب ، حمايت مي نمايد( خصوصا" HTTP,XML,SOAP ). بدين ترتيب امکان ارتباط سيستم هاي نامتجانس بسادگي فراهم خواهد شد . مثلا" عنصري که با #C نوشته شده و بعنوان يک سرويس وب استفاده مي گردد ، بسادگي قادر به استفاده توسط هر نوع برنامه مبتني بر CGI خواهد بود که با ++C نوشته شده و پتانسيل ايجاد يک درخواست مبتني بر SOAP و پردازش نتايج مربوطه را دارا باشد.

پشته تکنولوژي وب و دات نت

پشته تکنولوژي وب و دات نت

SOAP System.Web.Services

XML or Binary Formats System.Runtime.Remoting

HTTP System.Net

Sockets System.Net.Sockets

TCP/IP System.Net.Sockets

بمنظور طراحي و پياده سازي برنامه هاي توزيع شده ، از گزينه هاي متعددي استفاده مي گردد . انتخاب هر گزينه مبتني بر مجموعه اي از پارامترهاي متفاوت است . تمامي تکنولوژي هاي موجود در اين زمينه را مي توان بر اساس خصوصيات مربوطه در يک پشته (Stack) سازماندهي کرد. در بالاترين سطح اين پشته، تکنولوژي SOAP و در پايين ترين سطح ، پروتکل TCP/IP قرار مي گيرد. انتخاب تکنولوژي موجود در سطوح پايين تر در پشته فوق ، افزايش کارآئي را بدنبال خواهد داشت . در چنين مواردي پياده کنندگان مي بايست اطلاعات لازم و مناسبي از تکنولوژي انتخابي مربوطه را داشته باشند . بموازات حرکت در سطوح پائين تر ، سطح اطلاعات و دانش مربوطه ، افزايش و پياده کنندگان مي بايست در اين زمينه مهارت هاي خاصي را داشته باشند . بدين ترتيب استفاده از SOAP نسبت به TCP/IP ، به دانش و مهارت هاي بمراتب کمتري نياز خواهد داشت ( نظير انتخاب زبان ماشين و يا يک زبان برنامه نويسي سطح بالا براي برنامه نويسي ).

TCP/IP . پائين ترين سطح در پشته تکنولوژي است . در اين سطح ، عناصر توزيع شده از يک برنامه براي ارتباط با يکديگر از TCP/IP ، استفاده مي نمايند. فريمورک دات نت، بمنظور حمايت از اين نوع ارتباط، از کلاس هاي متعدد موجود در Namespace با نام System.Net.Sockets استفاده مي نمايد.

Sockets . در صورتيکه قصد حمايت از session در برنامه اي وجود داشته باشد، مي توان از Socket استفاده کرد. فريمورک دات نت، بمنظور حمايت از اين نوع ارتباط، از کلاس هاي متعدد موجود در Namespace با نام System.Net.Sockets استفاده مي نمايد.

HTTP . در صورتيکه قصد برقراري ارتباط با سرويس دهندگان وب و يا امکان ارتباط از طريق فايروال ، وجود داشته باشد ، مي توان از HTTP استفاده کرد. فريمورک دات نت، بمنظور حمايت از اين نوع ارتباط ، از کلاس هاي متعدد موجود در Namespace با نام System.Net استفاده مي نمايد.

XML يا فرمت هاي باينري . با استفاده از تکنولوژي هاي فوق ، امکان پياده سازي يک برنامه توزيع شده براساس دستيابي از راه دور اشياء، وجود دارد. در چنين مواري مسائل متعددي نظير يکسان بودن اشياء و فرمت مبادله اطلاعات بين اشياء از راه دور، وجود خواهد داشت. فرمت مبادله اطلاعات مي تواند بصورت باينري و يا سريال سازي XML براي شي مربوطه باشد.فريمورک دات نت ، بمنظور حمايت از اين نوع ارتباط ، از کلاس هاي متعدد موجود در Namespace با نام System.Run time.Remoting استفاده مي نمايد.

SOAP . در صورتيکه قصد پياده سازي سرويس هاي از راه دوري وجود دارد که ارتباطي بسيار نزديک ( آزاد ) با ساير سرويس ها ي مصرف کننده را داشته و تماما" مبتني بر استانداردهاي وب مي باشند ، مي توان يک سرويس وب را پياده سازي کرد. پروتکل انتخابي براي اين نوع برنامه ها SOAP است . فريمورک دات نت ، بمنظور حمايت از اين نوع ارتباط، از کلاس هاي متعدد موجود در Namespace با نام System.Web.Services استفاده مي نمايد.

در بخش پنجم اين مقاله ، به بررسي گزينه هاي موجود در دات نت براي سرويس هاي وب اشاره مي گردد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت چهارم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۱۰ مراجعه امروز
۴۹۲۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت چهارم)
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۱/۴/۱۳۸۲ اين مقاله ۶۴۴ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

در قسمتهاي قبلي گفتيم كه چگونه مي توان به طرح خام از پايگاه رسيد

حال به اين مسئله مي پردازيم كه چگونه مي بايد ارتباط بين اين طرههاي خام را برقرار كرد

در كل سه نوع ارتباط بين پايگاهها وجود دارد
1. يك به يك : (One To One) ارتباطي است كه به ازاي يك ركورد در يك پايگاه فقط و فقط يك ركورد در پايگاه مرتبط موجود ياشد
مثال : يك مشتري يك سفارش دارد
2. يك به چند : (One To Many) ارتباطي است كه به ازاي يك ركورد در يك پايگاه حداقل يك يا بيشتر ركورد در پايگاه مرتبط موجود ياشد
مثال : يك سفارش چند قلم كالا دارد
3. چند به چند : (Many To Many) ارتباطي است كه به ازاي يك ركورد در يك پايگاه حداقل يك يا بيشتر ركورد در پايگاه مرتبط موجود ياشد و بالعكس
مثال : چند مشتري چند سفارش دارند

شكل زير نحو ترسيم اينگونه ارتباط ها را نشان مي دهد

اما تشخيص و ترسيم رابطهاي كلي نظام مستلزم طي كردن قدم به قرم مراحل زير است :
• ابتدا تمامي رابطه هاي واقعي موجود در سيستم را تك به تك بنويسيد
• شكل هريك از رابطه ها را بكشيد
• اشكال را برهم منطبق كنيد تا موجوديتهاي تكراري حذف شوند(شكل كلي ارتباط)
• از طريق تحليل شكل كلي ارتباط هاي اضافي را حذف كنيد

يك مثال : نظام دانشجو ، استاد ، درس ، برنامه درسي
رابطه ها : (دو قدم اول)

تكميل (دو قدم دوم)

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت پنجم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۱۳ مراجعه امروز
۴۹۲۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت پنجم)
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۴/۱۳۸۲ اين مقاله ۵۴۵ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
نرمالايز
تا اين مرحله ما ياد گرفتيم كه چگونه روند كار سيستم را نشان دهيم و چگونه پايگاههاي موجود را از فرمها بصورت خام تهيه كنيم

قبلا گفته شد كه مي بايستي از پيچيدگي سيستم بكاهيم . اين وظيفه را نرمالايز(Data Normalaization) انجام مي دهد.
بترتيب قدمهاي زير را انجام دهيد

1) داده هاي تكراري را از داده هاي ثابت جدا كنيد و در پايگاههاي جداگانه بگذاريد
مثال از فاكتور خريد زير مي توان 2 پايگاه را ايجاد كرد

2) كليد شناسايي تهيه كنيد . تهيه كليد شناسايي ركورد داراي روشهاي بسيار متنوعي است كه اگر توانستم بعدا در اين زمينه توضيحات بيشتري خواهم داد

اما روش كلي براي ساخت كليد را مي توان بصورت زير عنوان نمود : پيدا كردن فيلديا تركيبي از فيلدها كه در هيچ حالتي نتواند تكرار داشته باشد . بعنوان مثال فيلد نام خريدار نمي تواند كليد باشد اما شماره فاكتور يك پيشنهاد براي كليد پايگاه اول است.و در پايگاه دوم ميتوان رديف را پيشنهاد نمود . اشكالي كه در مثال وجود دارداينست كه در پايگاه دوم رديف تكراري خواهد بود براي حذف اين تكرار مي بايستي تركيب اين فيلد را با شماره فاكتور پايگاه اول در نظر گرفت . بنابر اين يك مجموعه Master / Detail خواهيم داشت . شكل زير اين مسئله را روشن مي كند

3) داده هاي قابل استنتاج و غير كليدي را حذف كنيد ( Calculated Fields)
اين گونه داده ها داده هايي هستند كه مثلا از جمع مقادير يك فيلد ، تفاضا 2 فيلد و يا محاسبه فرمولي يك فيلد ديگر(تاريخ تولد و سن يا تاريخ استخدام و سابقه كاري) بدست مي آيد .
در مثال فوق مبلغ كل فاكتور در پايگاه اول از اين دسته فيلدها است . بنابر اين پايگاه را بصوت زير تكميل مي كنيم

4) دادههايي كه در چند پايگاه تكرار ميشوند را حذف كنيد (LookUp Fields)
ممكن است شما براي مشخصات مشتريان خود بخواهيد يك پايگاه جداگانه تعريف كنيد و يا حتي بخواهيد فروشندگان خود را به تفكيك مشخص كنيد در اين صورت لازم نيست در هر ركورد پايگاه اول تمامي مشخصات انهارا قيد كنيد ، بلكه كافي است كد مربوطه را به اين پايگاه منتقل كنيد . شكل زير تمامي پايگاههاي تشكيل شده را نشان ميدهد

حال پايگاه شما در حالت كامل نرمالايز قرار دارد
گفتن چند نكته شايد بد نباشد :
1) بهنگام طي كردن مرحله 3 مي بايستي در مورد فيلدهايي كه قابل استنتاج هستند ولي استنتاج انها زمان زيادي مي طلبد قدري با احتياط رفتار كرد . اين مساله به نحوه استنتاج شما ارتباط مستقيمي دارد .شايد توضيحات زير تا حدودي قضيه را روشنتر كند :
• استنتاج زير 100 ركورد با حلقه While را شايد بتوان تحمل كرد، هر چند پيشنهاد نمي شود
• ولي اين روش را نمي توان در مورد بالاتر از ان روش درستي ناميد . بهتر است با يك دستور SQL اين زمان را در مورد تعداد بالاتر كاهش داد .
• اما در برخي موارد دستورات SQL نه تنها در مورد تعداد بالا بلكه در مورد پيچيدگي دستور نيز دچار مشكل و بالطبع زمانبر مي شوند در اين حالت بهتر است از روشهاي بهينه سازي دستورات SQL (تعريف Index ها، تودرتو كردن دستورات و... )استفاده كنيد
• اگر با روشها ي فوق به نتيجه نرسيديد و يا علاقه مند به وارد شدن به اين مقولات نيستيد بهتر است اصلا اين فيلد را حذف نكنيد
2) در مورد مرحله 2 مي بايستي تجربه و نگاه خوبي به مساله داشته باشيد .
• ممكن است در برخي موارد كليدي بظاهر يكتا باشدولي بعدا متوجه شويد كه يكتا بودن فقط در يك دوره خاص است . اين مساله تمامي طراحي هاي شما را بهم خواهد ريخت .
• ممكن است برخي موارد كليد ها را بيش از پيچيده كنيد . مثلا تركيب چند فيلد براي كليد بودن .اين مساله علاوه بر احتمال كاهش سرعت در فيلدهاي كليدي بزرگ باعث خواهد شد كه اگر برخي از موارد مورد نياز شما در حالات خاص وارد نشود شما در توليد كليد دچار مشكل شويد

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه پروتکل TCP/IP ( بخش دوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۹۹۳ مراجعه امروز
۴۸۰۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه پروتکل TCP/IP ( بخش دوم )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۴/۱۳۸۲ اين مقاله ۹۰۶ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.

در بخش اول اين مقاله ،پروتکل TCP/IP بهمراه لايه هاي آن معرفي گردييد . در اين بخش ، به بررسي پروتکل هاي موجود در TCP/IPخواهيم پرداخت .
TCP/IP ،شامل شش پروتکل اساسي( TCP,UDP,IP,ICMP,IGMP ،ARP ) و مجموعه اي از برنامه هاي کاربردي است. پروتکل هاي فوق، مجموعه اي از استادنداردها ي لازم بمنظور ارتباط بين کامپيوترها و دستگاهها را در شبکه ، فراهم مي نمايد. تمامي برنامه ها و ساير پروتکل ها ي موجود در پروتکل TCP/IP ، به پروتکل هاي شش گانه فوق مرتبط و از خدمات ارائه شده توسط آنان استفاده مي نمايند . در ادامه به تشريح عملکرد و جايگاه هر يک از پروتکل هاي اشاره شده ، خواهيم پرداخت .

پروتکل TCP : لايه Transport

TCP) Transmission Control Protocol) ، يکي از پروتکل هاي استاندارد TCP/IP است که امکان توزيع و عرضه اطلاعات ( سرويس ها) بين صرفا" دو کامپيوتر ، با ضريب اعتماد بالا را فراهم مي نمايد. چنين ارتباطي ( صرفا" بين دو نقطه ) ، Unicast ناميده مي شود . در ارتباطات با رويکرد اتصال گرا ، مي بايست قبل از ارسال داده ، ارتباط بين دو کامپيوتر برقرار گردد . پس از برقراري ارتباط ، امکان ارسال اطلاعات براي صرفا" اتصال ايجاد شده ، فراهم مي گردد . ارتباطات از اين نوع ، بسيار مطمئن مي باشند ، علت اين امر به تضمين توزيع اطلاعات براي مقصد مورد نظر برمي گردد . بر روي کامپيوتر مبداء ، TCP داده هائي که مي بايست ارسال گردند را در بسته هاي اطلاعاتي (Packet) سازماندهي مي نمايد. در کامپيوتر مقصد ، TCP ، بسته هاي اطلاعاتي را تشخيص و داده هاي اوليه را مجددا" ايجاد خواهد کرد .

ارسال اطلاعات با استفاده از TCP
TCP ، بمنظور افزايش کارائي ، بسته هاي اطلاعاتي را بصورت گروهي ارسال مي نمايد . TCP ، يک عدد سريال ( موقعيت يک بسته اطلاعاتي نسبت به تمام بسته اطلاعاتي ارسالي ) را به هريک از بسته ها نسبت داده و از Acknowledgment بمنظور اطمينان از دريافت گروهي از بسته هاي اطلاعاتي ارسال شده ، استفاده مي نمايد. در صورتيکه کامپيوتر مقصد ، در مدت زمان مشخصي نسبت به اعلام وصول بسته هاي اطلاعاتي ، اقدام ننمايد ، کامپيوتر مبداء ، مجددا" اقدام به ارسال اطلاعات مي نمايد. علاوه برافزودن يک دنباله عددي و Acknowledgment به يک بسته اطلاعاتي ، TCP اطلاعات مربوط به پورت مرتبط با برنامه ها ي مبداء و مقصد را نيز به بسته اطلاعاتي اضافه مي نمايد. کامپيوتر مبداء ، از پورت کامپيوتر مقصد بمنظور هدايت صحيح بسته هاي اطلاعاتي به برنامه مناسب بر روي کامپيوتر مقصد ، استفاده مي نمايد. کامپيوتر مقصد از پورت کامپيوتر مبداء بمنظور برگرداندن اطلاعات به برنامه ارسال کننده در کامپيوتر مبداء ، استفاده خواهد کرد .
هر يک از کامپيوترهائي که تمايل به استفاده از پروتکل TCP بمنظور ارسال اطلاعات دارند ، مي بايست قبل از مبادله اطلاعات ، يک اتصال بين خود ايجاد نمايند . اتصال فوق ، از نوع مجازي بوده و Session ناميده مي شود .دو کامپيوتر درگير در ارتباط ، با استفاده از TCP و بکمک فرآيندي با نام : Three-Way handshake ، با يکديگر مرتبط و هر يک پايبند به رعايت اصول مشخص شده در الگوريتم مربوطه خواهند بود . فرآيند فوق ، در سه مرحله صورت مي پذيرد :

مرحله اول : کامپيوتر مبداء ، اتصال مربوطه را از طريق ارسال اطلاعات مربوط به Session ، مقداردهي اوليه مي نمايد ( عدد مربوط به موقعيت يک بسته اطلاعاتي بين تمام بسته هاي اطلاعاتي و اندازه مربوط به بسته اطلاعاتي )
مرحله دوم : کامپيوتر مقصد ، به اطلاعات Session ارسال شده ، پاسخ مناسب را خواهد داد .
کامپيوتر مبداء ، از شرح واقعه بکمک Acknowledgment ارسال شده توسط کامپيوتر مقصد ، آگاهي پيدا خواهد کرد .

پروتکل UDP : لايه Transport

UDP) User Datagram Protocol ) ، پروتکلي در سطح لايه "حمل" بوده که برنامه مقصد در شبکه را مشخص نموده و از نوع بدون اتصال است . پروتکل فوق، امکان توزيع اطلاعات با سرعت مناسب را ارائه ولي در رابطه با تضمين صحت ارسال اطلاعات ، سطح مطلوبي از اطمينان را بوجود نمي آورد . UDP در رابطه با داده هاي دريافتي توسط مقصد ، به Acknowledgment نيازي نداشته و در صورت بروز اشکال و يا خرابي در داده هاي ارسال شده ، تلاش مضاعفي بمنظور ارسال مجدد داده ها ، انجام نخواهد شد . اين بدان معني است که داده هائي کمتر ارسال مي گردد ولي هيچيک از داده هاي دريافتي و صحت تسلسل بسته هاي اطلاعاتي ، تضمين نمي گردد .از پروتکل فوق ، بمنظور انتقال اطلاعات به چندين کامپيوتر با استفاده از Broadcast و يا Multicast ، استفاده بعمل مي آيد . پروتکل UDP ، در موارديکه حجم اندکي از اطلاعات ارسال و يا اطلاعات داراي اهميت بالائي نمي بانشد ، نيز استفاده مي گردد. استفاده از پروتکل UDP در مواردي همچون Multicasting Streaming media ، (نظير يک ويدئو کنفرانس زنده) و يا انتشار ليستي از اسامي کامپيوترها که بمنظور ارتباطات محلي استفاده مي گردند ، متداول است . بمنظور استفاده از UDP ، برنامه مبداء مي بايست پورت UDP خود را مشخص نمايد دقيقا" مشابه عملياتي که مي بايست کامپيوتر مقصد انجام دهد . لازم به يادآوري است که پورت هاي UDP از پورت هاي TCP مجزا و متمايز مي باشند (حتي اگر داراي شماره پورت يکسان باشند ).

پروتکل IP : لايه Internet

IP) Internet Protocol ) ، امکان مشخص نمودن محل کامپيوتر مقصد در يک شبکه ارتباطي را فراهم مي نمايد. IP ، يک پروتکل بدون اتصال و غيرمطمئن بوده که اولين مسئوليت آن آدرس دهي بسته هاي اطلاعاتي و روتينگ بين کامپيوترهاي موجود در شبکه است . با اينکه IP همواره سعي در توزيع يک بسته اطلاعاتي مي نمايد ، ممکن است يک بسته اطلاعاتي در زمان ارسال گرفتار مسائل متعددي نظير : گم شدن ، خرابي ، عدم توزيع با اولويت مناسب ، تکرار در ارسال و يا تاخير، گردند.در چنين مواردي ، پروتکل IP تلاشي بمنظور حل مشکلات فوق را انجام نخواهد داد ( ارسال مجدد اطلاعات درخواستي ) .آگاهي از وصول بسته اطلاعاتي در مقصد و بازيافت بسته هاي اطلاعاتي گم شده ، مسئوليتي است که بر عهده يک لايه بالاتر نظير TCP و يا برنامه ارسال کننده اطلاعات ، واگذار مي گردد .

عمليات انجام شده توسط IP
مي توان IP را بعنوان مکاني در نظر گرفت که عمليات مرتب سازي و توزيع بسته هاي اطلاعاتي در آن محل ، صورت مي پذيرد .بسته ها ي اطلاعاتي توسط يکي از پروتکل هاي لايه حمل ( TCP و يا UDP) و يا از طريق لايه " ايترفيس شبکه " ، براي IP ارسال مي گردند . اولين وظيفه IP ، روتينگ بسته هاي اطلاعاتي بمنظور ارسال به مقصد نهائي است . هر بسته اطلاعاتي ، شامل آدرس IP مبداء ( فرستنده ) و آدرس IP مقصد ( گيرنده ) مي باشد. در صورتيکه IP ، آدرس مقصدي را مشخص نمايد که در همان سگمنت موجود باشد ، بسته اطلاعاتي مستقيما" براي کامپيوتر مورد نظر ارسال مي گردد . در صورتيکه آدرس مقصد در همان سگمنت نباشد ، IP ، مي بايست از يک روتر استفاده و اطلاعات را براي آن ارسال نمايد.يکي ديگر از وظايف IP ، ايجاد اطمينان از عدم وجود يک بسته اطلاعاتي ( بلاتکليف ! ) در شبکه است . بدين منظور محدوديت زماني خاصي در رابطه با مدت زمان حرکت بسته اطلاعاتي در طول شبکه ، در نظر گرفته مي شود .عمليات فوق، توسط نسبت دادن يک مقدار TTL)Time To Live) به هر يک از بسته هاي اطلاعاتي صورت مي پذيرد. TTL ، حداکثر مدت زماني را که بسته اطلاعاتي قادر به حرکت در طول شبکه است را مشخص مي نمايد( قبل از اينکه بسته اطلاعاتي کنار گذاشته شود) .

پروتکل ICMP : لايه Internet

ICMP) Internet Control Message Protocol) ، امکانات لازم در خصوص اشکال زدائي و گزارش خطاء در رابطه با بسته هاي اطلاعاتي غيرقابل توزيع را فراهم مي نمايد. با استفاده از ICMP ، کامپيوترها و روترها که از IP بمنظور ارتباطات استفاده مي نمايند ، قادر به گزارش خطاء و مبادله اطلاعاتي محدود در رابطه وضعيت بوجود آمده مي باشند. مثلا" در صورتيکه IP ، قادر به توزيع يک بسته اطلاعاتي به مقصد مورد نظر نباشد ، ICMP يک پيام مبتني بر غيرقابل دسترس بودن را براي کامپيوتر مبداء ارسال مي دارد . با اينکه پروتکل IP بمنظور انتقال داده بين روترهاي متعدد استفاده مي گردد ، ولي ICMP به نمايندگي از TCP/IP ، مسئول ارائه گزارش خطاء و يا پيام هاي کنترلي است . تلاش ICMP ، در اين جهت نيست که پروتکل IP را بعنوان يک پروتکل مطمئن مطرح نمايد ، چون پيام هاي ICMP داراي هيچگونه محتوياتي مبني بر اعلام وصول پيام (Acknowledgment ) بسته اطلاعاتي نمي باشند . ICMP ، صرفا" سعي در گزارش خطاء و ارائه فيدبک هاي لازم در رابطه با تحقق يک وضعيت خاص را مي نمايد .

پروتکل IGMP : لايه Internet

IGMP) Internet Group Managment Protocol) ، پروتکلي است که مديريت ليست اعضاء براي IP Multicasting ، در يک شبکه TCP/IP را بر عهده دارد . IP Multicasting، فرآيندي است که بر اساس آن يک پيام براي گروهي انتخاب شده از گيرندگان که گروه multicat ناميده مي شوند ؛ ارسال مي گردد . IGMP ليست اعضاء را نگهداري مي نمايد .
مديريت IP Multicasting
تمامي اعضاء يک گروه multicast ، به ترافيک IP هدايت شده به يک آدرس Multicast IP ، گوش داده و بسته هاي اطلاعاتي ارسال شده به آن آدرس را دريافت مي نمايند. زمانيکه چندين کامپيوتر نيازمند دستيابي به اطلاعاتي نظير Streaming media باشند، يک آدرس IP رزوشده براي multicasting استفاده مي گردد. روترها که بمنظور پردازش multicast پيکربندي مي گردند، اطلاعات را انتخاب و آنها را براي تمامي مشترکين گروه multicast ارسال ( Forward ) مي نمايند . بمنظور رسيدن اطلاعات Multicast به گيرندگان مربوطه ، هر يک از روترهاي موجود در مسير ارتباطي مي بايست ، قادر به حمايت از Multicasting باشند . کامپيوترهاي مبتني بر سيستم عامل وينوز 2000 ، قادر به ارسال و دريافت IP Multicast ، مي باشند .

پروتکل ARP : لايه Internet

ARP) Address Resolution Protocol) ، پروتکلي است که مسئوليت مسئله " نام به آدرس" را در رابطه با بسته هاي اطلاعاتي خروجي (Outgoing) ، برعهده دارد . ماحصل فرآيند فوق ، Mapping آدرس IP به آدرسMAC )Media Access Control) ، مربوطه است . کارت شبکه از آدرس MAC ، بمنظور تشخيص تعلق يک بسته اطلاعاتي به کامپيوتر مربوطه ، استفاده مي نمايند . بدون آدرس هاي MAC ، کارت هاي شبکه ، دانش لازم در خصوص ارسال بسته هاي اطلاعاتي به لايه بالاتر بمنظور پردازش هاي مربوطه را دارا نخواهند بود . همزمان با رسيدن بسته هاي اطلاعاتي به لايه IP بمنظور ارسال در شبکه ، آدرس هاي MAC مبداء و مقصد به آن اضافه مي گردد .
ARP ، از جدولي خاص بمنظور ذخيره سازي آدرس هاي IP و MAC مربوطه ، استفاده مي نمايد. محلي از حافظه که جدول فوق در آنجا ذخيره مي گردد ، ARP Cache ناميده مي شود. ARP Cache هر کامپيوتر شامل mapping لازم براي کامپيوترها و روترهائي است که صرفا" بر روي يک سگمنت مشابه قرار دارند.
Physical Address Resolution
پروتکل ARP ، آدرس IP مقصد هر يک از بسته هاي اطلاعاتي خروجي را با ARP Cache مقايسه تا آدرس MAC مقصد مورد نظر را بدست آورد . در صورتيکه موردي پيدا گردد ، آدرس MAC از Cache بازيابي مي گردد . در غير اينصورت ؛ ARP درخواستي را براي کامپيوتري که مالکيت IP را برعهده دارد ، Broadcast نموده و از وي مي خواهد که آدرس MAC خود را اعلام نمايد . کامپيوتر مورد نظر ( با IP مربوطه ) ، در ابتدا آدرس MAC کامپيوتر ارسال کننده درخواست را به Cache خود اضافه نموده و در ادامه پاسخ لازم را از طريق ارسال آدرس MAC خود ، به متقاضي خواهد داد . زمانيکه پاسخ ARP توسط درخواست کننده ، دريافت گرديد ، در ابتدا با استناد به اطلاعات جديد دريافتي، Cache مربوطه بهنگام و در ادامه بسته اطلاعاتي به مقصد کامپيوتر مورد نظر ارسال مي گردد .
در صورتيکه مقصد يک بسته اطلاعاتي ، سگمنتي ديگر باشد ، ARP ، آدرس MAC را به روتر مسئول در سگمنت مربوطه ، تعميم خواهد داد ( در مقابل آدرس مربوط به کامپيوتر مقصد ) . روتر ، در ادامه مسئول يافتن آدرس MAC مقصد و يا Forwarding بسته اطلاعاتي براي روتر ديگر است .

در بخش سوم اين مقاله به بررسي ، برنامه ها و ابزارهاي کمکي در رابطه با پروتکل TCP/IP ، خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه پروتکل TCP/IP ( بخش سوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۹۹۶ مراجعه امروز
۴۸۱۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه پروتکل TCP/IP ( بخش سوم )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۴/۱۳۸۲ اين مقاله ۸۴۷ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

در بخش اول اين مقاله، پروتکل TCP/IP بهمراه لايه هاي آن معرفي گرديد . در بخش دوم ، به بررسي برخي از پروتکل هاي مهم موجود در پشته TCP/IP اشاره گرديد . در اين بخش ، به بررسي برنامه ها و ابزارهاي کمکي موجود در رابطه با پروتکل TCP/IP ، خواهيم پرداخت .
نسخه TCP/IP پياد ه سازي شده در ويندوز، بهمراه خود مجموعه اي از برنامه هاي کاربردي را ارائه نموده است . با استفاده از برنامه هاي فوق ، امکان اجراي ويندوز 2000 بر روي يک کامپيوتر بمنظور دستيابي به مجموعه اي گسترده از اطلاعات موجود در يک شبکه ، وجود خواهد داشت . ويندوز 2000 ، سه گروه عمده از ابزارهاي مبتني بر TCP/IP را ارائه مي نمايد : برنامه هاي عيب يابي ، برنامه هاي ارتباطي و نرم افزارهاي سمت سرويس دهنده .
در ادامه به تشريح امکانات موجود در هر گروه خواهيم پرداخت .

برنامه هاي عيب يابي
برنامه هاي عيب يابي ، امکان تشخيص و برطرف نمودن مسائل مرتبط با شبکه را براي کاربران فراهم مي نمايند. برخي از اين ابزارها عبارتند از :

ARP . برنامه فوق ، Cache مربوط به ARP) Addreee Resolution Protocol) را نمايش و امکان اصلاح آن را فراهم مي نمايد . بمنظور استفاده از برنامه فوق ، کافي است ARP -a را در خط دستور تايپ و در ادامه جدول مربوط به ARP Cache ، نمايش داده مي شود. با استفاده از برنامه فوق مي توان يک Entry ايستا را به جدول مربوطه اضافه ( arp -s 157.55.85.212 00-aa-00-62-c6-09 ) ، و يا اقدام به حذف يک host از جدول نمود ( arp -d ) .

Hostname . برنامه فوق ، نام کامپيوتر ميزبان را نمايش مي دهد . براي استفاده از برنامه فوق ، کافي است Hostname را در خط دستور ، تايپ و نام کامپيوتر خود را مشاهده نمود.

IPConfig . برنامه فوق ، پيکربندي جاري پروتکل TCP/IP را نمايش ( آدرس IP ، آدرس فيزيکي ، نام کامپيوتر و ... ) و امکان بهنگام سازي آن را فراهم مي نمايد. بمنظور آشنائي با پتانسيل هاي برنامه فوق ، ipcongig/help را در خط دستور تايپ تا با عملکرد اين برنامه و سوئيچ هاي مربوطه آشنا گرديد .

Nbtstat . برنامه فوق ، جدول محلي اسامي NetBIOS را نمايش مي دهد .جدول فوق ، شامل ليستي از اسامي کامپيوتر ها بهمراه IP مربوطه است ( mapping )

Netstat . برنامه فوق ، اطلاعات مربوط به جلسه کاري (Session) پروتکل TCP/IP را نمايش مي دهد .

Ping . برنامه فوق ، پيکربندي و ارتباط مبتني بر IP بين دو کامپيوتر را بررسي و تست مي نمايد. Ping يک درخواست ICMP را از کامپيوتر مبداء ارسال و کامپيوتر مقصد از طريق يک پاسخ ICMP به آن جواب خواهد داد .بمنظور تست ارتباط با استفاده از يک آدرس IP و يا نام يک کامپيوتر ، فرمان [ PING [IP_Address or Computer_Name را تايپ نمائيد. بمنظور تست پيکربندي TCP/IP بر روي کامپيوتر خود ، از Local Loopback استفاده نمائيد . Local loopback ، شامل آدرس 127.0.0.1 است. ( Ping 127.0.0.1 )

Tracert . برنامه فوق ، رديابي يک بسته اطلاعاتي تا رسيدن به مقصد مورد نظر را انجام مي دهد .

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

FTP . برنامه فوق، با استفاده از پروتکل TCP ، اقدام به ارسال فايل بين ويندوز 2000 و کامپيوترهائي که بر روي آنان نرم افزار سرويس دهنده FTP نصب شده است ، مي نمايد .

Telnet . برنامه فوق ، امکان ارتباط از راه دور به منابع شبکه موجود در کامپيوترهائي که سرويس دهنده Telnet بر روي آنان نصب شده است را فراهم مي نمايد .

Tftp . برنامه فوق از پروتکل UDP ، براي ارسال فايل هاي کوچک بين ويندوز 2000 و کامپيوترهائي که بر روي آنان سرويس دهنده TFTP)Trivial File Transfer Protocol ) نصب شده است را فراهم مي نمايد.

نرم افزارهاي سمت سرويس دهنده
اين نوع نرم افزارها امکان چاپ و انتشار سرويس ها را براي سرويس گيرندگان مبتني بر TCP/IP در ويندوز 2000 ، فراهم مي نمايد.

سرويس چاپ TCP/IP . برنامه فوق ، سرويس استاندارد چاپ TCP/IP را ارائه مي نمايد. سرويس فوق ، امکان ارسال چاپ را براي کامپيوترهائي که بر روي آنان سيستم هاي عاملي بجز ويندوز 2000 نصب شده باشد ، به چاپگر هاي متصل شده به يک کامپيوتر مبتني بر ويندوز 2000 ، فراهم مي نمايد .

سرويس هاي اطلاعاتي اينترنت (IIS) . برنامه IIS ، نرم افزارهاي سرويس دهنده متعددي نظير وب ، اخبار ، پست الکترونيکي و ارسال فايل مبتني بر TCP/IP را در اختيار قرار مي دهد. IIS ، در سيستم هائي که از نسخه هاي Server ويندوز 2000 استفاده مي نمايند ، بصورت پيش فرض نصب مي گردد . پيشنهاد مي گردد در صورتيکه به عملکرد اين برنامه نيازي وجود ندارد ، اقدام به حذف (Uninstall ) آن از روي سيستم نمود .

مثال
مثال 1 - هدف : استفاده از برنامه Ping بمنظور اطمينان از صحت عملکرد پروتکل TCP/IP

مرحله يک : بعنوان يک کاربر مجاز ، به شبکه وارد شويد .
مرحله دو : گزينه Command Prompt را از مسير Start | Programs | Accessories انتخاب نمائيد.
مرحله سه : دستور Ping 127.0.0.1 را در پنجره مربوطه تايپ نمائيد .
نتايج : پس از انجام مراحل فوق ، نتايج زير مي بايست نشان داده شود :

نتيجه يک : مي بايست چهار بسته اطلاعاتي ارسال و چهار بسته اطلاعاتي دريافت و هيچگونه بسته اطلاعاتي گم نگردد . در غير اينصورت در رابطه با نصب TCP/IP مشکلاتي وجود دارد .
نتيجه دو : در صورتيکه چهار بسته اطلاعاتي ارسال و دريافت گردد ، نشاندهنده صحت عملکرد و نصب پروتکل TCP/IP است .
نتايج حاصل از اجراي برنامه Ping
C:\>ping 127.0.0.1
Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128

Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

مثال 2 - هدف : استفاده از برنامه هاي Ping و Hostname بمنظور صحت عملکرد TCP/IP

مرحله يک : بعنوان يک کاربر مجاز ، به شبکه وارد شويد .
مرحله دو : گزينه Command Prompt را از مسير Start | Programs | Accessories انتخاب نمائيد.
مرحله سه : در پنجره مربوطه ، دستور hostname را تايپ نمائيد.
مرحله چهارم : در پنجره مربوطه ، دستور Ping Computer_Name را تايپ نمائيد . نام کامپيوتر ، مقدار برگردانده شده در اثر اجراي فرمان hostname است .
نتايج : پس از انجام مراحل فوق ، نتايج زير مي بايست نشان داده شود :

نتيجه يک : نام کامپيوتر ( در اين رابطه هر کامپيوتر داراي نام اختصاصي مربوط به خود خواهد بود )
نتيجه دو : آدرس IP کامپيوتر ( در اين رابطه هر کامپيوتر داراي آدرس IP مربوط به خود خواهد بود )
مرحله اول : مشخص نمودن نام کامپيوتر
C:\> hostname
Srco

مرحله دوم : استفاده از دستور Ping بهمراه نام کامپيوتر
C:> Ping Srco
Pinging Srco.Test.com [ 10.10.1.1] with 32 bytes of data:

Reply from 10.10.1.1: bytes=32 time<10ms TTL=128
Reply from 10.10.1.1: bytes=32 time<10ms TTL=128
Reply from 10.10.1.1: bytes=32 time<10ms TTL=128
Reply from 10.10.1.1: bytes=32 time<10ms TTL=128

Ping statistics for 10.10.1.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

در بخش چهارم اين مقاله به بررسي ، Name Resoulation ، خواهيم پرداخت

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت ششم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۱۶ مراجعه امروز
۴۹۳۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت ششم)
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۴/۱۳۸۲ اين مقاله ۴۹۸ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

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

اگر شماي كلي يك سيستم را شامل 3 بخش فوق بدانيم ما هم اكنون بخش اول انرا تهيه كرديم .
برنامه ها در بخش دوم قرار دارند كه با UIمتفاوت هستند . برنامه ها در هنگام طراحي صرفا يكسري كدهاي بدون وابستگي به زبان خاص(Pseudo Codes )مي باشند . شايد اطلاق شرايط محيطي به اين برنامه ها براي جلوگيري از اشتباه مفيد باشد .

براي نوشتن اين شرايط طراحان معمولا از كلمات اشنايي نزديك به معاني اصلي استفاده مي كنند .نمونه اين كلمات عبارتند از

مثال :
Read No
Read K
If No > 100
For 1 to No
{ k = k Mod 10
Print K
}
Else
S = Add (No,5)
اما چگونه از اين كد ها مي توان استفاده نمود
فرض كنيد در برنامه فاكتور مي خواهيد حتما يكسري تصميم گيري ها قيد و يا محاسباتي انجام شود . به مثالهاي زير توجه كنيد
1) تاريخ فاكتور به ماقبل بر نمي گردد
If Input Date < Current Date
Print "Error in Date"
2) جمع حاصل ضرب في در تعداد در مبلغ كل ريخته شود
S = 0
For All rows
S=S+Fi * Numner
Monye = S

3) تعداد درخواستي بايد كمتر از ميزان موجود باشد
If ReqNumber< Remind in stock
………….
Else
Message "Not Enough In Stock "

اما چرا نياز است كه اين مطالب را به اين صورت بنويسيم . زيرا كه اولا امكان خواندن برنامه ها بدون تلاش در فهم متغير ها امكان پذير مي گرددو ثانيا اهداف برنامه ها را مي توان بسادگي پيدا كرد
اما در برخي موارد در نوشتن اين برنامه ها در شرطهاي تودر تو دچار مشكل مي شويم در اينجا بسادگي مي توانيم از درختهاي تصميم گيري استفاده كنيم .
بعنوان مثال بجاي نوشتن اين گونه كد ها
If ………..
……
Else
If ………..
……
.
.
.

مي توان از درخت زير استفاده كرد

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت هفتم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۱۹ مراجعه امروز
۴۹۳۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت هفتم)
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۴/۱۳۸۲ اين مقاله ۶۰۳ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

تا اينجا توانستيم 2 قسمت از ADT را تكميل كنيم
1) پايگاههاي اطلاعاتي
2) شرايط محيطي كار روي اطلاعات (برنامه ها بدون وابستگي به زبان)

حال بايستي به سراغ قسمت سوم يعني رابط كاربر(User Inter Face) برويم . پيش شرط ان بررسي و شناخت محيط پياده سازي است . اين به معناي بررسي سخت افزار قبل از پياده سازي نرم افزار مي باشد.

براي اين كار بايستي به چند سوال پاسخ دهيد
1. ورود اطلاعات به كامپوتر و احتمالا تبادل اطلاعات با ديگر كامپيوتر ها چگونه است
2. نحوه گرفتن پشتيبان از اطلاعات به چه ترتيب است
3. نحوه دريافت خروجي هاي برنامه ما توسط كاربر چگونه است
4. چه كامپيوتر (هايي ) مورد نياز است كه براي پاسخ به ان بايستي به سوالات زير توجه كنيد
a. حجم عمليات به چه ميزان مي باشد
b. حجم اطلاعاتي فوق در بهترين و بدترين شرايط چه زماني به مي دهد
c. فعاليت هاي ما (Process هاي برنامه )به چه ميزان زمان نياز دارند
d. زمان بازيابي اطلاعات ما چقدر است

همانگونه كه مشاهده مي كنيد
• اين سوالات را در مورد يك سيستم ساده مي توان براحتي جواب داد اما در مورد سيستمهاي وسيع قدري بايد دقت كرد . هرچند توصيه مي كنم هرگز در جايي كه يك شبكه وجود دارد هيچ سيستمي را به صورت تك كاربره در نظر نگيريد ، چون بعد از مدتي يادشان مي ايد كه به شما درمورد شبكه بودن ان قبلا تذكر داده بوده اند!

• در مورد سيستمهاي وسيع (مجموعه نرم افزارها تحت شبكه و يا 1 نرم افزار كه روي چند سيستم كار ميكند) شايد دانستن چند تعريف باعث شود مسائل را بهتر متوجه شويد
1. شبكه ها محلي (LAN = Local Area Network) شبكه هايي هستند كه معمولا در يك ساختمان و يا محوطه كوچك پياده سازي مي شوند.
2. شبكه هاي وسيع (WAN = Wide Area Network) شبكه هايي هستند كه وابستگي جغرافيايي در انها معني ندارد
3. ميزبان (Host/Server) : به كامپيوتري مي گويند كه وظيفه نگهداري اطلاعات را برعهده دارند . اين كامپيوتر ها معمولا از قدرت پردازش بالاتري برخوردارند
4. ميهمان (Guest / Client ) كامپيوتر هايي كه از داده هاي موجود در سرور استفاده / حذف / تغيير ويا اضافه مي كنند

همچنين در مورد نحوه اتصال كامپيوتر ها به يك ديگر نيز با توجه به اشكال زير مي توان برخي از مفاهيم را شناسايي كرد

كامپيوتر آبي همان ميزبان و مشكي ميهمان است

البته ممكن است كه چند شبكه به هم متصل باشند

تمامي مطالبي كه گفته شد براي اين بود كه بگوييم
"وظيفه شما به عنوان يك تحليل گر و طراح ايجاب مي كند كه شما بتوانيد ابتدا طرح شبكه را به عنوان كسي كه شناخت جامع و كاملي از نرم افزار داريد به مسئولان پياده سازي شبكه پيشنهاد دهيد "

اما چگونه ؟
1. ابتدا به مساله پايگاهها با دقت توجه كنيد . برخي از پايگاهها را لازم است در كامپيوتر ميهمان و برخي را در كامپيوتر ميزبان قرار دهيد . نحوه اين تقسيم بندي را بايستي با توجه به
a. ميزان زمان مورد نياز براي پردازشها
b. اهميت دادهها
c. اشتراك داده ها
d. رده بندي داده ها
مشخص نمود .
فرض كنيد در يك سيستم برخي از پايگههاي شما موقتي هستند و نتيجه انها در يك سيستم ديگر ثبت مي شوند و يا لازم است نتيجه يكسري از مقادير در اختيار ديگران قرار گيرد . هردو اين مثالها پايگاههايي را نشان مي دهند كه مي توانند روي كامپيوتر هاي ميهمان قرار گيرند
2. به مساله پردازشها توجه كنيد . اين مساله ارتباط مستقيمي با محل نگهداري اطلاعات پايگاهها دارد . برخي از پردازشها را بايد روي كامپيوتر ميهمان انجام داد . مثلا نتيجه گيري از دادههاي وارد شده در كامپيوتر اپراتور براي ارسال به كامپيوتر ميزبان . اما برخي ديگر را مي بايستي در كامپيوتر ميزبان انجام داد.
يك مثال ساده مي تواند به شما كمك كند . فرض كنيد مي خواهيد جمع كل يكسري داده را محاسبه كنيد . اين پردازش بايستي در نزديكترين محل به كامپيوتر نگهداري ان داده ها باشد . اگر داده ها در كامپيوتر ميزبان هستند ، در انجا و باالعكس . اينكار باعث كاهش ترافيك شبكه و سرعت پاسخگويي مي شود .اما اگر اين كار امكان پذير نيست بايستي مشتري هزينه بيشتر براي شبكه متحمل شود
3. كنترل ، نه تنها به مفهوم امنيت كه به معناي تقسيم كار هم مي باشد . فرض كنيد در يك سيستم ، دادههاي ورود و خروج اجناس را قرار است ثبت كنند . ايا بهتر است يك كامپيوتر (براي ثبت اطلاعات) در محل قرار دهند و يا مي توان اطلاعات را به يك قسمت ديگر براي ثبت فرستاد ؟ و ايا بهتر است بانك اطلاعاتي در محل باشد و سپس با ديسكت (يا هر انتقال Off Line ديگر ) به كامپيوتر مادر منتقل شود و يا انتقال بايد همزمان ثبت باشد؟ ايا امنيت (چه در مورد دستكاري اطلاعات Off line و چه در مورد ثبت اشتباه Online ) تامين مي شود ؟ و سوالات ديگري كه با تجربه و مطالعه مي توان جواب انها را پيدا كرد

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت هشتم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۲۲ مراجعه امروز
۴۹۳۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت هشتم)
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۴/۱۳۸۲ اين مقاله ۵۴۰ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

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

تقسيم بندي پايگاهها :
پايگاهها هميشه يك نوع نيستند. بلكه داراي تقسيم بندي برحسب نوع عملكرد دارند. اين تقسيم بندي (كه تقريبا همجا يكسان است) بصورت زير مي باشد
1. پايگاههاي اصلي (Master): پايگاههايي هستند كه اطلاعات مادر رانگهداري مي كنند . مثلا پايگاه اطلاعات پرسنل و يا اطلاعات دانش آموزان
تشخيص : اين نوع پايگاه داراري تغييرات كمي هستند مثلا تصحيح نام يا تاريخ استخدام و برخي از فيلد ها هرگز تغيير نمي كنند . مثلا شماره شناسايي
2. پايگاههاي ثبت تغييرات (Detail) : پايگاههايي كه تغييرات مرتبط با پايگاههاي مادر را ثبت مي كنند. مثلا ورود و خروج كارمندان و يا نمرات دانش آموزان
تشخيص : اين نوع پايگاه داراي تغييرات وسيعي مي باشد و بيشترين كار كاربر روي فعاليت اين نوع پايگاه استوار است
3. پايگاههاي مرجع (Reference) : اطلاعاتي كه در اين نوع پايگاهها ثبت مي شوند تقريبا ثابت هستند. مثلا پايگاه واحدهاي اندازه گيري يا نحوه محاسبه بيمه و ماليات
نكته : اين نوع پايگاهها را نبايد با پايگاههاي اصلي اشتباه گرفت و همچنين در برخي از موارد اين پايگاهها فاقد كليد اصلي هستند
4. پايگاههاي راكد (Archive) : پايگاههايي براي نگهداري اطلاعات دوره هاي قبلي كار سيستم هستند. مثلا بايگاني سالهاي مالي و يا سوابق افراد
نكته : در بيشتر موارد اطلاعات موجود در اين پايگاهها مي بايستي غير قابل تغيير باشند. همجنين در مورد نحوه تشكيل اين پايگاهها مي توان به 2 صورت زير عمل نمود
• يك فايل ثابث كه اطلاعات هردوره به اين فايل اضافه مي شود
• از طريق تقسيم بندي محل نگهداري (ديسكها ، شاخه ها و ... ) اين اطلاعات را برحسب دوره از يكديگر منفك نمود
5. پايگاه هاي پشتيبان (Back Up) : پايگاههايي براي پشتيباني از پايگاههاي اصلي يا تغييرات هستند و در صورت خرابي فايل ها اصلي مورد استفاده قرار مي گيرند .
نكته : انواع روشهاي زمانبندي براي پشتيبان گيري وجوددارد . به عنوان مثال روش پدربزرگ كه شكل زير ميتواند تاحدودي به نحوه كار ان اشاره كند.
توجه داشته باشيد كه شدت رنگ ميزان خطر از دست رفتن اطلاعات را مشخص مي كند

6. فايل يا پايگاه ثبت تغييرات (Transaction Log) : پايگاه و يا فايلهايي كه هرگونه تغييرات در ديگر انواع پايگاهها را ثبت مي كنند و بهنگام بروز اشكال ، كاربر مي تواند پايگاهها را به زمان پشتيبان گيري برگردانده و از طريق اين فايلها تمامي عمليات را مجدد اعمال نمايد
نكته : چنانچه شما سيستمي را مورد استفاده قرار مي دهيد كه تعدادي اپراتور در ان ورود و يا اصلاح اطلاعات انجام مي دهند ، اينگونه فايلها جزء مهمترين دسته فايلهايي هستند كه به شما مي توانند كمك كنند.

روشهاي بازيابي اطلاعات :
1. روش متوالي (Physical Sequential File Access)
در اين روش اطلاعات به ترتيب و ركورد به ركورد خوانده و يا نوشته مي شوند
2. روش متوالي منطقي (Logical Sequential Access)
در اين روش كليه ركورد ها بر اساس يكي از فيلد مرتب شده است و پردازش ركورد به ركورد انجام مي شود
3. روش دسترسي مستقيم (Direct Access/Random Access)
در اين روش دستيابي به يك ركورد فقط از طريق كليد انجام مي شود

انواع بانكهاي اطلاعاتي :
1. طبقاتي (Hierarchical)
در اين روش هر پايگاهي يا بصورت Parent و يا Child است . دستيابي به اطلاعات حتما مي بايستي از ريشه شروع شود . مزيت اين نوع مشابهت ان با طبيعت سازمانهاي اطلاعات است
شكل زير اين نوع را نمايش مي دهد

2. شبكه اي (Network)
در اين روش هر پايگاه عضوي (Member) از يك پايگاه ديگر(Owner) است . اين روابط را مجموعه ها (Set) تعريف مي كنند . از انجا كه هر پايگاهي مي تواند داراري اين رابطه باشد شكل ناشي از اين نوع پايگاهها دارار انعطاف بسيار زيادي است . براي پيدا كردن يك ركورد در اين مجموعه ابتدا بايد به سراغ مالك مجموعه و از طريق ان بسراغ عضو رفت . به شكل زير دقت كنيد

3. نوع رابطه اي (Relational)
در اين روش برخلاف دو روش قبل رابطها قطعيت ندارند ، بلكه با روابط رياضي تعريف مي شوند . نمونه اين پايگاهها SQL است .در اين روش ميتوان از پايگاههاي اصلي هر نوع جداولي كه اطلاعات را به تفكيك يكسري صفات (فيلد ها) نگهداري مي كنند ايجاد و روابط بين اين جداول را از طريق دستوراتي مانند Select وJoin و... برقرار نمود .توانايي بالاي اين نوع پايگاهها در ايجاد جداول ، ارتباط بين جداول و يا با پايگاهها و مرتب سازي قدرت انعطاف بسيار بالايي را به اين نوع بانكهاي اطلاعاتي مي دهد. شكل زير را ببينيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


سری آموزش PHP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۳۵ مراجعه امروز
۵۱۵۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
سری آموزش PHP
نويسنده : مديريت سايت
موضوع : PHP [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۴/۱۳۸۲ اين مقاله ۱۱۳۲ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

در اين سري دروس سعي شده است كه مطالب مختصر و آموزنده اي از يك زبان برنامه نويسي براي وب و يك استاندارد از زبانهاي بانك اطلاعاتي به صورت خود آموز ارائه شود .

قبل از شروع بايد چند نرم افزار از اينترنت بگيريد و بر روي سرورتان نصب كنيد Mysql,php دو بسته نرم افزاري است كه بايد گرفته و نصب كنيد .

php يك زبان اسكيرپت است كه بر روي سرور عمل مي كند . (Server-Side-Language) ميتوان آنرا بصورت يك Plugin فرض كرد بر روي سرويس دهنده وب شما نصب مي شود تا بتواند فايلهاي خاصي به نام “php Script” را اجرا كند تا به يك بانك اطلاعاتي متصل شده تا اطلاعات را قبل از فرستاندن به مرورگر اينترنت ، گرفته و پردازش كند .

php براي استفاده و بارگذاري (Download) از شبكه اينترنت كاملا رايگان است .

براي نگهداري اطلاعات, شما به يك سيستم مديريت بانك اطلاعاتي رابطه اي (RDBMS) نياز داريد . Mysql يك نرم افزار مديريت و نگهداري بانك اطلاعات است كه به شما معرفي مي شود . Mysql اطلاعات در حجم بالا را بسيار خوب سازماندهي و مديريت مي كند و به راحتي با زبانهاي اسكيريپت همچون php ارتباط برقرار مي كند. اين سيستم مديريت بانك اطلاعاتي بر روي سيستم عاملهائي چون لينوكس (Linux) و ويندوز (Windows) نصب و اجرا مي شود . اگر شما خوش شانس باشيد ميزبان وب شما MySql ,php را نصب كرده است در غير اينصورت حضرت عالي بايد تقبل زحمت كنيد و هر دو آنها را نصب و پيكر بندي كنيد. در اين مجموعه مرحله به مرحله نصب و پيكر بندي و بكار گيري آنها آموزش داده مي شود .

مقدمه
php يك زبان اسكريپت است كه توليد صفحات پوياي وب مي كند كدهاي php در داخل صفحات HTML قرار مي گيرند و هنگام درخواست كاربر اجرا مي شوند صفحات php بر روي سرور اجرا مي شوند و نتايج آن بصورت HTML براي كاربر ارسال مي شوند اين زبان اسكريپت متفاوت با ديگر زبانهاي اسكريپت نظير Java Script است كه ابتدا توسط مرور گر وب بار گذاري مي شود سپس اجرا مي شود .

ويژگيهاي php :
1ـ مشكلات احتمالي كه در اثر تفاوت بين سيستم عاملها كاربران بوجود مي آيد در آن رفع شده است.

مرور گر اينترنت كاربر بعد از اجراي كدهاي php بر روي سرور صفحات HTML دريافت مي كند . اما در ديگر زبانهاي اسكريپت بايد امكان پردازش آن بر روي مرور گر كاربر وجود داشته باشد .

2ـ اين زبان از امنيت بالائي براي محافظت از كدهاي php برخوردار است بطوريكه كاربر نمي تواند به كدها دسترسي داشته باشد و از سوء استفاده هاي بعدي جلوگيري مي شود .

3ـ وب سرور شما بايد طوري پيكر بندي شود تا بتواند متنهاي HTML حاوي php است را ويرايش كند براي اين منظور بايد به يك (php engine) نصب كنيد وب سرور خودتان را پيكر بندي كنيد .

4ـ اين زبان اسكريپت نياز به محاسبه و عمليات CPU اصطلاحا (CPU time) دارد . تعدادي بالاي درخواست متقاضي ميتواند باعث كار بيش از حد سرور شود در اينجا يك نمونه از صفحه HTML كه حاوي كد php است براي شما ارائه مي شود .

Example 1.Php
<HTML>
<HEAD>
<TITLE>
Example 1
</TITLE>
</HEAD>
<BODY>
<? echo(”<H1> This is an Example </H1>”); ?>
</BODY>
</HTML>

اگر پيكر بندي سرويس دهنده وب شما صحيح انجام گرفته باشد موتور php آنرا قبل از فرستادن براي كاربر ويرايش مي كند . متن HTML زير را ارسال مي كند .

<HTML>
<HEAD>
<TITLE>
Example 1
</TITLE>
</HEAD>
<BODY>
<H1> This is an Example </H1>
</BODY>
</HTML>

همانگونه كه ملاحظه مي كنيد كدهاي php پردازش شده و بصورت HTML براي كاربر ارسال شده است و كاربر نمي تواند تشخيص دهد كه اين صفحات حامل از پردازش صفحات ديناميكي مي باشد .

دستورات و خطوط فرمان php داخل دوتك ?<و >? قرار مي گيرند تا موتور php با شناسائي آن پردازش را شروع كند اگر شما قصد داريد از ديگر تك ها استفاده كنيد بايد در فايل php.ini را تغييرات بدهيد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


دلفي و اسمبلي ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۹۰ مراجعه امروز
۴۲۰۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
دلفي و اسمبلي
نويسنده : رضا کريم پور
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۲۸/۴/۱۳۸۲ اين مقاله ۲۶۱۶ بار مطالعه شده است
۲۶ نفر تا به حال به اين مقاله رای داده اند.

برنامه نويسان دوران DOS با tasm.exe و tlink.exe آشنايي دارند.ايندو از ديرباز رقيبان masm.exe و link.exe بوده و هستند.بله tasm و برادركوچكش tlink از اولين ابزارهاي برنامه نويسان حرفه اي هستند.اما بعد از ظهور Turbo Pascal ، Turbo C/C++ و متعاقبا كامپايلر هاي تحت ويندوز ، كم كم محبوبيت خود را از دست دادند.هم اكنون كمتر صحبتي در مورد اين افسانه هاي قديمي پردازنده هاي x86 ميشود.

آيا اين نشانه مرگ tasm است؟

آيا ميدانيد هر بار كه Delphi يا C++Builder را نصب ميكنيد ، نمونه 32 بيتي اين اسمبلر باوفا نيز ميهمان ديسك سخت شما ميشود؟

آيا ميدانيد مهمترين بخشهاي VCL توسط اسمبلي و tasm32.exe نوشته شده است؟

آيا مي خواهيد روش استفاده از tasm در Delphi را ياد بگيريد؟

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

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

آستينها رابالا بزنيد!!
برنامه اي كه خواهيم ساخت كار بسيار ساده اي انجام ميدهد.
اين برنامه يك Message box را نمايش داده كه داراي دو كليد OK و Cancel است.هر كدام از اين كليد ها كه click شوند توسط يك Message box ديگر به كاربر گزارش داده ميشود.

براي شروع يك فايل با پسوند dpr ساخته و كد زير را در آن كپي كنيد:

program DelphiAsm;
uses windows;

var
Title :PChar = 'Inline assembly with Reza'#0;//bar hasbeh adat!!
Mes1 : PChar = 'Please press one of the following buttons!!'#0;
Mes2 : PChar = 'You pressed OK button!!'#0;
Mes3 : PChar = 'You pressed Cancel button!!'#0;

label
PRINTPROC;

begin
asm
push 1
push Title
push Mes1
push 0
call MessageBoxA
cmp eax , IDOK
je PRINTPROC
push Mes3
pop Mes2

PRINTPROC:
push 0
push Title
push Mes2
push 0
call MessageBoxA

mov eax,0
call ExitProcess
end;
end.

نكته:در دلفي براي نوشتن دستورات اسمبلي از بلوك asm … end; استفاده ميشود.

قبل از هر چيز به نحوه تعريف يك ليبل توسط كلمه كليديمLabel توجه كنيد.چه در tasm و چه در masm احتياجي به اعلان كردن ليبل ها نداريد ولي از آنجايي كه Delphi يك كامپايلر است و قوانين خواص خود را دارد ، قبل از استفاده از هر ليبل بايد آنرا اعلان كنيد.

نكته دوم مسئله calling convention است.بايد بدانيد كه Delphi از روش Fastcall براي فراخواني توابع خود استفاده ميكند ولي windows از روش stdcall بهره ميبرد.

Stdcall يعني آرگومانها را از چپ به راست در پشته قرار مي گيرند و callee (فراخوانده) مسئول pop كردن آرگومانها است.(براي اطلاعات بيشتر در مورد انواع calling convention ها به MSDN يا مقاله ديگر من بنام "اسمبلي تحت ويندوز" مراجعه كنيد.)

براي يافتن Prototype اولين تابع مورد استفاده نگاهي به MSDN بيندازيد و تابع MessageBox (و نه MessageBoxA يا MessageBoxW) را search كنيد :

int MessageBox(
HWND hWnd, // handle to owner window
LPCTSTR lpText, // text in message box
LPCTSTR lpCaption, // message box title
UINT uType // message box style
);
اكنون ميدانيد كه
1.Prototype تابع MessageBox چيست.
2.calling convention استاندارد يا stdcall چگونه عمل ميكند.

پس دست بكار شده و آرگومانها را از چپ به راست در stack بچپانيد!! سپس تابع MessageBox را فراخواني كنيد.

همانطور كه در Prototype تابع MessageBox ميبينيد مقدار بازگشتي آن يك Integer است كه نشان دهده دكمه كليك شده در Message box است.

نكته مهم:
توابع stdcall مقدار بازگشتي خود را در eax قرار ميدهند.

آقا يادم رفت بگم ، اسامي چون IDOK, IDCANCEL, MessageBox و... در يونيت windows اعلان شده اند.

پس تا اينجا موفق شديم يك MessageBox با متن
Please press one of the following buttons!! نمايش دهيم .بر اساس مقدار بازگشتي اين تابع تشخيص ميدهيم كه كدام دكمه(button) كليك شده است و با يك جابجايي ساده و بدون توليد كد اضافي پيام مناسب را توسط يك Message box ديگر به كاربر نمايش ميدهيم.حتما ميدانيد كه متغييري از نوع رشته در ويندوز ، يك اشاره گر به اولين كاراكتر آن رشته است.(علت اين است كه windows بوسيله زبان C پياده سازي شده است.)

در انتها نيز با فراخواني ExitProcess تمامي thread هاي فعال (كه در اين برنامه يكي بيشتر نيست!!) بسته ميشوند ، هر چند كه انجام اين كار ضروري نيست، دلفي كد لازم را توليد خواهد كرد.مي توانيد دو خط آخر را حذف كنيد و نتيجه كار را ببينيد.

در اين برنامه براي ساده كردن كار از VCL كه نقطه عطف Delphi است استفاده نكرديم اما شما ميتوانيد در برنامه هاي عادي خود VCL و اسمبلي را باهم بكار گرفته و برنامه هايي با بازدهي بسيار بالا بسازيد.از حالا به بعد اگر شنيديد كه :"آره بابا با دلفي نميشه فلان كارو انجام داد ، بايد با اسمبلي كد بنويسي" ميدانيد چه جوابي بدهيد.

اميدوارم كه اين مقاله كوتاه مورد توجه شما قرار گرفته باشد.سوالات و نظرات خود را به آدرس titanwalker@mail.com ارسال كنيد.

رضا كريم پور(titanwalker@mail.com) 25/4/82 ...آخرين تدوين 28/4/82

هدف از زندگي كردن لذت بردن است ، پس از زندگي لذت ببريد و ديگران را در اين لذايذ سهيم كنيد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


اسمبلی تحت ويندوز ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۷۹۵ مراجعه امروز
۴۶۱۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
اسمبلی تحت ويندوز
نويسنده : رضا کريم پور
موضوع : Assembley [image] نسخه قابل چاپ
تاريخ نشر : ۲۸/۴/۱۳۸۲ اين مقاله ۱۲۰۵ بار مطالعه شده است
۱۶ نفر تا به حال به اين مقاله رای داده اند.

حتماٌ زماني كه درس زبان ماشين را پاس ميكرديد ،در مقايسه با زبانهايي چون C++ , Object Pascal(Delphi) آنرا فوسيل ? ميناميديد و هرگز فكرنميكرديدكه MASM بتواند فايلهاي .EXE, .DLL, .sys تحت ويندوز را بسازد.
اما حقيقت اين است كه اكنون اسمبلرهاي فراواني وجود دارند كه به شما امكان ايجاد فايلهاي اجرايي با فرمت PE را ميدهند.اگر نميدانيد PE(Portable Executable) چيست بهتر است به مقالات موجود در MSDN مراجعه كنيد.
اسمبلرهاي زير جزء معروف ترينها هستند:
• MASM(Macro Assembler) from Microsoft
• TASM(Turbo Assembler)from Borland
• NASM(Netwide Assembler)
• FASM

(در اين مقاله صرفاٌ از MASM استفاده خواهم كرد.)
اين مقاله براي چه كساني مناسب است؟
براي آنكه بتوانيد از مطالب اين مقاله استفاده كنيد (به نظر من) بايد با مطالب زير آشنايي داشته باشيد:
• زبان Assembly
• WIN32/64 API يا شايد بتوان گفت: Visual C++ بدون MFC ويا Delphi بدون VCL

براي شروع بهتره كلماتي مثل MASM و Download را در GOOGLE جستجو كنيد و MASM را Download كنيد.
توجه:به شما پيشنهاد ميكنم براي هماهنگي با من Package آقاي HUTCH را از آدرس زير Download كنيد:
www.movsd.com (ورژن Package من 8 است اما ورژنهاي پايين تر هم مناسب خواهند بود.) در ضمن به MSDN هم احتياج پيدا خوايد كرد.(البته اگر نداشته باشيدش هم No Problem ?)
اگر دلفي يا BCB را نصب كرده ايد ميتواند از فايل win32sdk.hlp در پوشه MSHelp بجاي MSDN استفاده كنيد.(هرچند مال زمان پادشاه وزوزه?)
خوب حالا كه MASM را Download كرديد بايد اقدام به نصب آن كنيد.
آقاي HUTCH فرد دانايي است و براي كاهش حجم Package زيركي خاصي را بكار برده اما در عوض زمان نصب بسيار افزايش پيداكرده پس بهتر است در زمان نصب صبور باشيد.

شروع!!
تمامي برنامه ها تحت ويندرز در حالت Protected Mode اجرا ميشوند و اين يعني هربرنامه 4GB Address Space, خواهد داشت(4 گيگا بايت يعني زندگي!!)البته توجه كنيد كه گفتم Address Space نه Memory Space .با اينحال بدليل طراحي عالي NT تقريباً هيچ وقت با كمبود حافظه مواجه نخواهيد شد.
همه اينا رو به اين جهت گفتم كه شما را براي يك خبر خوشحال كننده آماده كنم:
? عمر Segment هاي اعصاب خورد كن بسر آمده.(يوهو!!)
فكر كنم همين اندازه تئوري كافي باشه ، بهتره دست بكار بشيم(يا بشم).كد زير را كپي كرده و در فايلي بنام test.asm پيست!! كنيد.

.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

.code
start:
invoke ExitProcess,0
end start

حالا ببينيم كد فوق چگونه عمل ميكند:
.386
اين دستور به اسمبلر ميگويد كه ما قصد استفاده از دستورات پردازندههاي 386 را داريم.
سوال:بابا مگه 386 تاريخ نشده؟
جواب:معماري 386 استاندارد مورد استفاده تمامي پردازندههاي 32بيتي بالاتر حتي p4 است.

.model flat, stdcall
با .model كه از روزگار گذشته آشنايي داريد.
Flat براي تمامي برنامه هاي تحت ويندوز استفاده ميشود و معني اش همان 4GB است.
Stdcall يا Standard Call ، Calling Convention مورد استفاده ما است.
Stdcall يعني آرگومان ها را از راست به چپ داخل stack گذاشته و در ضمن تابع فراخوانده شده مسئول خالي كرد (pop) stac است. (فرقش هم با روش cdecl در همين مورد آخره)
اگه قات زديد, بهتره Stdcall رو فعلاً بيخيال شيد ، بعداً ميفهميد چيه.!!

option casemap:none
حتماً ميدانيد كه MASM مانند Delphi(object Pascal) و بر خلاف C/C++ ،case sensitive نيست اما شما براي استفاده از MASM تحت ويندوز مجبوريد آنرا case sensitive كنيد .دستور فوق دقيقاً اين كار را انجام ميدهد.بشما توصيه ميكنم حتماً از اين دستور در ابتداي هر برنامه خود استفاده كنيد.

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

دوتا خط اول كه واضح است اما يك توضيح كوچك در مورد فايلهاي .inc :
فايلهاي include موجود در package آقاي HUTCH به اين شكلند كه :
windows.inc :شامل تمامي ثوابت مانند WM_PAINT ميباشد.
DllName.inc : شامل prototype توابع DllName ميباشد.بطور مثال kernel32.inc شامل prototype توابع export شده از kernel32.dll ميباشد.
Includelib هم براي link كردن با فايلهاي .lib استفاده ميشود.(اگر نميدانيد فايلهاي .lib چه هستند به من ربط نداره!!همه چي رو كه من نبايد توضيح بدم?)

.code
نشان دهنده نقطه شروعSection (ونه Segment) كد است.

invoke ExitProcess,0

invoke دستور جديدي است كه به MASM (ونه CPU) اضافه شده و به شما امكان فرا خواني توابع بدون Push كردن دستي آرگومانهاي تابع را ميدهد.مثلاً كد فوق برابر است با:
Push 0
Call ExitProcess

end start
اين دستور 2 كار انجام ميدهد:
• پايان Section كد را مشخص ميكند.
• Entry Point برنامه را تعيين ميكند.

حال براي Assemble كردن اين كد ابتدا يك پنجره كنسول باز كنيدوابتدا Assembler و سپس Linker را اجرا كنيد:

ml /c /coff /Cp test.asm
ml.exe نام Assembler است.
/c به Assembler ميگويد كه فقط فايل .obj ايجاد كند (نه .exe)
/coff فايل .obj با استاندارد coff (استاندارد unix) ميسازد.
/Cp :معادل همان option casemap:none است.

پس از اينكه همه كار بخوبي پيش رفت بايد فايلي بنام test.obj براي شما ايجاد شده باشد.
اكنون بايد اين فايل را Link كنيم(كه البته بهتره آنرا Dynamic Linking بناميم)

Link /SUBSYSTEM:WINDOWS test.obj

/SUBSYSTEMمهمترين سويچ Linker است و به آن ميگويد كه شما قصد داريد چه جور exe اي را ايجاد كنيد.كلاً دو حالت مهم دارد:
/SUBSYSTEM:WINDOWS

/SUBSYSTEM:CONSOLE

(در VC++ اين سويچ Entry point برنامه را از ميان main و WinMain انتخاب ميكند)
بعد از اينكه Linker را اجرا كرديد فايل test.exe براي شما ايجاد ميشود وهمانطور كه از سورس برنامه معلوم است ،با اجراي اين برنامه اتفاق خاصي نخواهد افتاد.
سلام دنيا!!
اكنون بهتر است يك برنامه بنويسيم كه پيام Hello World را نمايش دهد.
.386
.model flat,stdcall
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib

.data
Mes BYTE "Hello Wolrd",0.

.code
WinMain:
invoke MessageBox,NULL,offset Mes,NULL,0
invoke ExitProcess,0
end WinMain

كد فوق ساده است واحتياجي به توضيح ندارد.اين فايل را همانطوري كه قبلاً توضيح دادم assemble و link كنيد.پس از پايان كار يه نگاهي به حجم فايل exe ايجاد شده بيندازيد...حتماً تعجب خواهيد كرد!!!

پنجره اي رو به آفتاب!!
شايد وقتش شده باشه كه با هم يك پنجره بسازيم!!!
در مورد كد زير فكر ميكنم توضيحات درون خود كد كافي باشد اما متذكر ميشوم كه اگر نحوه ساختن يك پنجره بوسيله Win32 API را نميدانيد ممكن است كد زير كمي براي شما پيچيده باشد (براي اطلاعات بيشتر به كتاب Programming Windows نوشته Charles Petzoldمراجعه كنيد.)
.386
.model flat, stdcall
option casemap:none
include \masm32\include\WINDOWS.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

WinMain proto :HWND,:DWORD,:DWORD,:DWORD

.DATA ; initialized data
ClassName db "SimpleWinClass",0 ; the name of our window class
AppName db "Our First Window",0 ; the name of our window

;-------------------------------------------------------------------
.DATA? ; Uninitialized data
hInstance HINSTANCE ? ; Instance handle of our program
CommandLine LPSTR ?
;-------------------------------------------------------------------
.CODE ; Here begins the code

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
; creating local variables on stack
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND

mov wc.cbSize,SIZEOF WNDCLASSEX ; fill values in members of wc
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax

invoke RegisterClassEx, addr wc ; register our window class
invoke CreateWindowEx,NULL,\
ADDR ClassName,\
ADDR AppName,\
WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
NULL,\
NULL,\
hInst,\
NULL
mov hwnd,eax
invoke ShowWindow, hwnd,CmdShow ; display our window on desktop
invoke UpdateWindow, hwnd ; refresh the client area

; Enter message loop
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam ; return exit code in eax
ret
WinMain endp

;----------------------------------------------------------------------
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.IF uMsg==WM_DESTROY ;if the user closes our window
invoke PostQuitMessage,NULL ; quit
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam ;Default message processing
ret
.ENDIF
xor eax,eax
ret
WndProc endp
;-----------------------------------------------------------------------

start:
invoke GetModuleHandle, NULL ;get the instance handle of our program.
mov hInstance,eax
invoke GetCommandLine ; get the command line. You don't have to call this
; function IF your program doesn't process the command line.
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine,SW_SHOWDEFAULT ;call the main ;function
invoke ExitProcess, eax ;quit our program. The exit code is returned in eax ;from WinMain.
end start
نتيجه برنامه را در شكل زير مشاهده ميكنيد:

آيا فكر ميكنيد اين برنامه هيچكاري جز نمايش يك پنجره خالي انجام نميدهد؟

نكته: در كد فوق از عملگرد جديد MASM با نام ADDR استفاده شده است .اين عملگرآدرس effective يك متغييررا محاسبه ميكند ولي مشكل آن اينست كه تنها به همراه invoke قابل استفاده است ،پس در حالات ديگرنميتوانيد ADDR را بكار بريدو بايد از همان دستور LEA استفاده كنيد.
نظرات و پيشنهادات و سوالات خود را به ادرس titanwalker@mail.com ارسال كنيد.

Real Programmers code in asm.

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت نهم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۲۵ مراجعه امروز
۴۹۴۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت نهم)
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۷/۵/۱۳۸۲ اين مقاله ۵۸۱ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

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

شروع
با يك جمع بندي از قبل كه انجام دهيم ، مي توانيم به اين نكته برسيم كه ما برنامه را از نظر تحليل و طراحي آماده كرديم اما در زمان پياده سازي نياز است كه به چند سوال مهم جواب دهيم
1. برنامه را چگونه پياده كنيم
2. در چه محيطي
3. با چه ابزاري
4. در چه مدت زمان
5. چه نوع تكنيكهاي برنامه نويسي استفاده كنيم

بنظرمن جواب اين سوالها به 2 سوال مهم از خود شما برمي گردد :
1. با چه محيطهايي آشنا هستيد
2. تا چه حد به محيطهاي مذكور مسلط هستيد
اما بطور كلي از ديد من جواب سوالهاي فوق بدين صورت مي باشد

1. سه نوع پياده سازي وجود دارد
a. پياده سازي از طريق مدل سازها مانند Rational Rose/Modal Maker كه در اين حالت بايستي از سالها تجربه در زمينه تحليل ، طراحي و برنامه نويسي برخوردار باشيد تا بتوانيد هم به سادگي برنامه اي را توليد هم سريعا خطاهاي احتمالي سيستم را بررسي و رفع كنيد . انشاا... وقتي اين بحث خاتمه پيدا كرد مقالاتي راجب به اين مطلب خواهم نوشت .
b. پياده سازي از طريق الگوهاي آماده مانند Microsoft Access كه در اين حالت نيازي آنچناني به دانستن علوم كامپيوتر احساس نمي شود . شما مي توانيد با يك دوره آموزش 10 ساعته به تهيه و توليد هرنوع برنامه بانك اطلاعاتي بپردازيد . اين روش بنابر قدرتهاي خوبي كه در اختيار كاربر (و يا توليد كننده نرم افزار) قرار ميدهد، داراري محبوبيت فراواني است . اما اين نوع برنامه ها نيز داراي مشكلات مخصوص به خود هستند. درمورد اين روشها نيز مي توانيد مطالب زيادي (و يا افراد زيادي ) پيدا كنيد
c. پياده سازي از طريق كد نويسي (برنامه نويسي) اين روش كه زمان زيادتري (به نسبت 2 روش قبل )نيز طلب مي كند مورد بحث ما است كه باالطبع توضيح كامل در ادامه بحث داده خواهد شد

2. كد نويسي را مي توان در نرم افزارهاي مختلفي انجام داد. مروري اجمالي بر اين نرم افزار ها خواهيم داشت ياد اوري مي كنم سطرهايي كه مي نويسم تنها نظر شخصي من است ولي تحقيق در باره انها را به عهده خودتان مي گذارم

a. نرم افزار هايي كه Interpreter هستند مانند Fox/Basic : اين نرم افزار ها بدلائلي كه عنوان مي كنم محيط مناسبي براي كار حرفه اي نيستند.
i. سرعت پايين : اين گونه نرم افزار ها در واقع كد اجرايي توليد نمي كنند بلكه در هنگام اجرا خط به خط انها از طريق برنامه مادر اجرا مي شود. بدليل اينكه يك يا دولايه ما بين برنامه و سيستم عامل اضافه مي شود سرعت كاهش پيدا مي كند
ii. محيط راحت ولي محدود : توابعي كه اين برنامه ها در اختيار برنامه نويس مي گذارند در 90درصد موارد جوابگوي نياز وي مي باشد ، اما اينگونه برنامه نويسان اگر به اين راحتي عادت كنند در توليد توابع خاص دچار مشكل خواهند شد
iii. محدوديت سيستم عامل : بسياري از اين برنامه ها داراري Versionهايي هستند كه متكي به يك سيستم عامل خاص مي باشند مثلا ويندوز . بدين جهت دورنماي تغيير سيستم عامل يك دورنماي تاريك خواهد بود (علي الخصوص براي برنامه هاي سنگين و بزرگ)
iv. محدوديت پارامترهاي ورودي و خروجي سيستم : اينگونه برنامه ها بدليل بسته بودن محيط Componentهاي مورد استفاده در مورد ورودي ها و خروجي ها متكي به شركت توليد كننده مي باشند و حتي برخي مانند Visual Basic در كتب خود به ضعف در مورد گزارشگيري از پايگاههاي اطلاعاتي ويا ارتباط ناقص از طريق OLE با ديگر نرم افزار ها اعتراف دارند.
v. مشكلات ديگري مانند محدوديت حجم ركورد ها در پردازش ، سرعت پايين در اطلاعات بالا ، عدم كنترل برنامه نويس در پردازش خطاها ، نياز به برنامه و يا درايورهاي مادر و غيره نيز از جمله مشكلاتي است كه اين نرم افزار ها با آن مواجه هستند . اما در قبال آن مي توان برخي نقاط قوت از جمله تغذيه شدن توسط برخي از برنامه هاي بزرگ مدل ساز مانند Rational Rose و همچنين امكان انتقال و يا ارتباط برخي از نرم افزار هاي تك منظوره مانند Auto Map را نيز ذكر كرد .

b. نرم افزارهاي Interpreter تحت وب مانند Java / Asp : اينگونه نرم افزار ها را مي توان داراي مزاياي زيادي از جمله سرعت خوب در اينترنت ، عدم اتكا به محيط توزيع (سيستم عامل و يا Browser) ، قدرت فراوان در توليد و حمايت از طرف تعدادي از برنامه هاي مدل سازو غيره دانست . اما آنچه كه باعث مي شود تا اين دسته از نرم افزار ها در مقوله صحبت ما كنار روند همان بحث DataBaseها در محيط تك كاربره و شبكه است .

c. نرم افزار هاي توليد كننده كد قابل اجرا مانند Delphi/C++ : اينگونه نرم افزارها
i. نيازي به حمايت يك برنامه مادر و يا نصب برنامه خاصي براي اجرا ندارند .
ii. داراي سرعت خوبي از نظر پردازش اطلاعات هستند ،
iii. وابستگي به ابزار پياده سازي خود ندارند و قابليت دريافت هرگونه Componentهاي ديگر را نيز دارند
iv. برنامه نويس مي تواند با نرم افزارهاي توليدي را براي استفاده در يك سيستم عامل ديگر در كوتاهترين زمان تبديل كند .
v. بنابر دليل ذكر شده در iii قدرت بالايي از نظر ارتباط نه تنها از طريق OLE كه ارتباط مستقيم با ديگر نرم افزارها را دارند
vi. وابستگي به يك درايور خاص بانك اطلاعاتي ندارند و تقريبا همه Data Providerها تحت پوشش قرار مي دهند .
vii. وقدرتهاي ديگر مانند تغيير Source Codeابزار مورد استفاده ، كنترل بالاي برنامه نويس در پردازش خطا ، كنترل بالا در استفاده از Resourceهاي سيستم ، قدرت بالا در طراحي و اجراي اجزاء مورد استفاده به صورت Dynamic و غيره . كه بنده دلفي را ميان اين نرم افزارها انتخاب نموده ام.

3. در مورد ابزار و تكنيكهاي مورد استفاده مي بايستي مشروحا در دلفي بحث كنم كه جلوتر ضمن دسته بندي مشكلات و مسائل به اين مساله خواهيم پرداخت .

4. من همواره به كساني كه در مورد توليد نرم افزار با من مشورت دارند توصيه مي كنم اگر مدت زمان اجراي پروژه به اختيار خودتان است زمان را با محاسبه دقيق پس از تحليل اوليه صورت مساله و مشخص شدن دقيق صورت مساله تعيين كنيد .و اگر حرفه اي هستيد ويا سيستم را قبلا نوشته ايد و اكنون مي خواهيد براي يك مشتري ديگر تغييراتي در آن بدهيد ضريب حوادث غيرمترقبه را در اعلام زمان درنظر بگيريد .
5. همانگونه كه قبلا در شماره 3 عنوان كردم در ادامه بحث به تكنيك ها نيز خواهيم رسيد

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت دهم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۲۸ مراجعه امروز
۴۹۴۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت دهم)
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۷/۵/۱۳۸۲ اين مقاله ۵۹۱ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

براي پياده سازي هر سيستمي ما نياز داريم كه عملياتي كه روي هر بخش يك سيستم تعريف مي گردد را بشناسيم بطوركلي عمليات روي يك سيستمي كه با پايگاههاي اطلاعاتي كار مي كند بصورت زير مي باشد :
1. ساخت پايگاه در Data Provider مورد نظر
2. ساخت فرمها ي اصلي و حاشيه اي
3. اضافه نمودن اطلاعات جديد Insert
4. اصلاح اطلاعات وارد شده Update/Edit
5. حذف اطلاعات وارد شده Delete
6. جستجو در اطلاعات Search
a. تك مورد Find
b. مورد به مورد Find Next
c. مجموعه اي از اطلاعات Filter/Select
d. .......
7. گزارش گيري و خروجي
a. از اطلاعات خام List
b. از مجموعه اطلاعات M/D
c. از جستجوها
d. از نتايج محاسبات و يا استنتاج ها
e. برحسب دسته بندي
f. چارتهاو نمودارها
g. ......
8. پشتيبان گيري Back Up
9. بازيابي پشتيبان Restore
10. امنيت و تعيين ميزان دسترسي Security
11. زيبا سازي برنامه
12. مسائل حاشيه اي ديگر (امنيت برنامه / تست / )
بگذاريد يك به يك پيش برويم
اما قبل از شروع خدمتتان عرض مي كنم كه Data Provider هايي كه ما با آن كار مي كنيم از نوع
• Paradox 7.0
• SQL Server 7.0/2000
مي باشند .

ساخت پايگاه در Data Provider مورد نظر
براي ساخت پايگاههاي پارادوكس در دلفي مي توانيد از Data Base Desktop 7.0 كه روي خود دلفي نصب است استفاده كنيد براي اينكار به شكلهاي زير دقت كنيد :
1. احضار DatabaseDesktop 70

2. ايجاد يك Table جديد

3. انتخاب نوع پايگاه

4. نحوه تعريف فيلدهاي پايگاه

5. امكانات اضافه در DataBase Desktop

توجه
1. در شكل 2 مشاهده مي شود كه مي توان علاوه بر ايجاد يك پايگاه جديد
a. يك Query By Example (پرس و جو با كمك مثال )
b. يك فايل SQL
نيز تشكيل داد كه در آينده درباره استفاده از اين دو ابزار سودمند توضيح خواهم داد
2. در شكل 3 مي توانيد علاوه بر Paradox نوع ديگري را نيز انتخاب كنيد كه در اين صورت صفحات تشكيل پايگاه و امكانات جانبي ان متفاوت خواهد بود
3. در شكل 4 با وجود طيف گسترده اي از انواع متغير هاي پيشنهادي ، بالشخصه پيشنهاد مي كنم از انواع زير استفاده كنيد
a. N : براي كليد ها ، مبالغ ، اعداد (صحيح و اعشاري )و غيره
b. A : نام ، فاميل ، تاريخ ، ساعت ، نام عكس ، نام فايل توضيحي و غيره (اصولا فكر ميكنم هر چيزي را كه با Alphabetic تعريف قدرت خوبي براي كنترل خواهيم داشت به شرط اينكه محدوده طول را درست تعريف كنيم مثلا تاريخ را A(10) يا نام عكس را بدون مسير A(30))
c. + : كليد هاي مرتب كه نيازي به نمايش ندارند و فقط ترتيب ركورد ها را برحسب انها مي توان مرتب نمود
d. L : فيلدهايي كه يا درست يا نادرست يا تعيين نشده هستند مانند جنسيت
4. در مورد امكانات اضافي مي توانم چند توضيح كوتاه بدهم . اما كار حرفه اي روي انرا از طريق Help يا اگر نياز شد از طريق يك مقاله ديگر توضيح خواهم داد
a. Validity Checks : در اين قسمت به ازاي هر فيلدي مي توان يكسري پارامترهاي كنترلي را يكبار براي هميشه (One Time For Ever) تعريف نمود . مانند ميزان مجاز (MinوMax) ، الزامي براي ثبت اطلاعات ((Required ، فرمت دريافت و يا نمايش اطلاعات (Picture) . از انجا كه برنامه نويسان تمايل دارند كنترل ها را در برنامه تعيين كنند بعدا در مورد شبيه سازي اين قسمت در برنامه مفصلا صحبت خواهيم كرد
b. Table Lookup : مي توان از اين قسمت با كمك پايگاه جاري و تركيب ان با يك پايگاه ديگر پايگاهي تشكيل داد كه تبادل فيلد داشته باشند . اين قسمت را نيز در برنامه خواهيم گفت
c. Secondary Indexes : در اين قسمت شما مي توانيد ايندكسهاي ديگري را براي ترتيب نمايش و يا جستجوي خود تعريف كنيد . بعدا اين قسمت را نيز به روش ديگري شبيه سازي خواهيم كرد
d. Referential Integrity : مي توانيد در اين بخش پايگاههاي مرتبط را به هنگام تغيير مقادير اين پايگاه مشخص كنيد . درواقع نوعي Update هوشمند و بي دردسر . اين بخش را نيز در تكنيكها شبيه سازي مي كنيم
e. Password Security : گذاشتن كلمه رمز براي پايگاه . اين امكان قدرتمند پارادوكس براي آماتورها بد نيست ولي چون همه مي دانند چگونه اين امكان را بشكنند از اين قسمت صرفنظر مي كنيم
f. Table Language : تعيين Char Set مورد استفاده در ثبت اطلاعات . اين امكان براي تبادل پايگاهها بين دو سيستم عامل با Char Set نامتناجنس(Win98/Win 2000) بنظر مفيد است . من تا حالا تست نكرده ام
g. Dependent Tables : نمايش ليست پايگاههايي كه در Referential Integrity معرفي كرده ايد
5. نكات مهم در نام فيلد ها
a. در نام فيلدها فاصله بكار نبريد
b. نام فيلدها را فارسي ننويسيد
c. سعي كنيد يك قاعده ثابت براي نامگذاري فيلدها پيدا كنيد مثلا "TellNumber"
d. فيلدهاي عددي كه با انها محاسبه انجام نمي دهيد بصورت Aدر نظر بگيريد
e. سعي كنيد از Reserve Wordها استفاده نكنيد مثلا Date / Table / IF بجاي ان از OutDate / InTable / IFMale استفاده كنيد

کيفيت مقاله :
عالی خوب متوسط ضعيف


تجربه های آقای وکيلی ( قسمت يازدهم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۳۱ مراجعه امروز
۴۹۴۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
تجربه های آقای وکيلی ( قسمت يازدهم)
نويسنده : بهرام وکيلي
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۷/۵/۱۳۸۲ اين مقاله ۵۲۴ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

ساخت پايگاه در Data Provider مورد نظر 2
براي ساخت يك پايگاه ابتدا بايستي يك SQL Server را رجيستر كرده باشيد به اشكال زير دقت كنيد

1. شروع

2. راهنماي قدم به قدم

3. مشخص كردن نام سرور (Local/Network) باكمك تايپ يا انتخاب از ليست

4. انتخاب نوع ورود به Accountاز طريق الف)Account هاي ويندوز 2) از طريق تعاريف كاربران در SqlServer

5. نحوه ورود به اطلاعات Account بصورت پيش فرض يا در هنگام ورود هر بار سوال شود

6. ايجاد اين سرور در گروه قبلي يا در گروه جديد

7. اماده شدن براي ثبت سرور

8. پيام موفقيت در صورت درست بودن عمليات

حالا سرور شما آماده ثبت Data Base شما است. Data Base محلي است كه شما مي توانيد در ان پايگاههاي خود را ثبت كنيد براي اينكار بترتيب قدمهاي زير را دنبال كنيد .هدف ما ثبت يك DataBaseبنام NewData است

1. ايجاد DataBase

2. وارد كردن نام DataBase

3. DataBaseايجاد شده است

چند نكته
بحث هاي مربوط به Sql Server بسيار مفصل است اما آنچه را كه مي توان در 2 جدول بصورت خلاصه مطرح نمود بدين صورت است

کيفيت مقاله :
عالی خوب متوسط ضعيف


طراحی برنامه ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۳۴ مراجعه امروز
۴۹۵۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
طراحی برنامه ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۳/۵/۱۳۸۲ اين مقاله ۶۸۴ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

در ساليان اخير ، متدولوژي هاي متفاوتي بمنظور طراحي برنامه ، پياده سازي و در اختيار طراحان برنامه هاي کامپيوتري قرار گرفته شده است . برخي از اين متدلوژي ها ي طراحي، پيچيده و برخي ديگر ساده مي باشند . در تمامي حالات ، هدف يکي است : کمک به برنامه نويسان در جهت نوشتن برنامه ها ئي که بسادگي نوشته ، اشکال زدائي و در نهايت نگهداري گردند .
در اين مقاله به بررسي مسائل مرتبط با طراحي برنامه پرداخته و در اين راستا در ابتدا با يک متدولوژي ساده آشنا خواهيم شد. متدلوژي استفاده شده با اينکه بسيار مقدماتي مي باشد ولي اهداف ما را در جهت نحوه طراحي يک برنامه بخوبي تامين خواهد کرد .در اين مقاله ، به بررسي الگوريتم و مراحل پنج گانه برنامه نويسي خواهيم پرداخت . پس از آشنائي با متدولوژي ارائه شده در اين مقاله ، در بخش دوم مقاله ، با متدولوژي 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 ، يک متدولوژي رايج طراحي خصوصا" در ارتباط با برنامه نويسي شي گراء است .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مبانی دا ت نت ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۲۸ مراجعه امروز
۵۲۴۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مبانی دا ت نت ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۳/۵/۱۳۸۲ اين مقاله ۲۷۸۶ بار مطالعه شده است
۳۳ نفر تا به حال به اين مقاله رای داده اند.
دات نت ، پلات فرم جديد ماکروسافت بمنظور تحقق نظريه : " نرم افزار بعنوان سرويس " ، است . دات نت يک محيط پياده سازي است که بکمک آن مي توان اقدام به ايجاد و بکارگيري نرم افزار و نسل جديدي از عناصر موسوم به " سرويس هاي وب " ، نمود. تمامي محصولات اصلي ماکروسافت از ويژوال استوديو دات نت تا ويندوز و نهايتا" مجموعه آفيس ، متاثر از پلات فرم فوق شده و خواهند شد . دات نت به پياده کنندگان اين امکان را خواهد داد که با زبان برنامه نويسي مورد علاقه خود ، اقدام به پياده سازي برنامه ها نمايند. ويژگي ( پتانسيل ) فوق از طريق معرفي CLR)Common Language Runtime )، ميسر شده است . در اين مقاله قصد داريم به بررسي دات نت پرداخته و پتانسيل ها و قابليت هاي آن را تشريح نمائيم .
در جولاي سال 2000 ، شرکت ماکروسافت در کنفرانس پياده کنندگان حرفه اي (PDC ) ، در شهر Orlando ايالت کاليفرنيا ، جزئيات بيشتري از نسل جديد پلات فرم خود ( دات نت ) بمنظور پياده سازي برنامه هاي ويندوز و اينترنت را در اختيار علاقه مندان خصوصا" پياده کنندگان نرم افزار قرار داد . محوريت ابتکار فوق ، بر فريمورک دات نت استواربوده ونشاندهنده يک پلات فرم مناسب بهمراه کتابخانه هاي کلاس گسترده اي است که پتانسيل هاي متعددي را در اختيار قرار مي دهد. يکي از نکات قابل توجه در پلات فرم فوق،استفاده از XML و SOAP بمنظور ارتباط بين نرم افزارها ي موجود در اينترنت ( نرم افزارهاي مبتني بر وب ) ، است . در اين راستا مجموعه اي از محصولات مبتني بر سرويس دهنده با نام سرويس دهندگان Enterprise دات نت، مطرح که بمنزله نسل جديدي از محصولات Backoffice ماکروسافت ، مي باشند.
فريمورک دات نت ، مدلي کاملا" جديد بمنظور برنامه نويسي و بکارگيري نرم افزار را ارائه نموده است. "بيل گيتس "، در سخنراني خود در PDC ، بدين نکته اشاره داشتند که در هر پنج تا شش سال ما شاهد يک تحول عمده در رابطه با پياده سازي نرم افزار بوده ايم . آخرين موارد در اين زمينه به سوئيچ از DOS به ويندوز در سال 1990 و گذر از پياده سازي شانزده بيتي به سي و دو بيتي ( از ويندوز widows 3.x به ويندوز NT/95 ) در اواسط دهه 90 ميلادي ، است.
با معرفي دات نت در PDC ، پياده کنندگان آن را معماري مناسبي براي پياده سازي نرم افزار ( برنامه هاي Desktop و برنامه هاي وب ) مشاهده نمودند . ويژوال استوديو دات نت ، اولين محصول مبتني بر دات نت ماکروسافت بوده که در سال 2001 در اختيار علاقه مندان قرار گرفت . اهميـت دات نت براي ماکروسافت تا بدين حد است که در سال 2001 ، بيش از هشتاد درصد منابع بخش تحقيق و توسعه اين شرکت در رابطه با آن صرف شده است . زبان سي شارپ ، که زباني جديد براي برنامه نويسي در دات نت است بعنوان زبان استاندارد براي پياده سازي داخلي در شرکت ماکروسافت پذيرفته شده است .

يک پلات فرم مناسب براي آينده
دات نت، اولين پلات فرم طراحي شده از صدر تا ذيل با در نظر گرفتن واقعيتي با نام اينترنت است . دات نت از يک ماشين مجازي خاص در اين زمينه استفاده مي نمايد . ماهيت ماشين مجازي فوق ، بگونه اي است که از API ويندوز فاصله و در اين رابطه از يک کتابخانه کلاس استفاده مي نمايد که مي توان به جرات اين ادعا را داشت که تاکنون نظير آن ، ايجاد نشده است . امکان استفاده از زبانهاي متعدد برنامه نويسي ، وجود خواهد داشت .معماري دات نت ، امکان ارتباط بين زبانها را بسادگي فراهم خواهد کرد .دات نت ، يک رويکرد جديد در رابطه با پياده سازي نر م افزار را مطرح نموده است . نگاه به دات نت ، عمدتا" بصورت سيستم هاي توزيع شده است. با استفاده از XML ،امکان اجراي توابع بر روي کامپيوترهاي متفاوت يک سازمان ويا جهان فراهم و جلوه اي زيبا در همياري بمنظور اجراي يک برنامه ، به نمايش در خواهد آمد. از اين منظر ، سيستم ها از سرويس دهندگان تا سيستم هاي بدون کابل ، قادر به اشتراک پلات فرم عمومي يکساني خواهند بود . با استفاده از نسخه هاي دات نت که براي تمام آنها در دسترس خواهد بود، امکان ارتباط مناسب آنها با يکديگر فراهم خواهد شد. دات نت ، بمنظور طراحي و پياده سازي برنامه هاي سنتي نيز راهکارها و امکانات مناسبي را ارائه تا از اين طريق امکان پياده سازي و بکارگيري اين نوع از نرم افزارها ، بسادگي انجام گيرد . برخي از تکنولوژي ها ي ارائه شده در دات نت نظير فرم هاي ويندوز، تلاشي در اين راستا است .

ايده هاي اوليه
از اواخر سال 1995 ، شرکت ماکروسافت توجهي خاص و قابل توجه نسبت به اينترنت نمود . هدف ماکروسافت در اين زمينه پيوند بين پلات فرم ويندوز و اينترنت بود. ماحصل تلاش ماکروسافت در اين زمينه ارائه مدل برنامه نويسي Windiws DNA ، بود . در اين راستا مجموعه اي از ابزارها و تکنولوژي هاي مبتني بر اينترنت ، طراحي و ارائه گرديد . ASP ، از اولين تلا ش هاي ماکروسافت در اين زمينه است . عملا" در اين زمينه ( مطرح شدن اسکريپت ها ي مفسري ) يک برگشت به عقب نسبت به پياده سازي ساختيافته و شي گراء را شاهد بوده ايم . طراحي ، اشکال زدائي و نگهداري چنين کدهاي غير ساختيافته اي مسائل خاص خود را خواهد داشت . ساير زبانها نظير ويژوال بيسيک بصورت موفقيت آميز در رابطه با برنامه نويسي بر روي اينترنت و پلات فرم ماکروسافت استفاده مي گرديد ولي اغلب از آن بمنظور ايجاد عناصري که از طريق ASP ، بخدمت گرفته مي شدند ، استفاده مي گرديد .در اين رابطه تلاش هاي اندکي نيز در جهت ايجاد يک اينترفيس مبتني بر وب بر روي زبان هاي سنتي نظير webclasses در VB ، نيز انجام شد ولي هيچکدام از تلاش هاي فوق ، در سطح گسترده اي مورد استقبال و پذيرش قرار نگرفت . ماکروسافت در صدد حل آشفتگي هاي همراه برنامه هاي ويندوز DNA بود . ويندوز DNA ، تصويري مناسب از يک معماري Three-Tire و مبتني بر COM بود که تکنولوژي ASP در لايه Presentation ، اشياء Bussiness در لايه مياني و يک engine بانک اطلاعاتي رابطه اي در لايه Data ، قرار مي گرفت . مفاهيم همراه DNA ،کامل و بي عيب بود اما در زمان استفاده عملياتي چالش هاي خاص خود را بدنبال داشت . پياده سازي عناصر COM ، مستلزم يک سطح مناسب از دانش و مهارت است و مي بايست زمان زيادي در اين رابطه صرف گردد . بکارگيري نرم افزارهاي DNA ، نيز مسائل خاص خود را داشت ( مسائل مربوط به ورژن ، نصب عناصر و عناصري که با آن مرتبط مي باشند ) .
بموازات تلاش ساير شرکت ها در رابطه با ارائه راهکارهائي خاص بمنظور پياده سازي برنامه ها ي وب ، شرکت ماکروسافت در صدد برطرف نمودن محدوديت هاي مدل برنامه نويسي DNA گرديد.

تولد دات نت
در اوايل سال 1998 ، گروهي از پياده کنندگان نرم افزار در ماکروسافت ، کار خود را بر روي نسخه اي جديد از IIS ( نسخه چهار) ، به اتمام رساندند که داراي چندين ويژگي جديد در رابطه با ASP بود .در اين راستا ، قابليت هاي جديدي بمنظور پياده سازي برنامه هاي وب در ويندوز NT ، فراهم گرديد.گروه پياده کننده داراي ايده هاي متعددي براي اعمال اصلاحات جديد بودند . گروه فوق ، کار خود را بر روي يک معماري جديد براي پياده سازي ايده هاي مطرح شده ، آغاز نمود . اين پروژه ، NGWS)Netx Generation Window Services) ، ناميده گرديد. پس از ارائه ويژوال استوديو شش ، در اواخر سال 1998 ، تلاش براي ايجاد نسخه اي جديد از ويژوال استوديو در دستور NGWS ، قرار گرفت . گروه COM+/MTS در مدل پيشنهادي خود از يک Runtime ، عمومي براي تمامي زبانهاي استفاده شده در ويژوال استوديو ، استفاده نمودند . تلاش افراد درگير در پروژه NGWS ادامه تا در نهايـت ، شرکت ماکروسافت در کنفرانس پياده کنندگان حرفه اي (PDC) ، دات نت را معرفي نمود.

مروري بر فريمورک دات نت
فريمورک دات نت ، تمامي لايه هاي پياده سازي نرم افزار را از سطح سيستم عامل به بالا ، تحت پوشش قرار مي دهد. فريمورک فوق، سطحي مناسب وقدرتمند از ارتباط و همبستگي بين تکنولوژي Presentation ، تکنولوژي هاي Component و تکنولوژي هاي Data را ارائه مي نمايد ( نظير اين ارتباط و همبستگي تاکنون در پلات فرم ويندوز مشاهده نشده است) . معماري فوق ، امکان طراحي و پياده سازي برنامه هاي مبتني بر اينترنت و محيط هاي Desktop ، را بسادگي فراهم و نيازهاي هر گروه از نرم افزارهاي فوق را بخوبي جواب مي دهد . اجزاي اصلي فريمورک دات نت در شکل زير نشان داده شده است .

فريمورک دات نت از لايه پائين با عملياتي نظير مديريت حافظه آغاز و بسمت بالا بمنظور ارائه اينترفيس هاي برنامه ها و کاربران ، دنبال مي شود . در بين لايه ها ، لايه هاي سيستمي ديگر که هر يک داراي پتانسيل هاي خاصي براي پياده کنندگان مي باشند ، وجود دارد.
CLR) Common Language Runtime) ، بمنزله قلب فريمورک دات نت محسوب و engine لازم بمنظور ارائه قابليت هاي کليدي را ارائه مي نمايد . CLR ، شامل عناصر اساسي ديگري نظير: (Common Type System (CTS ، است. علاوه بر مديريت حافظه ، CLR ، مراجعات به اشياء و عمليات Garbage Collection را نيز انجام مي دهد .
در لايه مياني ، ما شاهد نسل جديدي از سرويس هاي استاندارد نظير ADO.NET و XML مي باشيم .سرويس هاي فوق ، تحت کنترل فريمورک بوده و امکان بکارگيري آنها بصورت جامع و استاندارد در بين تمامي زبانها ، فراهم مي گردد . بالاترين لايه ، شامل اينترفيس هاي برنامه و کاربر است . فرم هاي ويندوز ، روشي جديد بمنظور ايجاد برنامه هاي Desktop مبتني بر win32 مي باشند. فرم هاي وب ، يک رابط کاربر مناسب براي برنامه هاي مبتني بر وب را ارائه مي نمايند. سرويس هاي وب ، مکانيزمي بمنظور ارتباط برنامه ها از طريق اينترنت و با استفاده از SOAP ، مي باشد. سرويس هاي وب ، قابل مقايسه با عناصر COM و DCOM بوده با اين تفاوت مهم که در اين راستا از تکنولوژي هاي متعدد اينترنت ، استفاده مي گردد. فرم هاي وب و سرويس هاي وب ، اينترفيس اينترنت دات نت را تشکيل و پياد ه سازي آنان از طريق بخش ديگري در فريمورک دات نت که ASP.NET ، ناميده مي شود ، محقق مي گردد .
پتانسيل هاي موجود در هر لايه فريمورک دات نت ، توسط هر يک از زبان هاي سازگار با دات نت ، قابل استفاده خواهد بود. در پايان لازم است به اين نکته اشاره گردد که در اين رابطه ( فريمورک دات نت ) مي توان از اينترفيس هاي مبتني بر متن ( کاراکتري) نيز استفاده کرد . اين نوع برنامه ها اصطلاحا" Console Application ، ناميده مي شوند .

دربخش دوم اين مقاله به بررسي CLR و جايگاه آن در فريمورک دات نت، خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


بهينه سازي حجم كدهاي جاوااسكريپت ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۵۳ مراجعه امروز
۵۱۶۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بهينه سازي حجم كدهاي جاوااسكريپت
نويسنده : عليرضا گلکاری
موضوع : JavaScript [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۵/۱۳۸۲ اين مقاله ۲۷۵۶ بار مطالعه شده است
۴۴ نفر تا به حال به اين مقاله رای داده اند.
جاوااسكريپت يك زبان مناسب براي انجام عملياتي چون چك كردن مقادير درون فرمها يا درست كردن منو براي حركت درون سايت يا حركت دادن يك شيئ درون صفحه و... است، اما بعضي از طراحان در استفاده از اين گونه كدها تا جايي پيش مي روند كه صفحه انباشته از كدهاي جاوااسكريپت ميشود. خوشبختانه جاوااسكريپت قدرت زيادي در جهت بهينه كردن كدها براي كاهش حجم يا بالا بردن سرعت اجرا به ما ميدهد. با استفاده از تكنيكهايي مثل فشرده سازي و مبهم سازي ميتوان 50% تا 90% حجم فايل جاوااسكريپت را كاهش داد.
چون فايلهاي جاوااسكريپت قسمتي از محتويات صفحات وب هستند، كاهش حجم آنها در كاهش زمان بارگذاري صفحات وب بسيار موثر است. البته در بعضي از مواقع هم افزايش سرعت اجراي كدها مهم است كه بايد اولويت هر كدام را بر اساس نياز انتخاب نمود.

چه زماني بايد كدها را بهينه كرد ؟
اغلب كدهاي جاوااسكريپت آنقدر كوچك هستند كه نيازي به بهينه سازي ندارند. در ابتدا كدهاي شما بايد درست كار كنند و خوانايي لازم را داشته باشند ) با بهره گيري از بهترين الگوريتمها (algorithms)و ساختمان داده هايي (Data Structures) كه براي شما امكان پذير است) آنگاه اگر متوجه شديد كه سرعت بارگذاري صفحات شما پايين است بايد به فكر بهينه سازي كدهاي خود باشيد.

آغاز بهينه سازي
جاوااسكريپت ميتواند از بيشتر تكنيكهاي بهينه سازي كه درCSS و HTML استفاده ميشود بهره ببرد. حذف فضاهاي خالي ، تكه تكه كردن و مبهم سازي ، تركيب چند فايل بصورت يكپارچه، از همه اين ترفندها به صورت تكي يا تركيبي از آنها ميتوان براي كاهش حجم كدها استفاده نمود. در كل با تركيب همه اين تكنيكها با هم، حجم كدها 50% تا 70% كاهش مي يابد. با استفاده ازCSS و HTML مجال بيشتري براي بهينه سازي كدهاي جاوااسكريپت بدست مي آيد، چون شما مي توانيد نام توابع و متغيرها و شي ها را به صورت دلخواه تعيين كنيد.
اگر حجم كدهاي جاوااسكريپت درون صفحه شما خيلي زياد باشد مطمعنا سرعت بارگذاري صفحه وب شما هم به همين اندازه پايين است. چون ارجاع به هر كدام از فايلهاي خارجي موجود در صفحه در قسمت head صفحه وب صورت مي گيرد در نتيجه تمامي فايلها بايد قبل از به نمايش در آمدن هر قسمتي از محتويات صفحه كه درون تگ body قرار دارند بارگذاري شوند، در اين صورت سرعت به نمايش در آمدن محتويات صفحه كاهش مي يابد. به همين دليل حجم فايلهاي .css و .js بسيار مهم است.

خوانايي برنامه
اولين عيبي كه به كدهاي بهينه شده گرفته ميشود پايين بودن خوانايي آنها است. براي حل اين مشكل ميتوان دوفايل جداگانه داشت، يكي فايل بهينه شده، براي استفاده در صفحه وب و ديگري (همان فايل اصلي) كه داراي خوانايي بالايي است، كه براي تغييرات يا مرورهاي بعدي كنار گذاشته مي شود.
بطور مثال دوفايل زير
code.js
code_o.js

كه فايل code_o.js همان فايل بهينه شده و فايل code.js همان فايل اصلي است.

تكنيكهاي بهينه سازي
1- حذف فضاهاي خالي موجود درون كدها
بطور مثال به كد زير دقت كنيد

function printArray(a) {
if (a.length == 0)
document.write(" Array is empty");
else {
for (var i = 0; i < a.length; i++) {
document.write(a[i] + "
");
}
}
}

پس از حذف فضاهاي خالي اينگونه ميشود

function printArray(a){
if(a.length==0)
document.write("Array is empty");
else{
for(var i=0;i
document.write(a[i]+"
");
}
}
}
ويا حتي بهتر از آن

function printArray(a){
if(a.length==0)document.write("Array is empty");
else{for(var i=0;i document.write(a[i]+"
");}}}

2- كوتاه سازي يا حذف توضيحات درون كدها

به كدهاي زير دقت كنيد

function gotoFinList() {

// "SAVE & FINISH"
// this changes the bottom frameset to include a button
//to return to the homepage
// it also submits the form in the main frame that will
// then generate a list of pages
// added during content editing.

پس از كوتاه سازي

function gotoFinList() {

// chgs bottom frameset 2 incl button 2 ret 2 home
// also submits form in main form and gen list of pgs
// added during content editg

بهترين حالت حذف كامل توضيحات است

function gotoFinList() {

در قسمت بعد كه ادامه همين مطلب است تكنيكهاي ديگري در همين زمينه ارائه شده كه خواندن آنها را نيز به شما توصيه ميكنم.

منبع : www.informit.com

کيفيت مقاله :
عالی خوب متوسط ضعيف


بهينه سازي حجم كدهاي جاوااسكريپت ( قسمت دوم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۵۶ مراجعه امروز
۵۱۷۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بهينه سازي حجم كدهاي جاوااسكريپت ( قسمت دوم)
نويسنده : عليرضا گلکاری
موضوع : JavaScript [image] نسخه قابل چاپ
تاريخ نشر : ۱۴/۵/۱۳۸۲ اين مقاله ۱۶۳۴ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.
در اين قسمت مطالب قبلي را ادامه ميدهيم به دوستان عزيز خواندن قسمت اول اين مطلب را توصيه ميكنم

تكنيكهاي بهينه سازي
3- يكي از راههاي اضافه كردن كدهاي جاوااسكريپت به صفحات وب كه اغلب استفاده ميشود نوشتن كدهاي جاوااسكريپت در يك فايل جداگانه و سپس فراخواني آن در قسمت head صفحه است. مانند مثال زير

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title> Test Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script language="JavaScript" src="code_o.js"> </script>
</head>
<body>
. . .
</body>
</html>

در اين صورت قبل از اينكه محتويات صفحه مورد نظر ما بارگذاري شود بايد فايل .js مورد نظر بطور كامل دريافت شود كه اين عمل باعث كاهش سرعت نمايش صفحات ميشود.

در صورتي كه كدهاي جاوااسكريپت مورد نظر ما خروجي خاصي براي نمايش درون صفحه نداشته باشند ميتوان بارگذاري كدها را به تاخير انداخت، بطور مثال كدهايي كه مقادير درون يك فرم وب را اعتبار سنجي ميكند. براي اين كار ميتوان از خصوصيت defer در تگ <script> بصورت زير استفاده نمود. البته اين خصوصيت فقط براي مرورگر IE (Internet explorer) قابل استفاده است.

<script language="JavaScript" src="code_o.js" defer="defer"> </script>

در اين صورت مرورگر بدون توجه به فايل جاوااسكريپت محتويات صفحه را بارگذاري ميكند و در نهايت به سراغ فايل .js ميرود.

يك راه بهتر براي صفحاتي كه داراي ترافيك بالايي هستند استفاده از SSI (Server Side Include) است. كار اين دستور مثل اين است كه كدها را مستقيما در جاي مورد نظر اضافه كرده باشيم. اين كار باعث ميشود كه حجم درخواستهاي مرورگر از سرويس دهنده كاهش يابد.

بطور مثال :

<script type="text/javascript">
<!--#include virtual="code_o.js" -->
</script>
</body>

4- بعضي از طراحان وب براي سازگاري كدهاي جاوااسكريپت با مرورگرهاي مختلف (مثل IE 4+ يا Netscape 4+ ويا DOM-based browsers) براي هر مرورگر كدهاي خاص همان مرورگر را استفاده ميكنند در اين حالت ميتوان بجاي نوشتن همه كدها در يك فايل حجيم و بزرگ، كدهاي مربوط به هر مرورگر را در فايلهاي جداگانه اي قرار داد (بطور مثال ie4.js و ns4.js و dom.js) و فقط از كدهاي مورد نياز استفاده كرد.
در كدهاي زير پس از تشخيص نوع مرورگر فقط فايل مربوط به همان مرورگر بارگذاري ميشود.

dom = (document.getElementById) ? true : false;
ns4 = (document.layers) ? true : false;
ie = (document.all) ? true : false;
ie4 = ie && !dom;

var src = '';
if (dom) src = '/dom.js';
else if (ie4) src = '/ie4.js';
else if (ns4) src = '/ns4.js';
document.write("<script src=" + src + "> <\/script> ");

5- كوتاه سازي و مختصر سازي كدها
با استفاده از نامهاي خلاصه سازي شده براي توابع و متغيرها و اشياء ميتوان حجم كدها را تاحد زيادي كاهش داد، البته براي اين كار بايد كدهاي HTML درون صفحه را نيز تصحيح كرد، كه اين كار با تغيير نام class و id مربوط به تگهاي مختلف درون صفحه امكان پذير است.
بطور مثال :

function validateParseAndEmail()
var firstButton

به كدهاي زير تبديل شده اند

function email()
var button1

و يا بهتر از آن كدهاي زير

function e()
var b

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

خلاصه مطلب
با كاهش حجم فايلهاي جاوااسكريپت مورد استفاده سرعت بارگذاري صفحات وب نيز افزايش ميابد.
بطور كلي با روشهاي زير ميتوان حجم كدهاي جاوااسكريپت مورد استفاده در صفحات وب را تا حد زيادي كاهش داد:

- حذف فضاهاي خالي درون كدها
- حذف و يا خلاصه سازي توضيحات درون كدها
- استفاده از اسامي خلاصه شده براي متغيرها و توابع

اغلب تكنيكهاي ذكر شده در اينجا براي بهينه سازي حجم فايلهاي HTML و يا CSS نيز قابل استفاده هستند.

منبع : www.informit.com

کيفيت مقاله :
عالی خوب متوسط ضعيف


انواع داده های Windows و دلفی ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱۲ بيننده در حال حاضر
۳۹۳ مراجعه امروز
۴۲۰۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
انواع داده های Windows و دلفی
نويسنده : مديريت سايت
موضوع : Delphi [image] نسخه قابل چاپ
تاريخ نشر : ۱۷/۵/۱۳۸۲ اين مقاله ۲۶۹۴ بار مطالعه شده است
۳۴ نفر تا به حال به اين مقاله رای داده اند.
سلام حتما تا به حال چندين بار سعي کرده ايد که از توابع API در دلفي استفاده کنيد ولي هميشه در استفاده از توابع API مشکل داشته ايد. يکي از اين مشکلات نبودن مثالهاي استفاده از توابع API براي دلفي است. از اينرو تمامي منابع موجود فقط به معرفي پارامترهاي کلي و مقادير بازگشتي مي پردازند. مثلا وقتي در يک منبع گفته شده که نوع ورودي اين تابع از نوع UCHAR هست اين به چه معني است. ما که در دلفي چنين نوعي نداريم. بله شايد درست حدس زده باشيد , اين انواع براي ويندوز هستند و دلفي انواع ديگري با آنها برابري مي کنند. در ذيل به معرفي اين انواع و نوع برابر آنها در دلفي مي پردازم. اميدوارم که مورد استفاده دوستان قرار بگيرد.
نوع ويندوز | نوع مشابه در دلفي | توضيحات
LPSTR | PAnsiChar; | اشاره گر به رشته
LPCSTR | PAnsiChar; | اشاره گر به رشته
DWORD | Integer; | عدد صحيح
BOOL | LongBool; | مقدار منطقي
PBOOL | ^BOOL; | يک اشاره گر به يک متغيير منطقي
Pbyte | ^Byte; | يک اشاره گر به يک متغيير از نوع بايت
PINT | ^Integer; | يک اشاره گر به يک متغيير از نوع عدد
Psingle | ^Single; | يک اشاره گر به يک متغيير از نوع سينگل
PWORD | ^Word; | يک اشاره گر به متغيير 16 بيتي
PDWORD | ^DWORD; | يک اشاره گر به متغيير 32 بيتي
LPDWORD | PDWORD; | يک اشاره گر به متغيير 32 بيتي
UCHAR | Byte; | يک متغيير 8 بيتي - از اين متغيير مي توان براي ذخيره اطلاعات يک کاراکتر استفاده کرد
PUCHAR | ^Byte; | اشاره گر به متغيير 8 بيتي
SHORT | Smallint; | عدد صحيح 16 بيتي
UINT | Integer; | عدد صحيح 32 بيتي.
PUINT | ^UINT; | اشاره گر به يک عدد صحيح 32 بيتي
ULONG | Longint; | عدد صحيح 32 بيتي
PULONG | ^ULONG; | اشاره گر به عدد صحيح 32 بيتي
PLongint | ^Longint; | اشاره گر به عدد 32 بيتي
PInteger | ^Integer; | اشاره گر به يک متغيير 32 بيتي
PSmallInt | ^Smallint; | اشاره گر به يک متغيير 16 بيتي
PDouble | ^Double; | اشاره گر به يک متغيير از نوع دابل
LCID | DWORD; | يک معين کننده داخلي
LANGID | Word; | يک معين کننده زبان
THandle | Integer; | يک نوع عددي به نام هندل ( دستگيره) - اين نوع در اکثر توابع مورد استفاده قرار مي گيرد
PHandle | ^THandle; | يک اشاره گر به يک هندل
WPARAM | Longint; | يک پارامتر 32 بيتي براي توابع
LPARAM | Longint; | يک پارامتر 32 بيتي براي توابع
LRESULT | Longint; | يک مقدار 32 بيتي بازگشتي از توابع
HWND | Integer; | يک هندل براي يک پنجره - با استفاده از اين هندل مي توان به پنجره ها دستيابي پيدا کرد
HHOOK | Integer; | يک هندل براي يک دستگيره عملياتي
ATOM | Word; | يک شماره ايندکس براي اشاره به جدول اتمها
HGLOBAL | THandle; | يک اشاره گر به يک قسمت از حافظه,
HLOCAL | THandle; | يک اشاره گر به يک قسمت از حافظه,
FARPROC | Pointer; | يک اشاره گر به يک رويه
HGDIOBJ | Integer; | يک اشاره گر به يک آبجکت GDI
HBITMAP | Integer; | يک هندل به يک بيت مپ
HBRUSH | Integer; | يک هندل به يک براش
HDC | Integer; | يک هندل براي يک دستگاه
HENHMETAFILE | Integer; | يک هندل براي متا فايلها
HFONT | Integer; | يک هندل براي فونت
HICON | Integer; | يک هندل براي يک آيکون
HMENU | Integer; | يک هندل براي يک منو
HMETAFILE | Integer; | يک هندل براي يک متا فايل
HINST | Integer; | يک هندل براي يک آبجکت
HMODULE | HINST; | يک هندل براي يک ماژول
HPALETTE | Integer; | يک هندل براي جدول رنگ
HPEN | Integer; | يک هندل براي قلم
HRGN | Integer; | يک هندل براي اشکال هندسي
HRSRC | Integer; | يک هندل براي منابع ويندوز
HKL | Integer; | يک هندل براي حالت صفحه کليد
HFILE | Integer; | يک هندل براي يک فايل باز
HCURSOR | HICON; | يک هندل براي يک اشاره گر موشواره
COLORREF | DWORD; | يک نوع رنگ از نوع عددي

کيفيت مقاله :
عالی خوب متوسط ضعيف


بهينه سازي حجم كدهاي جاوااسكريپت ( 3 ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۵۹ مراجعه امروز
۵۱۷۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بهينه سازي حجم كدهاي جاوااسكريپت ( 3 )
نويسنده : عليرضا گلکاری
موضوع : JavaScript [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۵/۱۳۸۲ اين مقاله ۱۶۰۲ بار مطالعه شده است
۱۱ نفر تا به حال به اين مقاله رای داده اند.

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

Math.random() : يك عدد اتفاقي بين 0 و 1 را برميگرداند. بطور مثال عبارت زير يك عدد اتفاقي بين 0 و 25 را توليد ميكند.
25 * Math.random();

Math.round() : مقدار گرد شده يك عدد اعشاري را باز ميگرداند.
String.fromCharCode() : معادل كاراكتر ascii يك عدد را برميگرداند.
بطور مثال كد كاراكتر a عدد 97 است. در اين صورت خروجي تابع فوق با عدد 97 حرف a خواهد بود
String.fromCharCode(97) // return “a” character

? : : يك دستور شرطي است كه ابتدا عبارت قبل از علامت سئوال (?) را چك ميكند در صورتي كه مقدار آن true يا عددي غير صفر باشد خروجي آن مقدار قبل از علامت : است و در صورتي كه مقدار عبارت قل از ? false يا مقدار عددي صفر باشد خروجي آن مقدار بعد از علامت : است. بطور مثال
var exp1;
var temp="";

exp1 = true;
temp = exp1 ? "ON" : "OFF"
document.writeln (temp); // write ON

exp1 = false;
temp = exp1 ? "ON" : "OFF"
document.writeln (temp); //write OFF

+= :
اين دستور عمليات جمع و انتساب را باهم انجام ميدهد. مثلا هر دو عبارت زير با هم معادلند.
str = str + "end. "
str += "end. "

بعد از توضيحات كلي، كدهاي مروط به تابع مورد نظر را مي نويسيم.
function makepass(){
var str = "";
var len = 10;
var randomselect;
for (i = 1; i <= len; i++){
randomselect = Math.round(Math.random());
if (randomselect != 0)
charcode = Math.round(25*Math.random())+97;
else
charcode = Math.round(9*Math.random())+48;
str = str + String.fromCharCode(charcode);
}
return (str);
}

كار برنامه به اين صورت است كه در يك حلقه تكرار كه به تعداد طول كلمه عبور تكرار ميشود، در هر بار تكرار يك كاراكتر از كل كلمه عبور ايجاد ميشود، به اين صورت كه ابتدا يك عدد 0 يا 1 به صورت اتفاقي ايجاد ميشود اين عدد در متغير randomselect قرار مي گيرد. حال اگر عدد اتفاقي توليد شده مخالف 0 يعني 1 بود از يك حرف براي ايجاد كاراكتر فعلي كلمه عبور استفاده ميشود و در غير اين صورت از يك عدد در ايجاد كاراكتر فعلي كلمه عبور استفاده ميشود.
اما نحوه ايجاد يك كاراكتر يا يك عدد اتفاقي براي كلمه عبور به اين صورت است كه ابتدا يك عدد اتفاقي در محدوده مورد نظر ايجاد مي كنيم مثلا براي ايجاد يك حرف از حروف انگليسي (26 حرف داريم) به يك عدد اتفاقي بين0 تا 25 احتياج داريم حال در صورتي كه اين عدد را با عدد 97 كه كد حرف a است جمع كنيم يك حرف به صورت اتفاقي ايجاد كرده ايم .
در نهايت كاراكترهاي ايجاد شده را در كنار هم مي گذاريم تا كلمه عبور ساخته شود.

حال به سراغ بهينه سازي كدها مي رويم در اين مرحله از عبارت ? : بجاي if …else استفاده مي كنيم كدها به اين صورت در مي آيند.
function makepass_1(){
var str = "";
var len = 10;
var randomselect;
for (i = 1; i <= len; i++){
randomselect = Math.round(Math.random());
charcode = randomselect ? Math.round(25*Math.random())+97 : Math.round (9*Math.random())+48;
str = str + String.fromCharCode(charcode);
}
return (str);
}

بعد از آن بايد در صورت امكان بجاي متغييرها مقادير آنها را بكار بريم. كدها به صورت زير تغيير پيدا ميكنند.

function makepass_2(){
var str = "";
var len = 10;
for (i = 1; i <= len; i++){
charcode = Math.round (Math.random()) ? Math.round (25*Math.random())+97 : Math.round (9*Math.random())+48;
str = str + String.fromCharCode(charcode);
}
return (str);
}

در اين قسمت بجاي اينكه ابتدا يك عدد اتفاقي ايجاد كنيم و در يك متغير قرار دهيم و در نهايت مقدار آن متغير را به معادل ascii آن تبديل كنيم همه اين كارها را به صورت يكجا انجام مي دهيم. كدهاي زير ايجاد خواهند شد.

function makepass_3(){
var str = "";
var len = 10;
for (i = 1; i <= len; i++){
str = str + Math.round(Math.random()) ? String.fromCharCode (Math.round (25*Math.random())+97) : String.fromCharCode (Math.round (9*Math.random())+48);
}
return (str);
}

كدهاي نهايي به اين صورت در مي آيند.
function makepass_4(){
var str = "";
for (i = 1; i <= 10; i++)
str += Math.round(Math.random()) ? String.fromCharCode (Math.round (25*Math.random())+97) : String.fromCharCode (Math.round (9*Math.random())+48);
return (str);
}

اگر دقت كرده باشيد تا اينجا با روشهايي غير از روشهايي كه در بخشهاي قبلي بيان شده بودند حجم كدها را بهينه كرديم. البته همين تغييرات باعث كاهش قابل ملاحظه اي از حجم كدهاي جاوااسكريپت مورد نظر ما شد. اكنون كه نوشتن و ايجاد تغييرات بر روي كدها تمام شده ميتوان كد نهايي را با استفاده از قواعدي كه قبلا بيان شده بودند دوباره بهينه كرد. كه در نهايت كدهاي زير ايجاد خواهند شد.
function mp(){
var s="";
for (i=1;i<=10;i++)
s+=(Math.round(Math.random()))?String.fromCharCode(Math.round(25*Math.random())+97):String.fromCharCode(Math.round(9*Math.random())+48);
return (s);
}

کيفيت مقاله :
عالی خوب متوسط ضعيف


با کرم بلستر بيشتر آشنا شويم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۳۷ مراجعه امروز
۴۹۵۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
با کرم بلستر بيشتر آشنا شويم
نويسنده : شرکت سخا روش
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۵/۱۳۸۲ اين مقاله ۵۳۶ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

کرم جديدي که W32.Blaster نا ميده مي شود طي روزهاي اخير بشدت گسترش و توانسته است تعدادي بسيار زيا دي از کامپيوترها را آ لوده نمايد . کرم فوق، داراي اسامي ديگري نظير : W32/Lovsan.worm ، WORM_MSBLAT.A و Win32.Posa.Worms مي باشد.

تاريخ کشف : يازدهم اگوست 2003 . کامپيوترهائي که قبلا" از Patch امنيتي MS03-026 استفاده نموده اند در مقابل ويروس فوق، مصونيت خواهند داشت .
نحوه توزيع : توزيع کرم فوق، از طريق پورت هاي باز RPC انجام مي شود . سيستم ها پس از آلودگي به ويروس فوق، راه اندازي مجدد شده و يا فايل msblase.exe بر روي آنان وجود خواهد داشت .
جرئيات فني : RPC)Remote Procedure Call) ، پروتکلي است که توسط سيستم عامل ويندوز استفاده مي گردد . RPC ، يک مکانيزم ارتباطي را ارائه و اين امکان را فراهم مي نمايد که برنامه در حال اجراء بر روي يک کامپيوتر قادر به اجراء کد موجود بر روي يک سيستم از راه دور گردد . پروتکل RPC از پروتکل OSF(Open Software Foundation) مشتق شده و ماکروسافت امکانات اضافه اي را به آن اضافه نموده است . در بخشي از پروتکل فوق يک نقطه آسيب پذير وجود داشته که در ارتباط با پيام هاي مبادله شده بر روي TCP/IP است . مشکل بوجود آمده ناشي از عدم بررسي ( برخورد ) مناسب پيام هاي ناقص است . اين ضعف امنيتي باعث تاثيرگذاري يک اينترفيس DCOM)Distributed Component Object Model) با RPC مي گردد( گوش دادن به پورت هاي فعا ل RPC ). ايترفيس فوق ، باعث بررسي درخواست هاي فعال شي DCOM ارسال شده توسط ماشين سرويس گيرنده براي سرويس دهنده مي گردد . يک مهاجم که امکان استفاده موفقيت آميز از ضعف موجود را کسب نمايد، قادر به اجراء کد با مجوزهاي محلي سيستم بر روي يک سيستم آسيب پذير ، خواهد بود. در چنين حالتي مهاجم ، قادر به انجام هر نوع عملياتي بر روي سيستم خواهد بود . نصب برنامه ها ، مشاهده تغييرات ، حذف فايل ها و ايجاد account هاي جديد بهمراه تمامي مجوزهاي مربوطه ، نمونه هائي در اين رابطه مي باشد .بمنظور استفاده از ضعف موجود، يک مهاجم درخواستي خاص بر روي کامپيوتر از راه دور و از طريق پورت هاي مشخص شده RPC را ارسال مي نمايد .
عملکرد ويروس :کرم بلستر ، بصورت تصادفي يک دامنه از آدرس هاي IP را پويش ( بررسي ) تا سيستم مورد نظر خود را براي آسيب رساني از طريق پورت 135 ، انتخاب نمايد . کرم فوق ، از ضعف موجود در رابطه با DCOM RPC استفاده مي نمايد . ( اشاره شده در patch شماره MS03-026 ) . زمانيکه کد مربوطه براي سيستمي ارسال گرديد در ادامه اقدام به download و اجراي فايل MSBLATE.EXE از يک سيستم راه دور و از طريق HTTP مي نمايد . پس از اجراء ، کليد ريجستري زير ايجاد خواهد شد :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
Run "windows auto update" = msblast.exe I just want to say LOVE YOU SAN!! bill

علائم آلودگي سيستم : برخي از کاربران ممکن است هيچگونه علائمي مبني بر آلودگي سيستم خود را مشاهده ننمايند . در رابطه با کاربراني که از سيستم ويندوز XP و يا Server 2003 استفاده مي نمايند ، سيستم پس از لحظاتي و بدون اينکه کاربر عمليات خاصي را انجام دهد، راه اندازي مجدد مي گردد . در رابطه با کاربراني که از ويندوز NT 4.0 و يا ويندوز 2000 ، استفاده مي نمايند ، سيستم رفتاري غيرپاسخگو را خواهد داشت ( عدم واکنش صحيح در رابطه با برخي از رويداد ها و ارائه خدمات طبيعي ) . کاربران در اين رابطه ممکن است موارد زير را نيز مشاهده نمايند :

وجود فايل هاي غيرمتعارف TFTP

وجود فايل msblast.exe در دايرکتوري Windows System32

سيستم هاي آسيب پذير : کاربراني که داراي يکي از سيستم هاي زير مي باشند ، در معرض آلودگي خواهند بود :

ويندوز NT 4.0

ويندوز 2000

ويندوز XP

ويندوز 2003

سيستم هاي مصون : در صورتيکه وجود شرايط زير ، کامپيوتر مورد نظر در مقابل عملکرد کرم بلستر مصون خواهد بود :

در صورتيکه از ويندوز 95 ، 98 ، SE و يا ME استفاده مي گردد .

در صورتيکه patch امنيتي اشاره شده در MS03-026 بر روي سيستم نصب شده باشد .

Patch هاي موجود : براي دريافت patch مربوطه مي توان از آدرس هاي زير استفاده کرد :

Windows NT 4.0

Windows NT 4.0 Terminal Server Edition

Windows 2000

Windows XP 32 bit Edition

Windows XP 64 bit Edition

Windows Server 2003 32 bit Edition

Windows Server 2003 64 bit Edition

سوالات متداول در رابطه با کرم بلستر :

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

DCOM چيست ؟ پروتکلي است که امکا ن ارتباط مستقيم بين عناصر نرم افزاري موجود در يک شبکه با يکديگر را فراهم مي نمايد.پروتکل فوق، قبلا" OLE Network ناميده مي شد.

RPC چيست ؟ پروتکلي است که يک برنامه مي تواند با استفاده از آن درخواست سرويسي را از برنامه موجود بر روي کامپيوتر ديگر در شبکه داشته باشد . RPC ، تسهيلات و امکانات لازم در خصوص ارتباط بين برنامه ها را فراهم مي نمايد . برنامه هائي که از RPC استفاده مي نمايند ضرورتي به آگاهي از پروتکل هاي شبکه که ارتباطات را حمايت مي نمايند ، نخواهند داشت . در RPC ، برنامه درخواست کننده سرويس گيرنده بوده و برنامه ارائه دهنده سرويس ، سرويس دهنده مي باشد .

سرويس هاي اينترنت COM و RPC بر روي HTTP چه چيزي مي باشند ؟ سرويس هاي اينترنت COM معرفي شده، پروتکل حمل DCOM را در ارتباط با TCP ارائه و اين امکان را فراهم مي نمايد که DCOM ، عمليات خود را از طريق پورت 80 پروتکل TCP انجام دهد . سرويس هاي اينترنت COM و RPC بر روي HTTP ، اين امکان را براي يک سرويس گيرنده و سرويس دهنده فراهم مي نمايند که قادر به برقراري ارتباط با يکديگر در صورت حضور و يا فعال بودن اکثر سرويس دهندگان پروکسي و يا فايروال باشند .

با استفاده از چه روشي مي توان از نصب سرويس هاي اينترنت COM بر روي سيستم ، اطمينان حاصل کرد؟ بهترين روش در اين رابطه جستجو براي يافتن فايل rpcproxy.dll است . در صورتيکه فايل فوق پيدا گردد ، نشاندهنده نصب سرويس هاي اينترنت COM بر روي ماشين است .

اشتباه ماکروسافت در رابطه با پياده سازي RPC چيست ؟ در بخشي از RPC شکافي وجود داشته که در ارتباط با پيام هاي مبادله شده از طريق TCP/IP است . علت بروز مشکل ،عدم برخورد مناسب با پيام هاي ناقص است . مشکل فوق، باعث تاثيرات خاصي در ارتباط با اينترفيس DCOM شده و زمينه گوش دادن به پورت 135 مربوط به TCP/IP ، فراهم مي گردد . امکان دستيابي از طريق پورت هاي 139 ، 445 و 593 نيز وجود خواهد داشت . با ارسال يک پيام ناقص RPC ، يک مهاجم مي تواند باعث بروز اشکال در سرويس دهي توسط سرويس RPC بر روي يک ماشين گردد .

يک مهاجم با استفاده از ضعف موجود قادر به انجام چه عملياتي خواهد بود ؟ مهاجمي که قادر به استفاده موفقيت آميز از ضعف موجود باشد ، مي تواند کدهائي را با مجوزهاي سيستم محلي بر روي يک سيستم اجراء نمايد . مهاجم ، قادر به انجام هر نوع عملياتي بر روي سيستم نظير : نصب برنامه ها ، مشاهده تغييرات ، حذف فايل ها و ايجاد account هاي جديد با مجوزها و اختيارات کامل، خواهد بود.

يک مهاجم به چه صورت از ضعف فوق ، استفاده مي نمايد ؟ يک مهاجم ، بمنظور جستجو و استفاده از اين نقص امنيتي مي تواند با برنامه ريزي يک ماشين که قادر به ارتباط با يک سرويس دهنده آسيب پذير از طريق RPC باشد ، ارتباطي را برقرار و در ادامه يک نوع پيام خاص RPC ناقص را ارسال نمايد . دريافت چنين پيامي باعث بروز اشکال در ماشين آسيب پذير شده و بدين ترتيب ماشين فوق ، قادر به اجراء کد دلخواه و مورد نظر مهاجم خواهد بود .

چه کساني در معرض اين آسيب هستند ؟ هر کاربري که قادر به عرضه يک درخواست TCP بر روي يک اينترفيس RPC بر روي يک کامپيوترآسيب پذير باشد ، مي تواند در معرض آسيب فوق باشد . با توجه به اينکه درخواست هاي RPC بصورت پيش فرض بر روي تمامي نسخه هاي ويندوز فعال ( on) مي باشند ، هر کاربري که قادر به برقراري ارتباط با يک کامپيوترآسيب پذير باشد ، مي تواند در معرض اين آسيب قرار گيرد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه سرويس های وب - بخش پنجم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۹۹۹ مراجعه امروز
۴۸۱۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه سرويس های وب - بخش پنجم
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۵/۱۳۸۲ اين مقاله ۵۱۴ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

آنچه تاکنون گفته شده است :
بخش اول : مفاهيم اوليه برنامه هاي توزيع شده و چالش هاي مربوطه
بخش دوم : بررسي دو نمونه معماري در رابطه با برنامه هاي توزيع شده
بخش سوم : تاثير استانداردهاي وب در فرآيند طراحي و پياده سازي برنامه هاي توزيع شده
بخش چهارم : بررسي مفاهيم اوليه سرويس هاي وب
و اما در اين بخش ، به بررسي گزينه هاي دات نت دررابطه با سرويس هاي وب خواهيم پرداخت .

بمنظور طراحي و پياده سازي برنامه هاي توزيع شده ، از گزينه هاي متعددي استفاده مي گردد . انتخاب هر گزينه مبتني بر مجموعه اي از پارامترهاي متفاوت است . تمامي تکنولوژي هاي موجود در اين زمينه را مي توان بر اساس خصوصيات مربوطه در يک پشته (Stack) سازماندهي کرد. در بالاترين سطح اين پشته، تکنولوژي SOAP و در پايين ترين سطح ، پروتکل TCP/IP قرار مي گيرد. انتخاب تکنولوژي موجود در سطوح پايين تر ، افزايش کارآئي را بدنبال خواهد داشت . در چنين مواردي پياده کنندگان مي بايست اطلاعات لازم و مناسبي از تکنولوژي انتخابي را داشته باشند . بموازات حرکت در سطوح پائين تر ، سطح اطلاعات و دانش افزايش و پياده کنندگان مي بايست در اين زمينه مهارت هاي خاصي را داشته باشند . بدين ترتيب استفاده از SOAP نسبت به TCP/IP ، به دانش و مهارت هاي بمراتب کمتري نياز خواهد داشت ( نظير انتخاب زبان ماشين و يا يک زبان برنامه نويسي سطح بالا براي برنامه نويسي ).
سرويس هاي وب تحت تاثير بالاترين سطح در پشته تکنولوژي قرار دارند .با توجه به سطح کنترلي که برنامه به آن نيار خواهد داشت ، مي توان ، در رابطه با پياده سازي برنامه با استفاده از تکنولوژي هاي موجود در يک سطح پايين تر پشته تکنولوژي، اتخاذ تصميم نمود. در تئوري ، پياده سازي يک را ه حل در يک سطح پائين تر پشته تکنولوژي ، افزايش کارائي را بدنبال خواهد داشت . علت اين امر ، عدم تحميل لود و شرايط خاص ساير تکنولوژي هاي موجود در سطوح بالاتر بر راه حل انتخابي است .در عمل ، اغلب پياده کنندگان داراي مهارت هاي لازم بمنظور پياده سازي يک راه حل مناسب (توسعه پذير، نگهداري آسان ) با استفاده از يکي از تکنولوژي هاي موجود در يکي از سطوح پايين تر ، نمي باشند . حتي در صورتيکه پياده کنندگان داراي مهارت لازم در اين زمينه باشند ، اکثر آنها داراي زمان لازم بمنظور پياده سازي چنين راهکارها و را ه حل هائي نخواهند بود.
دات نت ، در اين راستا گزينه هاي متعددي را بغير از سرويس هاي وب که براي پياده سازي برنامه هاي توزيع شده در دسترس خواهد بود، ارائه مي نمايد. در ادامه به برخي از گزينه ها ي موجود ، اشاره مي گردد.

Stand alone Listener
اولين گزينه در رابطه با يک سرويس وب ، Stand-alone Listener است . Stand alone listener ، برنامه اي است که يک پورت شناخته شده را مانيتور و پاسخ لازم را در رابطه با پيام هاي دريافتي از پورت فوق ، از خود نشان خواهد داد . بمنظور پياده سازي روش فوق ، از گزينه هاي متفاوتي استفاده مي گردد :

مي توان از يک فيلتر نوشته شده ISAPI) Internet Server Application Programming Interface) ، بمنظور برخورد با تمامي ارتباطات سطوح پائين مبتني بر سوکت و پياده سازي پروتکل مورد نياز برنامه listener ، استفاده کرد .
فيلترهاي SOAP ,ASP و ATL) Microsoft Active Template Library Server) ، نمونه هائي در اين زمينه مي باشند . در ادامه مي توان ، پتانسيل ها و عمليات مورد نظر خود در listener ، از طريق يک کلاس ++C و يا صفحات ASP ، پياده سازي کرد .

مي توان يک فيلتر ISAPI را پياده سازي که پاسخگوي برخورد با درخواست ها ئي براي مستنداتي با يک انشعاب خاص بوده و در ادامه محتويات يک درخواست HTTP را decode ، نمايد .

مي توان از يک برنامه سرويس دهنده بمنظور ماننيتور نمودن يک پورت شناخته شده ، استفاده بعمل آورد . در چنين حالتي محدود به استفاده از پروتکل هاي HTTP و يا SOAP ، نخواهيم بود . بمنظور نوشتن چنين برنامه هائي ، مي توان از namespace با نام System.Net مربوط به فريمورک دات نت استفاده کرد .

گزينه هاي فوق ، جامع نبوده ولي برخي از رويکردهاي موجود بمنظور پياده سازي Stand -alone Listeners را ارائه مي نمايد .

Custom protocol handlers
در صورتيکه پروتکل HTTP ، پاسخگوي نياز هاي موجود نباشد ، مي توان يک هندلر خاص براي يک پروتکل سفارشي را پياده سازي کرد .بدين منظور از کلاس هاي WebRequest و WebResponse که در فريمورک دات نت وجود دارند ، استفاده مي گردند . در اين رابطه مي توان در زمان استفاده از پروتکل سفارشي ايجاد شده ، همچنان از Serailization دات نت استفاده گردد ولي مي بايست به اين نکته توجه گردد که در اين رابطه امکان پتانسيل هاي object -remoting در دسترس نخواهند بود .

NET Remoting .
در صورتيکه به يک زيرساخت مبتني بر عناصر از راه دور، نياز وجود داشته باشد ولي به سطح ارتباطاتي که سرويس هاي وب ارائه مي نمايند ، نياز نباشد ، مي توان از NET Remoting . ، استفاده کرد . namespace با نام Sysyem.Runtime.Remoting ، کلاس هاي لازم در خصوص فعال نمودن اشياء از راه دور ، ارائه آرگومان ها بصورت مقدار و يا مرجع ، فراخواني غير همزمان و ساير امکانات مورد نياز را ارائه مي نمايد .

NET Remoting . در مقابل سرويس هاي وب
در نگاه اول ( مشاهده ظاهري ) ، NET Remoting. و سرويس هاي وب بسيار مشابه با يکديگر مي باشند.در حقيقت ، سرويس هاي وب بر اساس زير ساخت NET Remoting . ايجاد مي گردند . در زمان انتخاب تکنولوژي مورد نظر ، به موارد زير مي بايست دقت گردد :

از NET Remoting . ، در موارديکه برنامه هاي موجود در دو سمت نقطه تماس ، تحت کنترل يک سازمان مشابه است ، استفاده گردد .

از سرويس هاي وب در موارديکه بخش سمت سرويس گيرنده، خارج از کنترل يک سازمان خاص است ، استفاده گردد .

ASP و برنامه هاي ميزبان
در زمان استفاده از سرويس هاي وب با مسائل متعددي مواجه خواهيم شد . مراکز ASP و ميزبان نمودن برنامه ها ي مورد نظر ، نمونه اي در اين زمينه است . ASP) Application Service Providers) ، برنامه ها را host و در ادامه آنها را براي مشترکين اجاره خواهد داد.از منظر يک مشترک ، ويژگي هاي برنامه هاي host ، بشرح زير مي باشند :

برنامه اي که ASP آن را host نموده بمنزله يک portal ، در نظر گرفته خواهد شد .

برنامه اي که ASP آن را host نموده در يک محيط ايزوله شده وجود ، خواهد داشت .

هر مشترک داراي نمونه اختصاصي خود از برنامه است .

مشترکان داده ئي را با ساير مشترکان به اشتراک نخواهند گذاشت .

از ديدگاه يک ASP ، تمام برنامه هاي host شده مي بايست شرايط زير را تامين نمايند:

برنامه ها مي بايست بصورت جداگانه براي هر مشترک ، پيکربندي گردند ( حتي بر روي سخت افزار مشترک ) . تنظيمات مربوط به امنيت ، نمونه اي در اين رابطه است .

برنامه ها مي بايست داراي مکانيزمهاي لازم براي سنجش ميزان استفاده از يک برنامه باشند ( مسائل مالي )

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه پروتکل TCP/IP ( بخش چهارم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۰۲ مراجعه امروز
۴۸۱۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه پروتکل TCP/IP ( بخش چهارم )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۵/۱۳۸۲ اين مقاله ۶۳۴ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

آنچه تاکنون گفته شده است :
بخش اول : معرفي پروتکل TCP/IP بهمراه لايه هاي آن
بخش دوم : بررسي پروتکل هاي موجود در TCP/IP
بخش سوم : بررسي برنامه ها و ابزارهاي کمکي در رابطه با پروتکل TCP/IP
در اين بخش به بررسي Name Resoulation ، خواهيم پرداخت . ماحصل فرآيند فوق، يافتن آدرس IP مپ (map) شده به يک نام است ( در صورتيکه عمليات با موفقيت انجام گردد ) . تمامي اسامي User-friendly ، مي بايست به آدرس معادل IP مربوطه مپ تا زمينه ارتباط بين دستگاههاي متقاضي در يک شبکه مبتني بر TCP/IP ، فراهم گردد .

پروتکل TCP/IP کامپيوترهاي مبداء و مقصد را از طريق آدرس IP آنان ، شناسائي مي نمايد . کاربران ، تمايل بيشتري براي بخاطرسپردن و استفاده از اسامي ، نسبت به اعداد ( آدرس هاي IP ) را دارند . براي آدرس دهي يک کامپيوتر از انواع متفاوتي نام ( user friendly names ) ، استفاده مي گردد. ويندوز 2000 ، بمنظور ذخيره سازي اسامي و آدرس IP معادل آنان ، از رويکردهاي متفاوتي استفاده مي گردد .با توجه به نوع نام استفاده شده ، از يک فايل ايستا و يا پويا بمنظور ذخيره نمودن اسامي و آدرس هاي IP مپ شده به آنان استفاده مي گردد . برخي از برنامه ها نظير IE و FTP ، قادر به استفاده از آدرس IP و يا نام براي برقراري ارتباط با مقصد مورد نظر مي باشند .زمانيکه از نام استفاده مي گردد ، قبل از آغاز يک ارتباط از طريق پروتکل TCP/IP ، از فرآيندي با نام Name Resolution استفاده تا آدرس IP کامپيوتر مورد نظر ، مشخص گردد . در صورتيکه آدرس IP ، مشخص شده باشد ( در مقابل مشخص شدن نام ) ،ارتباط بلافاصله برقرارخواهد شد .

انواع نام
دو نوع نام user friendly وجود دارد : اسامي ميزبان (Host) و اسامي NetBIOS . نام ميزبان ، نامي است که به يک آدرس IP کامپيوترنسبت داده شده تا آن را بعنوان يک ميزبان TCP/IP مشخص نمايد. نام ميزبان ، مي تواند داراي حداکثر 255 کاراکتر ( حروف الفبائي ، کاراکترهاي عددي ، نقطه و hyphens ) باشد . اسامي ميزبان داراي اشکال متفاوتي مي باشند . نام مستعار (Alias) و Domain names ، دو نمونه متداول در اين زمينه مي باشند. نام مستعار، نامي خاص و مرتبط شده به يک آدرس IP است . (نظير : Tehran ) . يک Domain name ، بمنظور استفاده بر روي اينترنت سازماندهي و از نقطه بعنوان يک جداکننده استفاده مي نمايد ( مثلا" Tehran.Citys.com ) .
نام NetBIOS ، يک نام شانزده کاراکتري است که از آن بمنظور مشخص نمودن يک منبع NetBIOS بر روي شبکه استفاده مي گردد . از يک نام NetBIOS ، بمنظور مشخص نمودن يک و يا مجموعه اي از کامپيوترها ، استفاده ميگردد .در اين راستا ، صرفا" از پانزده حرف اول آن براي نام و از کاراکتر نهائي بمنظور مشخص نمودن منبع و يا سرويسي که به يک کامپيوتر اشاره مي نمايد، استفاده مي گردد. نمونه اي از يک منبع NetBIOS ، عنصر File and Print Sharing for Microsoft Networks در شبکه هاي مبتني بر ويندوز 2000 است . زمانيکه کامپيوتر فعاليت خود را آغاز مي نمايد ، عنصر فوق ، يک نام منحصر بفرد NetBIOS را ريجستر(ثبت) مي نمايد . نام ثبت شده شامل نام کامپيوتر و کاراکتري است که بيانگر عنصر ثبت کننده است ( براي در نظر گرفتن نام کامپيوتر از حداکثر پانزده حرف و براي مشخص نمودن عنصر ثبت کننده نام ، از يک حرف ديگر استفاده مي گردد ) . درويندوز 2000 ، نام NetBIOS ، مي تواند حداکثر پانزده کاراکتر باشد . ويندوز 2000 ، خود نيازي به اين نوع اسامي نداشته و نسخه هاي قبلي ويندوز نيازمند استفاده از اسامي NetBIOS بمنظور حمايت از قابليت هاي شبکه اي، دارند.

Static IP mapping
زمانيکه کاربران يک نام را بمنظور برقراري ارتباط با يک کامپيوتر مقصد ، مشخص مي نمايند ، پروتکل TCP/IP همچنان نيازمند يک آدرس IP براي تحقق انتقال اطلاعات است . در اين راستا لازم است که نام کامپيوتر به يک آدرس IP ، مپ گردد. ماحصل عمليات فوق ( mapping ) ، در يک جدول ايستا و يا پويا ذخيره مي گردد . در صورتيکه از يک جدول ايستا استفاده گردد ، نتايج مورد نظر در يکي از فايل هاي Hosts و يا Lmhosts ذخيره مي گردند( فايل ها ي فوق، متني مي باشند ) . مهمترين مزيت استفاده از يک جدول ايستا ، امکان سفارشي نمودن آن با توجه به ماهيت فايل ( متني ) و محل ذخيره سازي ( ذخيره بر روي هر کامپيوتر) آن است. در اين راستا هر يک از کاربران مي توانند براي دستيابي به منابعي با فرکانس بالاي دستيابي ، به هر ميزان که ضرورت دارد ، entry در جدول فوق ثبت نمايند . بهنگام سازي جداول ايستا ، يکي از چالش هاي اصلي در اين زمينه بوده و در موارديکه تعداد آدرس هاي IP مپ شده ، زياد و آدرس هاي فوق متناوبا" تغيير يابند ، بهنگام سازي جداول ايستا مسائل خاص خود را خواهد داشت .

فايل Hosts . فايل فوق ، يک فايل متني و شامل آدرس هاي IP مپ شده به اسامي ميزبان است . فايل فوق، داراي ويژگي هاي زير است :

مي توان چندين نام ميزبان را به آدرس IP مشابهي نسبت داد .در اين حالت ، امکان مراجعه به يک سرويس دهنده در آدرس IP : 167.91.45.121 از طريق نام حوزه Tehran.Citys.Com و يا نام مستعار Tehran وجود خواهد داشت . در اين راستا ، کاربران مي توانند بمنظور مراجعه به سرويس دهنده از نام مستعار Tehran در مقابل نام Domain ، استفاده نمايند .

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

فايل LmHosts . فايل فوق ، يک فايل متني وشامل آدرس IP مپ شده به نام NetBIOS است . بخشي از فايل Lmhosts در ابتدا وارد حافظه شده و به آن اصطلاحا" NetBIOS name Cache مي گويند.

Dynamic IP mapping
مهمترين مزيت جداول پويا ( مسئول ذخيره سازي IP مپ شده ) ، بهنگام سازي اتوماتيک آنان است.در اين راستا ، جداول پويا از دو سرويس استفاده مي نمايند : DNS)Domain Name System) و WINS)Windows Internet Neame Service) . سرويس دهنده DNS و WINS عمليات مشابه اي را نظير فايل هاي Hosts و Lmhosts انجام خواهند داد ( بدون نياز به پيکربندي دستي ) .

DNS)Domain Name System)
DNS ، روشي بمنظور نامگذاري کامپيوترها و منابع شبکه است . شبکه هاي مبتني بر TCP/IP ، از بانک اطلاعاتي اسامي DNS ، بمنظور يافتن کامپيوترها و سرويس ها از طريق اسامي User friendly مربوط به Domain names ، استفاده مي نمايند. زمانيکه کاربري نام يک Domain را در برنامه اي وارد ( مشخص ) مي نمايد، سرويس دهنده DNS ، نام مورد نظر را به IP مربوطه ، map خواهد کرد .ساختار سيستم نامگذاري DNS ، بصورت سلسله مراتبي است ، بدين ترتيب امکان استفاده از سيستم فوق،در شبکه هاي بزرگي نظير اينترنت وجود خواهد شد . با استفاده از يک سيستم سلسله مراتبي بمنظور ايجاد اسامي Domain ، کامپيوترهائي که اسامي Domain و معادل IP مربوطه را ذخيره مي نمايند ، داراي mapping لازم براي صرفا" ناحيه مربوط به خود مي باشند . اين نوع از کامپيوترها اصطلاحا" ، سرويس دهنده DNS ، ناميده شده و صرفا" پردازش هاي لازم براي کامپيوترهائي که در ميدان عملياتي آنان مي باشد را انجام خواهند داد . زمانيکه mapping در ناحيه مربوطه تغيير نمايد ، سرويس دهندگان DNS مبتني بر ويندوز 2000 ، بصورت اتوماتيک عمليات بهنگام سازي را انجام خواهند داد .

WINS)Windows Internet Name Service)
WINS ، يک بانک اطلاعاتي توزيعي را براي ثبت mapping پوياي اسامي NetBIOS استفاده شده در شبکه ، ارائه مي نمايد . WINS ، اسامي NetBIOS را به آدرس هاي IP مپ و اين امکان را فراهم خواهد آورد که اسامي NetBIOS در طول روترها ، قابل استفاده باشند .

Name Resoulation در ويندوز 2000
Name Resoulation ، فرآيندي است که بر اساس آن مشکل يک نام برطرف و يا به يک آدرس IP مپ مي گردد . زمانيکه کاربري يک نام را در يک برنامه ، وارد مي نمايد، برنامه مشخص مي نمايد که نام فوق يک ميزبان و يا يک نام NetBIOS است. برنامه هاي فعلي در ويندوز 2000 ، از فرآيند host name resolution ، استفاده مي نمايند ولي برخي از برنامه هاي قديمي تر نظير برنامه هائي که مختص ويندوز NT و يا ويندوز 95 , 98 طراحي شده اند ، همچنان از اسامي NetBIOS استفاده مي نمايند. در صورتيکه فرآيند فوق ، با موفقيت همراه نگردد ، برنامه متقاضي قادر به برقراري ارتباط با مقصد مورد نظر خود نخواهد بود. در صورتيکه از يک آدرس IP استفاده مي نمائيد ، name resolution نياز نخواهد بود .

فرآيند Host name Resolution
آدرس IP اسامي ميزبان ( Host Names) ، با استفاده از فايل Host و يا بکمک سرويس دهنده DNS ، مشخص خواهد شد . فرآيند فوق ، بصورت زير انجام خواهد شد .

کامپيوتر A دستوري را نظير FTP بهمراه نام کامپيوتر ميزبان B ، وارد مي نمايد .

کامپيوتر A ، بررسي مي نمايد که آيا نام مشخص شده با نام ميزبان محلي مطابقت مي نمايد.

در صورتيکه نام مشخص شده با نام ميزبان محلي مطابقت ننمايد ، کامپيوتر A ، فايل ميزبانان خود را (Hosts File ) بمنظور آگاهي از کامپيوتر ميزبان B ، جستجو مي نمايد. در صورتيکه نام کامپيوتر ميزبان پيدا گردد ، آدرس IP مپ شده به آن ، برگردانده خواهد شد . پس از مشخص شدن آدرس IP ، زمينه ارتباط با کامپيوتر مورد نظر فراهم خواهد شد .

اگر کامپيوتر A ، نام ميزبان کامپيوتر B را پيدا ننمايد ، در ادامه يک query براي سرويس دهنده DNS ارسال مي گردد. در صورتيکه نام ميزبان پيدا گردد ، آدرس IP نسبت داده شده به آن مشخص خواهد شد. پس از مشخص شدن آدرس IP ، زمينه ارتباط با کامپيوتر مورد نظر فراهم خواهد شد .

درصورتيکه نام کامپيوتر ميزبان در سرويس دهنده DNS پيدا نگردد ، ويندوز 2000 ، Cache مربوط به اسامي NetBIOS را بررسي مي نمايد .اين امر بدين علت است که ويندوز 2000 ، با NetBIOS name بمنزله host name ، رفتار مي نمايد.

در صورتيکه Cache فوق ، شامل نام ميزبان مورد نظر نباشد ، يک query براي سرويس دهنده WINS ارسال مي گردد .

در صورتيکه سرويس دهنده WINS قادر به حل مشکل نام نباشد ، يک پيام Broadcast بر روي شبکه ارسال مي گردد.

در صورتيکه ميزباني به پيام منتشر شده پاسخ ندهد ، فايل Lmhosts بمنظور نام ميزبان( NetBIOS) ، بررسي خواهد شد.

فرآيند NetBIOS Name Resolution
بصورت پيش فرض ، اسامي NetBIOS بر روي يک شبکه مبتني بر TCP/IP کار نخواهند کرد . ويندوز 2000 ، امکان برقراري ارتباط در شبکه هاي مبتني بر TCP/IP را براي سرويس گيرندگان NetBIOS ، از طريق پروتکل NetBT ، فراهم مي نمايد . NetBT ، از کلمات NetBIOS over TCP/IP اقتباس شده است . پروتکل فوق ، امکان برقراري ارتباط را براي برنامه هاي مبتني بر NetBIOS ، توسط TCP/IP و از طريق ترجمه نام NetBIOS به يک آدرس IP ، فراهم مي نمايد . درصورتيکه سرويس دهنده WINS براي استفاده ، پيکربندي شده باشد ، فرآيند NetBIOS Name Resolution ، بصورت زير خواهد بود :

کامپيوتر A ، دستوري نظير Net use را بهمراه نام NetBIOS کامپيوتر B ، وارد مي نمايد .

کامپيوتر A ، بررسي مي نمايد که آيا نام مشخص شده در Cache اسامي NetBIOS ، موجود است .

در صورتيکه نام موجود نباشد ، کامپيوتر A يک query را براي سرويس دهنده WINS ارسال مي دارد.

در صورتيکه سرويس دهنده WINS قادر به يافتن نام نباشد ، کامپيوتر A از Broadcast در شبکه ، استفاده مي نمايد .

در صورتيکه Broadcast ، قادر به حل مشکل نام نگردد ، کامپيوتر A ، فايل Lmhosts را بررسي مي نمايد.

در صورتيکه روش هاي NetBIOS فوق ، قادر به حل مشکل نام نگردند ، کامپيوتر A ، فايل Hosts را بررسي مي نمايد.

در نهايت ، کامپيوتر A ، يک query براي يک سرويس دهنده DNS ارسال مي نمايد .

در بخش پنجم اين مقاله به بررسي نحوه انتقال اطلاعات خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه پروتکل TCP/IP ( بخش پنجم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۰۵ مراجعه امروز
۴۸۲۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه پروتکل TCP/IP ( بخش پنجم )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۵/۵/۱۳۸۲ اين مقاله ۶۸۸ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

آنچه تاکنون گفته شده است :
بخش اول : معرفي پروتکل TCP/IP بهمراه لايه هاي آن
بخش دوم : بررسي پروتکل هاي موجود در TCP/IP
بخش سوم : بررسي برنامه ها و ابزارهاي کمکي در رابطه با پروتکل TCP/IP
بخش چهارم : بررسي Name Resoulation
در اين بخش به بررسي نحوه فرآيند انتقال اطلاعات خواهيم پرداخت .

TCP/IP ، بمنظور ارسال داده بر روي شبکه آنها را به بخش هاي کوچکتري با نام Packets ( بسته هاي اطلاعاتي ) ، تقسيم مي نمايد. از بسته هاي اطلاعاتي ، بر اساس پروتکل هاي مرتبط با آنان با واژه هاي متفاوتي ياد مي گردد. تقسيم داده به بسته هاي اطلاعاتي امري حياتي و ضروري است . ارسال حجم بالائي از اطلاعات در شبکه ، مدت زمان زيادي طول خواهد کشيد و همين امر ، باعث کند شدن شبکه مي گردد. در زمانيکه حجم بالائي از اطلاعات در شبکه جابجا مي گردد ، ساير کامپيوترهاي موجود در شبکه قادر به ارسال اطلاعات نخواهند بود. در چنين حالتي ، اگر در فرآيند انتقال اطلاعات اشکالي بروز نمايد ، مي بايست تمامي اطلاعات مجددا" ارسال شوند. در مقابل ، اگر بسته هاي اطلاعاتي کوچک بر روي شبکه ارسال گردند ، انتقال آنها بسرعت انجام و محيط انتقال به مدت زيادي ، اشغال نخواهد شد . در چنين حالتي در صورتيکه هر يک از بسته هاي اطلاعاتي با مشکل مواجه شوند ، صرفا" بسته اطلاعاتي که با مشکل مواجه شده است ، مجددا" ارسال مي گردد. ( در مقابل ارسال تمام اطلاعات ) .
زمانيکه يک بسته اطلاعاتي به لايه اينترفيس شبکه ارسال مي گردد ( Network interface layer ) ، به آن فريم ( frame ) مي گويند . فريم ، از بخش هاي متفاوتي که هر يک داراي عملکرد خاص خود در جريان انتقال اطلاعات در لايه اينترفيس شبکه مي باشند، تشکيل شده است .
فرآيند ارسال اطلاعات، شامل مراحل متعددي است ( سازماندهي داده درون بسته هاي اطلاعاتي در کامپيوتر مبداء و بهم بستن آنان در کامپيوتر مقصد بگونه اي که شکل اوليه مجددا" ايجاد گردد) . هر لايه از پروتکل TCP/IP ، داراي نقشي موثر در کامپيوترهاي مبداء و مقصد است .

واژگان بسته هاي اطلاعاتي ( Packets )
در هر يک از لايه هاي TCP/IP از بسته اطلاعاتي ( packet ) با اسامي متفاوتي نام برده مي شود . همزمان با حرکت يک بسته اطلاعاتي از يک لايه به لايه ديگر در پروتکل TCP/IP ، هر يک از پروتکل هاي مربوطه ، اطلاعات اختصاصي خود را به آن اضافه مي نمايند. از بسته اطلاعاتي بهمراه اطلاعات اضافه شده به آن ، با اسامي فني ديگر ، ياد مي گردد. اين اسامي : Segment ( سگمنت ) ، message ( پيام ) ، datagram ( ديتاگرام ) و frame ( فريم ) ، مي باشند .

سگمنت . سگمنت واحد انتقال اطلاعات در TCP بوده و شامل يک TCP header است که توسط Application data ، همراهي شده است .
پيام . پيام ، واحد انتقال اطلاعات در پروتکل هائي نظير ICMP,UDP,IGMP. و ARP است . پيام شامل يک Protocol header بوده که توسط Application و يا protocol data ، همراهي شده است .
ديتاگرام . ديتاگرام ، واحد انتقال اطلاعات در سطح لايه IP است . ديتاگرام شامل يک IP header است که توسط لايه transport ، همراهي شده است .
فريم . فريم ، واحد انتقال اطلاعات در سطح لايه اينترفيس شبکه است . فريم شامل يک header است که در لايه network به آن اضافه شده است که توسط داده لايه IP ، همراهي شده است .
اجزاء يک فريم
يک فريم ( اصطلاحي براي يک بسته اطلاعاتي در سطح لايه شبکه ) شامل سه بخش اساسي : header , data و trailer است .

Header . اطلاعات موجود در اين بخش شامل موارد زير مي باشد :

يک سيگنال هشداردهنده مبني بر ارسال يک بسته اطلاعاتي

آدرس مبداء

آدرس مقصد

Data . در اين بخش ، اطلاعات واقعي ارسال شده توسط برنامه ، قرار مي گيرد. اين بخش از بسته اطلاعاتي داراي اندازه هاي متفاوتي است ( بستگي به محدوديت اندازه تنظيم شده توسط شبکه دارد) . بخش Data ، در اکثر شبکه ها از نيم کيلو بايت تا چهار کيلو بايت را مي تواند شامل شود. در شبکه هاي اترنت ، اندازه داده تقريبا" معادل يک و نيم کيلو بايت است . با توجه به اينکه اکثر تنظيمات داده هاي اوليه ، بيش از چهار کيلو بايت مي باشند ،مي بايست داده به بخش هاي کوچکتري با نام " بسته هاي اطلاعاتي " ( packet ) ، تقسيم گردد. در زمان انتقال يک فايل با ظرفيت بالا ، بسته هاي اطلاعاتي زيادي در طول شبکه منتقل خواهند شد.

Trailer . محتويات trailer ، ارتباط مستقيم به پروتکل استفاده شده در لايه اينترفيس شبکه دارد . trailer ، معمولا" شامل بخشي بمنظور بررسي خطاء بوده که CRC)Cyclical redundancy check) ، ناميده مي شود .CRC ، عددي است که توسط يک محاسبه رياضي بر روي بسته اطلاعتي در مبداء ( فرستنده) ، توليد مي گردد . زمانيکه بسته اطلاعاتي به مقصد خود مي رسد ، مجددا" محاسبه مربوطه انجام خواهد شد. در صورتيکه نتايج بدست آمده ، يکسان باشد ، نشاندهنده صحت ارسال يک بسته اطلاعاتي خواهد بود . در صورتيکه ماحصل محاسبه در مقصد با نتيجه محاسبه شده در مبداء ، مغايرت داشته باشد ، بدين مفهوم خواهد بود که داده در زمان انتقال ، تغيير نموده است . در چنين حالتي ، کامپيوتز مبداء ، مجددا" داده را ارسال خواهد کرد .

جريان انتقال اطلاعات ( از کامپيوتر مبداء تا کامپيوتر مقصد )
بسته هاي اطلاعاتي ارسال شده از يک کامپيوتر براي کامپيوتر ديگر از بين لايه هاي متعدد پروتکل TCP/IP عبور خواهند کرد . بموازات رسيدن يک بسته اطلاعاتي به يک لايه ، پروتکل هاي موجود در آن ، اطلاعات خاصي را به آن اضافه خواهند کرد . اطلاعات اضافه شده ( ضميمه شده ) توسط هر پروتکل ، شامل اطلاعاتي در رابطه با بررسي خطاء بوده که Checksum ، ناميده مي شود. از Checksum ، بمنظور بررسي صحت ارسال اطلاعات اضافه شده در header توسط پروتکل مربوطه ، در پروتکل مقصد استفاده مي گردد ( اطلاعات مي بايست بي کم و کاست در اختيار پروتکل مقصد قرار بگيرند ) .فراموش نکنيم که CRC ، صحت انتقال يک بسته را بطور کامل بررسي مي نمايد. اطلاعات اضافه شده توسط پروتکل ها در هر لايه ، بعنوان داده توسط پروتکل هاي لايه زيرين ( پايين ) ، کپسوله خواهند شد. زمانيکه بسته اطلاعاتي به مقصد مورد نظر مي رسد ، لايه مربوطه ( منتاظر ) يک بخش از header را برداشته و با باقي بسته اطلاعاتي بعنوان داده برخورد خواهد کرد . بسته اطلاعاتي در ادامه بسمت پروتکل هاي موجود در لايه بالاتر ارسال و دراختيار پروتکل مربوطه قرار خواهد گرفت . در ادامه عملکرد هر يک از لايه ها را در فرآيند انتقال اطلاعات بررسي و اين موضوع را از زاويه کامپيوتر مبداء و مقصد دنبال خواهيم نمود.

لايه Application
فرآيند انتقال اطلاعات از لايه application آغاز مي گردد . يک برنامه نظير FTP ، پردازش را در کامپيوتر مبداء مقدار دهي اوليه مي نمايد(آماده نمودن داده به فرمتي که برنامه در کامپيوتر مقصد ، قادر به تشخيص آن باشد) . برنامه موجود در کامپيوتر مبداء ، کنترل تمامي فرآيند را برعهده خواهد داشت .

لايه Transport
از لايه Application ، داده به لايه transport منتقل مي گردد. اين لايه شامل پروتکل هاي TCP و UDP است . برنامه مورد نظر نوع پروتکل "حمل" را مشخص مي نمايد( TCP يا UDP ) . در هر دو حالت Checksum براي TCP و UDP اضافه خواهد شد.
در صورتيکه پروتکل TCP ، انتخاب گردد :

يک دنباله عددي ( Sequence number ) به هر سگمنت منتقل شده ، اضافه خواهد شد.

اطلاعات مربوط به Acknowledgment براي يک ارتباط " اتصال- گرا" ، به هر سگمنت اضافه مي شود .

شماره پورت TCP در رابطه با برنامه هاي مبداء و مقصد ، اضافه خواهد شد.

در صورتيکه پروتکل UDP ، انتخاب گردد :

شماره پورت UDP در رابطه با برنامه هاي مبداء و مقصد ، اضافه خواهد شد.

لايه اينترنت
پس از اينکه اطلاعات "حمل " اضافه گرديد ، بسته اطلاعاتي در اختيار لايه "اينترنت " قرار داده مي شود. در اين لايه ، اطلاعات زير به header اضافه مي گردد :

آدرس IP مبداء

آدرس IP مقصد

نوع پروتکل "حمل "

مقدار checksum

اطلاعات TTL)Time to Live)

علاوه بر اطلاعات فوق ، لايه اينترنت مسئوليت بر طرف نمودن آدرس هاي IP مقصد به يک آدرس MAC را نيز بر عهده دارد . پروتکل ARP ، مسئول انجام عمليات فوق ، است . آدرس MAC به header بسته اطلاعاتي اضافه و در ادامه بسته اطلاعاتي در اختيار لايه " اينترفيس شبکه " ، قرار داده مي شود.

لايه "اينترفيس شبکه "
لايه فوق ، پس از دريافت يک بسته اطلاعاتي از لايه IP ، اطلاعات زير را به آن اضافه خواهد کرد :

يک Preamble ( مقدمه ) . دنباله اي از بايت ها است که ابتداي يک "فريم " را مشخص مي نمايد .

يک CRC . ماحصل يک محاسبه رياضي است که به انتهاي فريم اضافه و از آن بمنظور صحت ارسال فريم ، استفاده مي گردد.

پس ازافزودن اطلاعات مورد نظر به فريم ها در لايه اينترفيس شبکه ، در ادامه فريم ها بر روي شبکه ارسال خواهند شد.

عمليات در کامپيوتر مقصد
زمانيکه فريم ها به کامپيوتر مقصد مي رسند ، لايه اينترفيس شبکه ، Preamble را حذف و مقدار CRC را مجددا" محاسبه مي نمايد. در صورتيکه مقدار بدست آمده با مقدار محاسبه شده در مبداء ، يکسان باشد در ادامه آدرس MAC مقصد ، موجود بر روي فريم، بررسي مي گردد . در صورتيکه آدرس MAC ، يک آدرس Broadcast و يا آدرس MAC با کامپيوتر مقصد مطابقت نمايد ، فريم به لايه "اينترنت " ، ارسال خواهد شد. در غير اينصورت فريم ناديده گرفته مي شود. در لايه IP ، مجددا" Checksum محاسبه و با مقدار محاسبه شده قبل از انتقال ، مقايسه تا اين اطمينان حاصل گردد که بسته اطلاعاتي در طول مسير تغيير ننموده است . در ادامه ، IP بسته اطلاعاتي را در اختيار پروتکل "حمل" ، قرار مي دهد ( TCP يا UDP ) . بمنظور تصميم گيري در رابطه با نوع پروتکل "حمل " ، از اطلاعات موجود در IP header استفاده مي گردد. در لايه "حمل" ، در صورتيکه بسته اطلاعاتي از TCP دريافت شده باشد ، دنباله عددي ( sequence number ) بر روي بسته اطلاعاتي بررسي و يک acknowledgement براي TCP کامپيوتر مبداء ارسال مي گردد . در ادامه از اطلاعات پورت TCP موجود در بسته اطلاعاتي استفاده تا بسته اطلاعاتي براي برنامه مربوطه در لايه Application ، ارسال گردد.
در صورتيکه UDP بسته اطلاعاتي را از لايه "اينترنت" دريافت نمايد ، از اطلاعات پورت UDP موجود در بسته اطلاعاتي استفاده تا آن را براي برنامه مربوطه در لايه Application ارسال نمايد . ( بدون ارسال يک acknowledgement براي کامپيوتر مبداء ) .
پس از دريافت اطلاعات توسط Appliaction ، پردازش هاي لازم و ضروري در ارتباط با آنها انجام خواهد شد.

در بخش ششم اين مقاله به بررسي "روتينگ داده " ، خواهيم پرداخت

کيفيت مقاله :
عالی خوب متوسط ضعيف


بررسي يک برنامه نمونه دات نت ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۳۱ مراجعه امروز
۵۲۴۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
بررسي يک برنامه نمونه دات نت
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۶/۱۳۸۲ اين مقاله ۲۲۰۱ بار مطالعه شده است
۱۹ نفر تا به حال به اين مقاله رای داده اند.

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

يک سيستم نمونه وام بانکي که از دات نت استفاده مي نمايد

در ادامه به بررسي عمليات هشت گانه فوق پرداخته و امکانات دات نت را در اين راستا ، بررسي مي نمائيم .

1 - بانک اطلاعاتي وام گيرندگان. بانک اطلاعاتي، شامل داده ( اطلاعات ) مورد نظر در ارتباط با هريک از دريافت کنندگان وام است . بانک اطلاعاتي فوق ، همچنين شامل view هائي از بانک اطلاعاتي مشتريان بانک است . بانک اطلاعاتي وام گيرندگان ، مي تواند با استفاده از امکانات سرويس دهنده SQL ، اينفورميکس ، DB2 و يا ساير سيستم هاي مديريت بانک اطلاعاتي، ايجاد و داده ها را در خود ذخيره نمايد.

2 - لايه داده ( Data Tier ) . لايه فوق، بعنوان لايه داده در معماري سرويس گيرنده - سرويس دهنده N-tier ، مطرح مي باشد . لايه داده از ADO.NET بمنظور ارتباط با سيستم بانک اطلاعاتي استفاده و يک رويکرد شي گراء از داده ها را براي لايه logic ، ارائه مي نمايد. بعبارت ديگر رکوردهاي بانک اطلاعاتي و فيلدها به اشيائي تبديل ( map ) تا اطلاعات مربوط به مشتريان ، وام ها ، پرداخت ها و ساير موارد مرتبط توسط آنان ارائه گردد. در اين راستا ، مي توان از #C و يا ويژوال بيسيک دات نت و يا ساير زبان هاي سازگار با دات نت در لايه داده ، استفاده کرد.

3 - لايه منطق ( Logic Tier ) . لايه منطق، شامل قوانيني است که سياست هاي راهبردي نرم افزار را تعيين مي نمايد ( Business rules ) .لايه فوق، بمنزله قلب سيستم خواهد بود. مجددا" مي توانيم براي کدينگ برنامه ها و عناصر مورد نياز در لايه فوق از زبان #C و يا ويژوال بيسيک دات نت و يا ساير زبانهاي سازگار با دات نت استفاده نمائيم. انتخاب زبان برنامه نويسي در اين لايه ، ارتباطي با زبان استفاده شده در لايه داده ، نخواهد داشت . سازگاري بين زبانها نظير توارث بين زبانها ، بدين معني است که ما مي توانيم مناسبترين زبان را بمنظور پاسخگوئي به نيازها و عمليات مورد نظر خود، انتخاب نمائيم . CLR بهمراه پتانسيل هاي موجود ، امکان انتخاب زبان هاي مورد نظر را با توجه به نوع خواسته ها فراهم و در صورت نياز نيز مي توان از ترکيب آنها با يکديگر استفاده کرد.

4 - برنامه محلي و اختصاصي دپارتمان وام . ممکن است ، قصد داشته باشيم که يک برنامه با کاربرد داخلي را بعنوان يک برنامه مبتني بر ويندوز سنتي ايجاد نمائيم . با استفاده از معماري سرويس گيرنده - سرويس دهنده ، اين نوع برنامه ها قادر به ارتباط مستقيم با لايه منطق از طريق شبکه داخلي محلي بانک، خواهند بود. برنامه فوق ، مشابه مدل فرم هاي ويژوال بيسيک است . با استفاده از ويژوال استوديو دات نت ، مي توان بسادگي اقدام به طراحي فرم هاي مورد نياز نمود. فرم هاي ويندوز، مي توانند شامل تمامي کنترل هاي شناخته شده ويندوز باشند . ( Check box,Labels,List boxes ) . فرم هاي ويندوز، همچنين شامل يک نسخه جديد از Windows Graphic Device Interface)GDI) مي باشند .

5 - برنامه هاي کنسول مديريت . شايد بانک از اينفورميکس بر روي يونيکس بعنوان سيستم مديريت بانک اطلاعاتي استفاده مي نمايد. در صورتيکه چنين وضعيتي باشد ، ما ممکن است مديراني را داشته باشيم که تمايل به اجراي برنامه هاي دات نت از طريق ايستگاههاي يونيکس را داشته باشند . کلاس Systrm.Console ، قادر به ايجاد برنامه ها ي خط دستوري است که امکان فعال شدن و انجام عمليات مربوطه ،از طريق يک اتصال telnet محقق مي گردد. مثلا" با استفاده از ويژوال بيسيک دات نت و يا #C مي توان يک برنامه کنسول را طراحي و پياده سازي نمود.بدين ترتيب ، مديريت قادر خواهد بود تا با استفاده از يک پلات فرم ديگر ، از تاريخ سررسيد وام ها ، آگاهي يابد.

6 - سرويس هاي وب Business partner ( توليد). درمدل فوق ، داراي يک همکار تجاري هستيم : مجموعه اي از آژانس ها ي استخدام شده توسط بانک بمنظور پيگيري وام هائي که داراي تاخير در پرداخت مي باشند. در گذشته! ، مي بايست يک برنامه batch خاص را طراحي را تا بصورت روزانه حساب هاي هاي تاخير دار را استخراج و آنها را بر روي يک فايل ذخيره و براي هر يک از آژانس ها ارسال نمايد. با استفاده از دات نت ، مي توان عمليات فوق را بصورت يک سرويس وب طراحي تا حساب هاي تاخير دار را براي سرويس گيرندگان راه دور، نمايش دهد. اين بدان معني است که آژانس هاي مربوطه قادر به بکارگيري برنامه هاي اختصاصي خود بمنظور ارتباط با سيستم وام و استخراج حساب هاي هاي تاخير دار در صورت ضرورت مي باشند. اگر بپذيريم که وب سايت ها، خدماتي را در اختيار انسان قرار مي دهند ، مي توان گفت که سرويس هاي وب توسط ساير برنامه ها استفاده و خدمات خود را در اختيار آنان قرار خواهند داد ( تحول در ارتباط بين برنامه ها و فصل جديدي براي گفتگوي برنامه ها ). رويکرد فوق ، باعث ظهور نسل جديدي از برنامه ها ( مدل فدرال) خواهد شد . در اين راستا ، سرويس هاي وب مستقلي ايجاد که با استفاده از آنان و يا ترکيبي از آنان مي توان ، برنامه هاي قدرتمندي را ايجاد کرد.

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

8 - برنامه هاي مشتريان مبتني بر وب . با استفاده از ASP.NET ، مي توان بسرعت يک برنامه وام مبتني بر وب را ايجاد تا امکان دسترسي سريع به سيستم وام را براي مشتريان مربوطه ، فراهم نمايد. همچنين با استفاده از Mobile Internet Toolkit ، مي توان اينترفيسي خاص را طراحي تا بر اساس آن ، مشتريان مربوطه قادر به استفاده از سيستم وام بکمک دستگاههاي handheld نظير تلفن هاي مبتني بر وب و يا PDA باشند.

همانگونه که در برنامه فوق ، مشاهده مي گردد برخي از عناصر ( نسبت به مدل هاي قبل از دات نت ) از مدل فوق ،حذف شده است . مثلا" در مدل ارائه شده خبري از عناصر COM و يا CORBA وجود ندارد در مقابل ما از توان سرويس دهنده وب بمنظور استفاده از زيرساخت سرويس هاي وب XML مربوط به ASP.NET استفاده تا امکانات سيستم وام را در اختيار سرويس گيرندگان از راه دور قرار دهيم. براي حمايت دستگاههائي موبايل و ساير دستگاههاي مشابه از سرويس دهندگان اضافي و يا فيلترهاي خاصي استفاده نشده است . در اين راستا از کنترل هاي ارائه شده Mobile Internet Toolkit بمنظور تشخييص و حمايت چندين دستگاه استفاده شده است . همچنين در اين رابطه امکانات خاصي دررابطه با حمايت مرورگرهاي متفاوت اضافه نشده است . اين بدان معني است که برنامه هاي ASP.NET قادر به استفاده از مزاياي ويژگي هاي توسعه يافته مرورگرهاي سطح بالا بوده و بر اساس آن ، مرورگرها مي توانند بصورت اتوماتيک HTML لازم براي مرورگرهاي قديمي را با توجه به پتانسيل هاي مربوطه خود ، ارائه نمايند.
همانگونه که مشاهده گرديد ، طراحي و پياده سازي يک سيستم پيچيده و مدرن که شامل چندين اينترفيس و چندين نوع کاربر است ( کارکنان بانک ، همکاران تجاري که از پلات فرم هاي خاص خود استفاده مي نمايند ، مشتريان بانک که از دستگاههاي متعددي بمنظور ارتباط با سيستم استفاده مي نمايند ) ، با استفاده از پلات فرم دات نت ، بخوبي ميسر خواهد شد.دات نت در رابطه با طراحي و پياده سازي اين نوع سيستم ها ، تمامي امکانات مورد نياز را در اختيار طراحان و پياده کنندگان سيستم هاي نرم افزاري قرار خواهد داد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


نقش عوامل انساني در امنيت شبکه هاي کامپيوتري ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۰۸ مراجعه امروز
۴۸۲۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نقش عوامل انساني در امنيت شبکه هاي کامپيوتري
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۶/۱۳۸۲ اين مقاله ۶۴۵ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

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

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

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

بصورت فيزيکي محل کار و سيستم خود را ايمن سازيد .زمينه استفاده از سيستم توسط افراديکه در محدوده کاري شما فعاليت دارند ، مي بايست کاملا" کنترل شده و تحت نظارت باشد .

هر مرتبه که سيستم خود را ترک مي کنيد ، عمليات logout را فراموش نکنيد .در اين رابطه مي توان يک زمان time out را تنظيم تا در صورت فراموش نمودن عمليات logout ، سيستم قادر به حفاظت خود گردد.

خود را عضو خبرنامه ها ي متفاوت امنيتي کرده تا شما را با آخرين نقاط آسيب پذير آشنا نمايند. درحقيقت آنان چشم شما در اين معرکه خواهند بود( استفاده مفيد از تجارب ديگران ) .

سعي گردد بصورت مستمر از سايت هاي مرتبط با مسائل امنيتي ديدن تا درزمان مناسب با پيام هاي هشداردهنده امنيتي در رابطه با نرم افزارهاي خارج از رده و يا نرم افزارهاي غير اصلاح شده ( unpatched ) آشنا گرديد.

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

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

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

قبل از اتصال فيزيکي يک کامپيوتر به شبکه ، مجوز امنيتي لازم با توجه به سياست هاي تدوين شده امنيتي براي آن صادر گردد ( بررسي سيستم و صدور مجوز اتصال )

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

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

سيستمي را که قصد اتصال آن به اينترنت وجود دارد ، نمي بايست شامل اطلاعات حساس سازمان باشد.

سيستم مورد نظر را تحت برنامه هاي موسوم به Intrusion Detection System قرار داده تا نرم افزارهاي فوق بسرعت نقاط آسيب پذير و ضعف هاي امنيتي را شناسائي نمايند.

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

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

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

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

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

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

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

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

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

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

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

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

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


معماري سرويس هاي وب ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۳۴ مراجعه امروز
۵۲۵۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
معماري سرويس هاي وب ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۶/۱۳۸۲ اين مقاله ۱۵۹۰ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.

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

مقدمه
بمنظور ايجاد برنامه هاي توزيع شده قدرتمند و انعطاف پذير ، موارد متعددي وجود دارد که مي بايست به آنها توجه گردد:

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

مي توان از سرويس هاي نرم افزاري و منابع خارجي بمنظور طراحي و پياده سازي نرم افزار مورد نظر خود استفاده کرد.
امکان ايجاد منابع نرم افزاري بيشتري بصورت ماژولار ، وجود خواهد داشت ( کيت هاي نرم افزاري با قابليت استفاده مجدد ) .
هزينه توليد نرم افزار کاهش و بهره وري افزايش خواهد يافت .
مطرح شدن ايده عرضه نرم افزار بعنوان سرويس . بدين ترتيب در مقابل عرضه يک نرم افزار Stand-alone ، مي توان از رويکرد نرم افزار بعنوان سرويس ، استفاده نمود.
عناصر معماري مبتني بر سرويس
معماري مبتني بر سرويس براي پياده سازي برنامه هاي توزيع شده ،ايده آل مي باشد . معماري فوق ،امکان پياده سازي پويا ، آزاد و گسترده برنامه هاي توزيع شده را فراهم مي نمايد.
امروزه شاهد بکارگيري سيستم هاي متعددي مي باشيم که خود از چندين برنامه و يا زير سيستم استفاده مي نمايند. با توجه به ارتباط بين سيستمها با يکديگر ، ايجاد و اعمال يک تغيير در ارتباط با هر يک از زير سيستمها مي تواند باعث بروز اشکال در تعداد زيادي از عناصر وابسته و يا ساير برنامه ها گردد . رويکرد فوق ، افزايش هزينه نگهداري اين نوع سيستم ها را بدنبال خواهد داشت .
معماري مبتني بر سرويس ، وابسته به سه عنصر اساسي است که هر يک داراي جايگاه خاص خود مي باشند : Service Provider ( ارائه دهنده سرويس ) ، Service consumer ( مصرف کننده سرويس ) و Service broker ( کارگزار سرويس ) . شکل زير معماري فوق را نشان مي دهد .

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

ارتبا ط بين وظايف سه گانه
عناصر سه گانه اشاره شده در معماري مبتني بر سرويس ، با يکديگر مرتبط تا زمينه تحقق عمليات زير فراهم گردد :

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

معماري سرويس هاي وب و معماري مبتني بر سرويس
عناصر اساسي در معماري سرويس وب عبارتند از :

ارائه دهنده سرويس وب .گره اي در شبکه که مسئوليت ميزبان نمودن يک سرويس وب را برعهده خواهد داشت .
مصرف کننده سرويس . گره اي در شبکه که مسئوليت ميزبان نمودن هر سرويس گيرنده اي را که قادر به ارتباط با استفاده از HTTP باشد را برعهده مي گيرد. مرورگرها ، برنامه هاي کنسول و برنامه هائي با رابط کار گرافيکي سنتي ، نمونه هائي از برنامه هاي سرويس گيرنده مي باشند.
کارگزار سرويس وب. گره اي در شبکه که مسئوليت ميزبان نمودن يک ريجستري سراسري از تمامي سرويس هاي وب در دسترس را برعهده خواهد داشت .( نظير يک کتاب آدرس جامع ) .
تمامي گره هاي فوق ، قادر به ارتباط با يکديگر از طريق شبکه هاي مبتني بر پروتکل TCP/IP مي باشند . در سرويس هاي وب ، سه گره تعريف شده در معماري مبتني بر سرويس ، متناظر با عناصر سرويس هاي وب خواهند بود:
کارگزار سرويس ، مسئوليت ميزبان نمودن UDDI)Universal Description,Discovery and Integration ) را برعهده خواهد داشت .
ارائه دهنده سرويس ، مسئوليت عرضه سرويس هاي وب از طريق صفحات ASP.NET با انشعاب asmx . را برعهده خواهد داشت .
مصرف کننده سرويس ، قابليت برقراري ارتباط از طريق HTTP ويا SOAP)Simple Object Access Protocol) را دارا مي باشد .

همانگونه که اشاره گرديد، در معماري يک سرويس وب از سه عنصر اساسي استفاده مي شود : ارائه دهنده سرويس وب ، استفاده کننده سرويس وب و کارگزار سرويس وب . در ادامه به تشريح هر يک از عناصر فوق خواهيم پرداخت . ( در اين بخش از مقاله به بررسي ارائه دهنده سرويس پرداخته و در بخش دوم اين مقاله ، مصرف کننده سرويس و کارگزار سرويس ، تشريح خواهند شد ) .

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

سرويس دهنده وب
يک ارائه دهنده سرويس مي بايست حداقل شامل يک گوش دهنده ( listener ) پروتکل باشد . براي سرويس هاي وبي که توسط فريمورک دات نت و يا ويژوال استوديو دات نت ، پياده سازي مي گردند ، گوش دهنده پروتکل مي بايست يک HTTP listener باشد . با توجه به اينکه يک ارائه دهنده سرويس قادر به ميزبان نمودن چندين سرويس وب خواهدبود ،ارائه دهنده سرويس ،مي بايست امکان هدايت مناسب يک درخواست به سرويس وب مناسب را دارا باشد . ( قابل مقايسه با سرويس RPCCC) Remote Procedure Call Subsystem)، که مسئوليت پاسخگوئي به درخواست هاي وارده DCOM وهدايت آنان به يک سرويس دهنده مناسب COM است) .مصرف کنندگان ناشناخته سرويس وب ، قادر به دستيابي به يک ارائه دهنده سرويس مي باشند . بنابراين لازم است ، سرويس دهنده وب سرويس هاي پايه امنيتي را حداقل در سطح پروتکل، ارائه نمايد. IIS ، که يک سرويس دهنده وب است ، سرويس هاي مورد نياز يک سرويس وب را ارائه مي نمايد :

IIS يک HTTP listener است
IIS با استفاده از معماري ISAPI ، مي تواند بعنوان يک gateway در رابطه با سرويس هاي وب رفتار نموده و علاوه بر ميزباني از سرويس هاي وب متعدد ، زمينه هدايت صحيح آنان را نيز فراهم نمايد.
IIS زيرساخت قابل ملاحظه اي در رابطه با امنيت را ارائه مي نمايد .
IIS و سرويس هاي وب
يک سرويس دهنده وب نظير IIS ، قادر به فراخواني يک سرويس از جانب يک سرويس گيرنده با استفاده از گزينه هاي متعددي است . سرويس دهنده وب قادر به فعال نمودن ( اجراء ) يک برنامه CGI)Common Gateway Interface) ، اجراي يک مفسر اسکريپت بمنظور برخورد با صفحات ASP و يا فراخواني يک برنامه ISAPI است .زمانيکه IIS همراه با CLR فعاليت مي نمايد ، از يک فيلتر ISAPI بمنظوربررسي درخواست هائي در ارتباط با صفحات با انشعاب asmx استفاده و در ادامه يک ميزبان زمان اجراء را فعال مي نمايد . ميزبان زمان اجراء ، کد مربوط به سرويس وب را که توسط فريمورک دات نت پياده سازي شده است ، اجراء خواهد کرد.

در بخش دوم اين مقاله به بررسي نقش و جايگاه مصرف کنندگان و کارگزاران سرويس ها ي وب ، خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مفاهيم اوليه پروتکل TCP/IP ( بخش ششم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۱۱ مراجعه امروز
۴۸۲۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مفاهيم اوليه پروتکل TCP/IP ( بخش ششم )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۶/۱۳۸۲ اين مقاله ۶۵۷ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

آنچه تاکنون گفته شده است :
بخش اول : معرفي پروتکل TCP/IP بهمراه لايه هاي آن
بخش دوم : بررسي پروتکل هاي موجود در TCP/IP
بخش سوم : بررسي برنامه ها و ابزارهاي کمکي در رابطه با پروتکل TCP/IP
بخش چهارم : بررسي Name Resoulation
بخش پنجم : بررسي فرآيند انتقال اطلاعات
در اين بخش به بررسي روتينگ داده خواهيم پرداخت .

جريان داده در شبکه اي که صرفا" شامل يک سگمنت است ، عمليات ساده اي خواهد بود . در چنين شبکه هائي ، کامپيوترهاي ارسال کننده ، يک درخواست Broadcast را بمنظور مشخص نمودن آدرس MAC کامپيوتر مقصدي که قصد ارسال اطلاعات براي آن وجود دارد ، ارسال مي نمايند . فرآيند ارسال اطلاعات در شبکه هائي که شامل چندين سگمنت مي باشند ، بدين صورت نخواهد بود . در شبکه هائي شامل چندين سگمنت ، فرآيند انتقال اطلاعات بمراتب پيچيده تر خواهد بود. در چنين محيط هائي ، TCP/IP مسيرهاي متعددي را بمنظور ارتباط کامپيوترهاي موجود در شبکه ارائه و از ارتباطات غير ضروري در اين خصوص ، پيشگيري مي نمايد .
درمحيطي که شامل چندين شبکه مرتبط با يکديگر است ، ممکن است کامپيوترهاي مبداء و مقصد در يک سگمنت يکسان نباشند . بدين منظور ، آدرس IP کامپيوتر مقصد بررسي تا اين اطمينان حاصل گردد که موقعيت کامپيوتر مقصد نسبت به کامپيوتر مبداء ، محلي ( بر روي يک سگمنت ) و يا از راه دور( موجود بر روي سگمنت ديگر ) است .در صورتيکه کامپيوتر مقصد در راه دور( سگمنت ديگر) باشد ، داده نمي تواند مستقيم براي وي ارسال گردد . در چنين مواردي لايه IP داده مورد نظر را براي يک روتر ارسال مي نمايد . روتر، بسته اطلاعاتي دريافتي را به مقصد مورد نظر ، ارسال ( فوروارد ) مي نمايد .

روتينگ IP
شبکه هاي بزرگ TCP/IP که از آنان با عنوان شبکه هاي مرتبط بهم ( Internetworks ) ياد مي گردد ، خود به بخش هاي ( سگمنت ) کوچکتري تقسيم تا بتوانند ميزان مبادله اطلاعات و ترافيک موجود در يک سگمنت را کاهش نمايند . Internetwork ، شبکه اي مشتمل بر چندين سگمنت است که توسط روترها بيکديگر مرتبط مي گردد . اولين و در عين حال مهمترين وظيفه يک روتر،ارتباط دو و يا چندين سگمنت فيزيکي با يکديگر است . روترها ، بسته هاي اطلاعاتي لايه IP را از يک سگمنت در شبکه به سگمنت ديگر ارسال مي نمايند . فرآيند فوق ( فورواردينگ بسته هاي IP ) ، روتينگ ناميده مي شود. روترها دو و چندين سگمنت را بيديگر متصل و امکان حرکت ( ارسال ) بسته هاي اطلاعاتي از يک سگمنت به سگمنت ديگر را فراهم مي نمايند.

توزيع بسته هاي اطلاعاتي
بسته هاي اطلاعاتي فوروارد شده ، با توجه به ماهيت مقصد خود ، حداقل يک و يا دو نوع توزيع را دنبال خواهند کرد. در اين رابطه از دو نوع توزيع و با نام هاي توزيع مستقيم و يا غير مستقيم ، استفاده مي گردد :

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

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

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

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

عملکرد لايه IP در کامپيوتر مبداء
لايه IP ، علاوه بر افزودن اطلاعاتي نظير TTL ، همواره آدرس IP کامپيوتر مقصد را به بسته اطلاعاتي اضافه مي نمايد. در موارديکه توزيع بسته هاي اطلاعاتي از نوع مستقيم باشد ،از ARP استفاده و آدرس MAC کامپيوتر مقصد به آن اضافه گردد . در موارديکه توزيع اطلاعات از نوع غير مستقيم باشد ، از ARP استفاده و آدرس MAC روتري که مي بايست بسته هاي اطلاعاتي براي آن فوروارد گردد، به آن اضافه خواهد شد.

عملکرد لايه IP در روتر
پس از دريافت يک بسته اطلاعاتي توسط روتر، لايه IP مربوطه مسئول مشخص نمودن محل ارسال بسته اطلاعاتي است . براي نيل به هدف فوق ، مراحل زير دنبال خواهد شد :

لايه IP ، بررسي لازم در خصوص Checksum و آدرس IP مقصد را انجام مي دهد . اگر آدرس IP ، مربوط به روتر باشد ، روتر پردارش هاي لازم در خصوص بسته اطلاعاتي را بعنوان کامپيوتر مقصد انجام خواهد داد ( IP در مقصد )

در ادامه لايه IP ، مقدارTTL را کاهش و جدول روتينگ مربوطه را بمنظور يافتن مناسبترين مسير بمنظور رسيدن به آدرس IP مقصد ، بررسي مي نمايد .

در موارديکه توزيع بسته هاي اطلاعاتي از نوع مستقيم باشد ،از ARP استفاده و آدرس MAC کامپيوتر مقصد به آن اضافه گردد . در موارديکه توزيع اطلاعات از نوع غير مستقيم باشد ، از ARP استفاده و آدرس MAC روتري که مي بايست بسته هاي اطلاعاتي براي آن فوروارد گردد، به آن اضافه خواهد شد .

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

Fragmentation و Reassembly
زمانيکه يک بسته اطلاعاتي بسيار بزرگ به روتر مي رسد ، لايه IP قبل از ارسال آن را به بخش هاي کوچکتري تقسيم مي نمايد . فرآيند فوق ، Fragmentation ناميده مي شود.
تمامي بسته هاي اطلاعاتي کوچک در ادامه بر روي شبکه حرکت خواهند کرد . بسته هاي اطلاعاتي فوق ، حتي اگر بين چندين روتر حرکت نمايند ، صرفا" در زمانيکه تمامي آنان به کامپيوتر مقصد رسيده باشند ، مجددا" با يکديگر ترکيب و شکل اوليه بسته اطلاعاتي ايجاد مي گردد. فرآيند فوق ، Reassembly ناميده مي شود .

لايه IP در کامپيوتر مقصد
زمانيکه يک بسته اطلاعاتي به کامپيوتر مقصد مي رسد ، لايه IP در کامپيوتر مقصد ، Checksum و آدرس IP مقصد آن را بررسي و در ادامه بسته اطلاعاتي در اختيار TCP و يا UDP قرار خواهد گرفت در نهايت ، بسته اطلاعاتي بمنظور انجام پردازش نهائي و با توجه به شماره پورت موجود ، در اختيار برنامه مقصد قرار خواهد گرفت .

خلاصه
در شش مقاله ارائه شده به بررسي مفاهيم اوليه پروتکل TCP/IP پرداخته گرديد . در ادامه به برخي از نکات مهم، مجددا" اشاره مي گردد:

پروتکل TCP/IP از مدل ارتباطي چهار لايه بمنظور ارسال اطلاعات از يک محل به محل ديگر استفاده مي نمايد. لايه هاي فوق عبارتند از: Internet , application, transport و لايه network interface

زمانيکه برنامه اي نيازمند ارتباط با برنامه موجود بر روي کامپيوتر ديگر باشد ، پروتکل TCP/IP بمنظور تمايز برنامه ها از " سوکت " استفاده مي نمايد .

يک سوکت از سه عنصر: آدرس IP ، شما ره پورت و پروتکل لايه حمل تشکيل مي گردد .

پروتکل TCP/IP ارائه شده توسط مايکروسافت درويندوز ، شامل شش پروتکل : TCP, UDP, ICMP, IGMP, IP, و ARP است .

بمنظور حصول اطمينان از ارسال اطلاعات و دريافت آنان توسط گيرنده ، از پروتکل TCP استفاده مي گردد .( مثلا" ارسال اطلاعات مربوط به کارت اعتباري و اطمينان از صحت دريافت داده در مقصد) .

پروتکل IP ، مسئوليت آدرس دهي و روتينگ داده براي مقصد نهائي را برعهده دارد.

بمنظور بررسي صحت نصب و عملکرد TCP/IP ، از برنامه کاربردي PING استفاده مي شود.

در صورت تمايل به استفاده از يک نام در مقابل يک آدرس IP ، از امکانات متعددي بمنظور ذخيره سازي اسامي کامپيوتر و آدرس IP مربوطه استفاده مي گردد. Hosts file Lmhosts file, DNS, WINS ، نمونه هائي در اين زمينه مي باشند.

در موارديکه از روش توزيع غير مستقيم بمنظور ارسال يک بسته اطلاعاتي از کامپيوتر مبداء به کامپيوتر مقصد استفاده مي گردد ، کامپيوتر مبداء مي بايست در ابتدا آدرس MAC مربوط به روتر را مشخص نمايد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


مباني دا ت نت ( بخش دوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۳۷ مراجعه امروز
۵۲۵۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مباني دا ت نت ( بخش دوم )
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۶/۱۳۸۲ اين مقاله ۲۰۸۷ بار مطالعه شده است
۱۲ نفر تا به حال به اين مقاله رای داده اند.

در بخش اول اين مقاله به بررسي و معرفي فريمورک دانت پرداخته گرديد. در اين بخش به بررسي CLR ، يکي از مهمترين عناصر موجود در فريمورک دات نت خواهيم پرداخت .
درابتدا لازم است تعريفي از CLR را داشته باشيم. CLR ، محيطي است که برنامه هاي دات نت بکمک آن اجراء مي گردند . برنامه هاي نوشته شده توسط هر يک از زبان هاي سازگار با دات نت پس از ترجمه توسط کمپايلر مربوطه به MSIL)Microsoft Intermediate language) ، ترجمه مي گردند ( به زبان فوق ، IL نيز گفته مي شود ) .

CLR از نماي نزديک
Common Type System(CTS) ( Data Types ,...)
Intermediate Language(IL) to native code compilers Execution Support (traditional runtime functions) Security
Garbage Collection,Stack Walk ,Code manager
Class Loader and memory layout

هدف از طراحي CLR ، نيل به اهداف زير بوده است :

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

برخورد اتوماتيک با مقولاتي همچون مديريت حافظه
در دات نت ، مجموعه اي گسترده از زيرساخت هاي برنامه نويسي بصورت اتوماتيک توسط CLR ارائه مي گردد. مديريت حافظه ، نمونه اي مناسب در اين زمينه است . پياده کنندگان نرم افزار بکمک ويژوال بيسيک در زماني نه چندان دور همواره نگران مسئله مديريت حافظه بودند . پياده کنندگان ويژوال بيسيک اينک و با استفاده از CLR ، نگراني خاصي در ارتباط با مديريت حافظه ، نخواهند داشت. ( CLR ، داراي توابع متنوعي در رابطه با مديريت حافظه است ) . برنامه نويساني که از ++C در محيط دات نت استفاده مي نمايند ، ديگر ضرورتي به استفاده از CoCreateInstance براي نمونه سازي يک کلاس و يا استفاده از malloc بمنظور اختصاص حافظه ، نخواهند بود. با بکارگيري امکانات CLR در ارتباط با مديريت حافظه مي توان با بخدمت گرفتن يک عبارت ساده خواسته خود را مشخص و CLR در زمان مورد نظر ، عمليات اختصاص حافظه را انجام خواهد داد . عملياتي ديگر، نظير جمع آوري اطلاعات زائد از حافظه ، از ديگر فرآيندهاي ضروري و مهمي است که توسط CLR و در ارتباط با مديريت حافظه انجام مي گردد.

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

متا ديتا
متاديتا ، " داده ئي در رابطه با داده " بوده و مي توان آن را بعنوان سطحي عميق تر از داده نسبت به خصلت هاي سطح سيستم در نظر گرفت. متاديتا ، عنصر اساسي براي تحقق اصل برنامه نويسي ساده ( تسهيل در امر برنامه نويسي ) مورد حمايت CLR است. متاديتا توسط يک کمپايلر توليد و بصورت اتوماتيک در يک فايل EXE و يا DLL ذخيره مي گردد.فرمت آن بصورت باينري است ولي فريمورک يک API بمنظور صدور متاديتا به / از يک XML Schema و يا يک کتابخانه نوع COM ارائه مي دهد . از Schema XML ، مي توان در بازيابي ورژن و ساير اطلاعات مرتبط با يک عنصر ترجمه شده ، استفاده کرد. اطلاعات ارائه شده توسط متاديتا ، مجموعه گسترده اي را شامل مي شود :

تشريح يک واحد بکارگيري ( اسمبلي ناميده مي شود ) : نام ، ورژن ، فرهنگ ( که مي تواند اطلاعاتي نظير زبان پيش فرض کاربر را مشخص نمايد) ، يک کليد عمومي براي بررسي، نوع هاي صادر شده توسط اسمبلي ، وابستگي ها به ساير اسمبلي ها ، مجوزهاي امنيتي مورد نياز بمنظور اجراء
کلاس هاي پايه و اينرفيس هاي استفاده شده توسط اسمبلي
خصلت هاي سفارشي : تعريف شده توسط کاربرو يا کمپايلر
برخي از موارد فوق نظير خصلت هاي سفارشي ، انتخابي مي باشند .کمپايلرها يکي از کاربران و استفاده کنندگان متا ديتا مي باشند . مثلا" يک کمپايلر مي تواند يک ماژول توليد شده نوسط يک کمپايلر متفاوت ديگر را بررسي و از متا ديتا بمنظور استفاده و درج ( Import ) ، نوع هاي cross-language استفاده نمايند. کمپايلرها مي توانند متاد يتا هائي را در ارتباط با ماژول هاي ترجمه شده خود نيز توليد نمايند.
متا ديتا يکي از روش هائي است که CLR را قادر به حمايت از مجموعه گشترده اي از ابزارها مي نمايد . برخي از استفاده کنندگان متاديتا ، عبارتند از :

طراحان
ديباگرها
توليد کنندگان پروکسي
ساير کمپايلرها
مرورگرها نوع / شي

حمايت و ارتباط چندين زبان
مهمترين ويژگي و بنوعي هدف CLR ، حمايت از زبانهاي برنامه نويسي متفاوت و امکان ارتباط ( همبستگي ) بين زبانهاي مختلف است .با بهره گيري از يک سيتم نوع ( CTS ) و با اعمال تمامي کنترل هاي لازم در ارتباط با فراخواني اينترفيس، CLR امکان ارتباط مناسب و شفاف بين زبان هاي برنامه نويسي را فراهم مي نمايد.
درگذشته يک زبان برنامه نويسي بکمک عناصر COM ، قادر به نمونه سازي و استفاده از عناصر نوشته شده توسط يک زبان برنامه نويسي ديگر بود .در برخي موارد، فراخواني اينگونه عناصر، مشکلاتي را از بعد مديريتي ايجاد مي کرد. بهرحال Subclassing يک عنصر نوشته شده به زبان ديگر، مستلزم وجود پتانسيلي خاص بودکه صرفا" پياده کنندگان حرفه اي قادر به انجام و استفاده از آن بودند. در فريمورک دات نت، مي توان از يک زبان بمنظور subclass ( کلاس زيرمجموعه که از يک کلاس پايه ديگر مشتق شده باشد ) يک کلاس نوشته شده به زبان ديگر استفاده نمود. کلاس نوشته شده به زبان ويژوال بيسيک مي تواند از يک کلاس پايه نوشته شده با ++C و يا کوبال به ارث رسيده مي باشد. برنامه VB ، ضرورتي به آگاهي از زبان استفاده شده بمنظور نوشته کلاس پايه ، نخواهد داشت .بدين ترتيب ، زمينه بهره گيري و استفاده از تمامي مزاياي توارث در پياده سازي فراهم و در صورتيکه کلاس پايه تغيير نمايد ، ضرورتي به ترجمه مجدد کلاس زير مجموعه نخواهد بود.چگونه اين کار انجام مي شود ؟ اطلاعات ارائه شده توسط متاديتا ، اين امر را امکان پذير مي سازند . در اين رابطه هيچگونه IDL(Interface Definition Language در دات نت وجود نداشته و يک اينترفيس کلاس صرفنظر از زبان استفاده شده براي توليد آن ، همواره يکسان مشاهده خواهد شد. CLR از متايتا بمنظور مديريت تمامي اينترفيس ها و فراخواني بين زبان ها استفاده مي نمايد توارث بين زبانها ، زمينه تحقق يک معماري باز را فراهم خواهد کرد .

سيتم نوع
يکي از اجزاء مهم CLR که حضور و عملکرد آن تاثير مستقيمي بر حمايت از چندين زبان را بدنبال دارد ، CTS)Common Type System) است .در سيستم فوق ، تمامي نوع هاي داده (حتي نوع هائي نظير : Long و Boolean )، بعنوان شي پياده سازي شده اند . بدين ترتيب هماهنگي بين نوع ها در يک سطح پائين تر و بمنظور سازگاري بيشتر بين زبان ها ، صورت مي پذيرد. با توجه به اينکه تمامي زبانها از نوع هاي کتابخانه اي يکساني استفاده مي نمايند ، فراخواني يک زبان از زبان ديگر نيازمند تبديل نوع، نخواهد بود.
يکي از مهمترين ويژگي هاي دات نت ، namespace است .namespace ، امکان سازماندهي کتابخانه هاي شي را بصورت سلسله مراتبي فراهم مي نمايد.بدين ترتيب امکان مراجعه به آنان بسادگي و به دور از هرگونه نا همخواني و يا تضادي ، محقق خواهد شد .بمنظور استفاده از امکانات موجود در کتابخانه هاي کلاس ، مي بايست در ابتدا براي آنان يک مرجع ايجاد نمود.مرجع فوق ،امکان استفاده از نوع ها را بصورت خلاصه در کد نوشته شده ،فراهم خواهد آورد. در ويژوال بيسيک با استفاده از يک عبارت Import ، اين امر محقق خواهد شد. يک ماژول فرم ويژوال بيسيک در دات نت مي تواند بصورت زير ، آغاز گردد :

Imports System.WinForms
Imports MyDebug = System.Diagnostics.Debug

در اولين خط ، امکان استفاده از تمامي خصلت ها و متدها ي استاندارد مرتبط با فرم ها ، براي کد موجود درماژول ، فراهم خواهد شد.دومين خط ، از يک نام مستعار استفاده مي نمايد. يک شاخه از ساختار سلسله مراتب شي ( يک مسير مشخص بر روي ساختار درختي ) ، مي تواند شناسه خاص خود را داشته باشد که صرفا" در ماژول مربوط معتبر خواهد بود. در ماژول مورد نظر مي توان بمنظور مراجعه به شي System.Diagnostics.Debug ، از MyDebug استفاده گردد.

بکارگيري و اجراء
واحد بکارگيري همانگونه که قبلا" اشاره گرديد ، يک اسمبلي است. اسمبلي، مي تواند شامل يک و يا چندين فايل بهمراه ويژگي خود تشريحي باشد . اسمبلي شامل يک "مانيفست" بوده که تمامي متاديتا صادر شده توسط اسمبلي و ساير اطلاعات لازم بمنظور بمنظور بکارگيري و اجراء را مشخص مي نمايد. يک اسمبلي داراي ورژن خاص خود است . اسمبلي ها با يکديگر ترکيب و برنامه ها را بوجود مي آورند . يک برنامه داراي يک و يا چندين اسمبلي بوده و ممکن است شامل فايل ها و داده هاي اختصاصي برنامه نيز باشد .
کد مبداء ماژول ها ي يک اسمبلي به IL)Intermediate Language) ترجمه مي گردند . در ادامه و قبل از اجراء ، IL به کد مختص يک ماشين ترحمه خواهد شد. ترجمه با استفاده از روش هاي متفاوت و بدفعات ممکن است محقق گردد. معمولا" ترجمه به کد مختص يک ماشين ، صرفا" يک مرتبه انجام و نتيجه براي استفاده در موارد بعد و آتي Cache خواهد شد. CLR ، شامل مجموعه اي از کمپايلرهاي JIT)Just-In-Time) است که مسئوليت تبديل IL به کد مختص يک ماشين را برعهده دارند . بدين ترتيب ، مي توان برنامه ها ي نوشته شده در دات نت را بصورت کد IL ترجمه شده ، توزيع نمود. در ادامه با استفاده ازکمپايلرهاي دات نت بر روي يک ماشين خاص ، کدهاي بهينه و مختص آن ماشين توليد خواهد شد.در سناريوي فوق امکان استفاده از اسکريپت ها بهمراه ماژول نيز وجود دارد ، درچنين مواردي آنان قبل از استفاده ترجمه خواهند شد. در سيستم هاي موجود ، اسکريپت هاي تفسير شده ( در ASP و يا Windows Scriptiong Host ) ، هرگز ترجمه نمي شوند. در دات نت ، اينچنين اسکريپت هائي در اولين مرتبه دستيابي به IL تبديل و در ادامه به کد مختص ماشين مربوطه تبديل و براي استفاده مجدد cache ، خواهند شد.
در بخش سوم اين مقاله ، به بررسي کلاس هاي پايه فريمورک دات نت خواهيم پرداخت

کيفيت مقاله :
عالی خوب متوسط ضعيف


مباني دا ت نت ( بخش سوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۴۰ مراجعه امروز
۵۲۵۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مباني دا ت نت ( بخش سوم )
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۶/۱۳۸۲ اين مقاله ۱۸۵۶ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.
آنچه تاکنون گفته شده است :
بخش اول : معرفي فريمورک دانت
بخش دوم : بررسي CLR
در اين بخش به بررسي کلاس هاي پايه فريمورک دات نت و اينترفيس هاي کاربر و برنامه خواهيم پرداخت .

در بخش دوم اين مقاله با اولين لايه فريمورک دات نت ( CLR ) آشنا شديم . در ادامه بر روي لايه بعد متمرکز و به بررسي امکانات ارائه شده خواهيم پرداخت . اين لايه ، کلاس هاي پايه فريمورک دات نت ناميده شده و مسئوليت ارائه سرويس ها و مدل هاي اشياء براي داده ، عمليات ورودي و خروجي ، امنيت و موارد ديگر را بر عهده دارد . نسل بعدي ADO که ADO.NET ناميده مي شود در اين لايه قرار دارد . در لايه فوق ، امکانات و پتانسيل هاي لازم بمنظور انجام عمليات مرتبط با XML نيز ارائه شده است . پارسر و تبديل کننده XSL ، نمونه هائي از پتانسيل هاي موجود در اين لايه بمنظور کار با اسناد XML مي باشند.
اکثر امکانات و پتانسيل هاي مورد نيازي که ضرورت فراگيري آنان براي هر برنامه نويس در رابطه با يک زبان برنامه نويسي وجود دارد ، به کلاس هاي فريمورک منتقل شده است . مثلا" تابع Sqr که در ويژوال بيسيک از آن بمنظور محاسبه جذر يک عدد استفاده مي گردد در دات نت وجود نداشته و اين تابع با متد System.Math.Sqrt موجود در کلاس هاي فريمورک جايگزين شده است .
تمامي زبانهاي سازگار با دات نت قادر به استفاده از کلاس هاي فريمورک مي باشند . بدين ترتيب در يک زبان برنامه نويسي نظير کوبال و يا ويژوال بيسيک دات نت ، براي محاسبه جذر يک عدد از تابع مشابهي استفاده خواهد شد .رويکرد فوق ، پيوستگي و ارتباط مناسب بين زبان هاي متفاوت برنامه نويسي را بدنبال خواهد داشت . تمامي زبان ها به روشي مشابه از متد System.Math.Sqrt استفاده و به کد يکساني دستيابي خواهند داشت ( اختلاف موجود صرفا" به گرامر استفاده از متد مورد نظر در زبان مربوطه ، برمي گردد) .
اکثر قابليت ها و پتانسيل موجود در کلاس هاي پايه فريمورک در يک namespace عظيم و با نام System ارائه شده است . namespace فوق ، شامل چندين namespace زيرمجموعه ديگر است . مثلا" Microsoft.VisualBasic شامل Runtime ويژوال بيسيک و کلاس ها ئي بمنظور ترجمه و توليد کد مورد نظر براي برنامه هاي نوشته شده به زبان ويژوال بيسيک دات نت است .

اينترفيس هاي کاربر و برنامه
در بالاترين لايه ، دات نت روش هائي را بمنظور تفسير و مديريت رابط هاي کاربر ( فرم هاي ويندوز ، فرم هاي وب ، برنامه هاي کنسول ) و اينترفيس مورد نيازعناصر از راه دور ( سرويس هاي وب ) ، ارائه مي نمايد .

اينترفيس کاربر : فرم هاي ويندوز
فرم هاي ويندوز ( به آنان WinForms هم مي گويند ) روشي پيشرفته ويکپارچه بمنظور ايجاد برنامه هاي Desktop استناندارد سي و دو بيتي را ارائه مي نمايند. تمامي زبان ها ي سازگار با دات نت ، قادر به استفاده از پتانسيل فرم هاي ويندوز در مقابل روش هائي که در حال حاضر استفاده مي نمايند ، خواهند بود ( MFC و يا Win32API در ++C و يا موتور VB Forms در ويژوال بيسيک ) . فرم هاي ويندوز ، مجموعه اي قدرتمند و يکپارجه از کنترل ها و توابع عملياتي را براي تمامي زبانها ارائه و بعنوان بخشي از کلاس هاي فريمورک در namespace با نام System.WinForms ،ارائه شده است . بدين ترتيب امکان استفاده از فرم هاي ويندوز توسط تمامي زبان هاي مبتني بر دات نت وجود خواهد داشت . با استفاده از Drag & Drop Designer فرم هاي ويندوز ، مي توان اقدام به ايجاد ويژوال فرم هاي مورد نظر بمنظور استفاده در هر زبان برنامه نويسي نمود.
در ويندوز DNA ، تعداد زيادي از برنامه هاي داخلي سازمان ها و موسسات مبتني بر مرورگر بودند ، چراکه هزينه نصب و نگهداري يک برنامه سرويس گيرنده بر روي صدها و يا هزاران ايستگاه بسيار قابل تامل بود . فرم هاي ويندوز و فريمورک دات نت داراي پتانسيل لازم بمنظور بهينه سازي اقتصادي ( مقرون بصرفه ) نصب و نگهداري يک برنامه سرويس گيرنده با توانائي اجراء بر روي هزاران ايستگاه مي باشند . يک برنامه مبتني بر فرم هاي ويندوز ،نسبت به برنامه سرويس گيرنده اي که با ويژوال بيسيک نوشته شده باشد ، بسادگي نصب و بهنگام خواهد شد . با استفاده از دستوري نظير : XCOPY ، امکان بکارگيري برنامه بسادگي و بسرعت فراهم و در اين رابطه نيازي به ريجستر نمودن عناصري وجود نخواهد داشت . نصب و بهنگام سازي اينچنين برنامه هائي بمراتب ساده تر از وضعيتي است که قبلا" شاهد آن بوده ايم.بدين ترتيب طراحي و پياده سازي برنامه هائي که نيازمند يک رابط کاربر قدرتمند براي تعداد زيادي از کاربران مي باشند ، با استفاده از دات نت بخوبي محقق و عملي خواهد شد ( نسبت به ويندوز DNA ) .

اينترفيس کاربر : فرم هاي وب
فرم هاي وب ،يکي از بخش هاي مهم ASP.NET محسوب و رابط کاربر مبتني بر يک مرورگر وب را ارائه مي نمايند. فرم هاي وب، نسل جديدي از پياده سازي اينترفيس هاي مبتني بر وب را ارائه مي نمايند ( جداسازي لي اوت از منطق). فرم هاي وب شامل دو بخش مجزاء مي باشند : يک تمپليت که شامل اطلاعات لي اوت مبتني بر HTML براي تمامي عناصر رابط کاربر و بخش دوم که شامل تمامي منطق لازم براي ارتباط با رابط کاربر است . بدين ترتيب ، اطلاعات مربوط به کنترل ها بهمراه خصايص و لي اوت مربوطه در يک بخش و کدهاي مربوطه در بخش ديگر مستقر خواهند شد. کدها ي نوشته شده رفتار کنترل ها را نظارت و در صورت بروز يک رويداد ، روتين هاي مربوطه فعال خواهند شد .
فرم هاي وب داراي امکانات متعددي مي باشند . کنترل هاي موجود بر روي فرم هاي وب بر روي سرويس دهنده اجراء ولي حضور آنان بمنزله سرويس گيرنده خواهد بود .بدين ترتيب امکانات و شرايط مطلوبي براي ايجاد اينترفيس هاي قدرتمند فراهم که شباهت زيادي به اينترفيس هاي Win32 استفاده شده در برنامه هاي Desktop خواهند داشت . اينترفيس هاي وب ، داراي هوشمندي لازم بمنظور ارتباط با مرورگرهاي متفاوت مي باشند ( بهينه سازي خروجي براي هر يک از مرورگرهاي خاص ) . امکان استفاده از فرم هاي وب ، براي تمامي زبان ها ي سازگار با دات نت وجود خواهد داشت . اين بدان معني است که مي توان کدهاي لازم ( منطق ) براي ارتباط با بخش ويژوال يک فرم را با استفاده از هر يک از زبان هاي حمايت شده نوشت . بدين ترتيب ، امکان طراحي و پياده سازي اينترفيس هاي وب انعطاف پذيري فراهم که مي توان از آنان در مجموعه گسترده اي از زبان ها ، استفاده بعمل آورد.

کنترل هاي سرويس دهنده
پياده کنندگان ويژوال بيسيک با ايده کنترل ها ، آشنائي لازم را دارند . کنترل ها ، عناصر رابط کاربر با قابليت استفاده مجددي مي باشند که بمنظور ايجاد يک فرم از آنان استفاده مي گردد . اين نوع کنترل ها در فرم هاي وب ، کنترل هاي سمت سرويس دهنده ، ناميده مي شود. کنترل هاي سمت سرويس دهنده، در حقيقت يک پروکسي را بر روي سرويس دهنده براي يک عنصر رابط کاربر که بر روي يک فرم وب و يا يک صفحه ASP است ، ايجاد مي نمايند. کنترل هاي سمت سرويس دهنده ، با منطق محلي در صورت ضرورت ارتباط و در ادامه هوشمندانه رابط کاربر خود را بعنوان HTML تفسير و در صورت ضرورت خروجي مورد نظر را براي هر صفحه حاوي کنترل هاي سمت سرويس دهنده ، ارسال مي نمايند .
کنترل ها ي سمت سرويس دهنده ، بمنظور تفسير HTML براي طيف متنوعي از مرورگرها و هماهنگي با رويدادها ئي که بر روي صفحه درحال اجراء بر روي سرويس گيرنده محقق مي گردند ، مي بايست از هوشمندي مناسبي برخوردار باشد . با استفاده از مجموعه اي گسترده از کنترل هاي ارائه شده بهمراه ويژوال استوديو دات نت ، مي توان اينترفيس هاي مبتني بر وبي را ايجاد که شباهت بسيار زيادي به اينترفيس هاي Win32 خواهند داشت . يکي از مهمترين ويژگي هاي مهم و در عين حال جالب کنترل هاي سمت سرويس دهنده ، توانائي آنان در ارتباط با مديريت وضعيت خود است . بمنظور مديريت وضعيت يک صفحه ، ضرورتي به نوشتن کدهاي خاصي در ASP.NET وجود نخواهد داشت .

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

اينترفيس هاي برنامه : سرويس هاي وب
طراحي و پياده سازي برنامه هاي کامپيوتر، بسمت نسل جديدي از برنامه هاي غير متمرکز در حال تغيير و تحول است . در ساليان گذشته ، اغلب برنامه ها سرويس هاي اساسي و مورد نياز خود را از طريق سيستم عامل مربوطه ، دريافت مي کردند ( نظير سيستم فايل ) . در ادامه ، قابليت استفاده از توان و پتانسيل موجود در هر نرم افزار براي ساير نرم افزارها فراهم و بدين ترتيب امکان بهره گيري و ارتباط با عناصر نوشته شده فراهم گرديد . تمامي تلاش هاي انجام شده بر اين واقعيت استوار بود که با بکارگيري پتانسيل ها ي ارائه شده ، توان عملياتي يک نرم افزار افزايش يابد و کمتر به نياز فوق بصورت بنيادي و ريشه اي نگاه مي گرديد . در اين رابطه مي بايست فونداسيون لازم بمنظور ارتباط بين برنامه ها فراهم و تمامي برنامه ها با اتکاء به زيرساخت ايجاد شده از خدمات يکديگر در جهت ارائه بهينه خدمات خود استفاده نمايند. سرويس هاي وب ، رويکرد جديدي در اين زمينه مي باشند. در سرويس وب ، قابليت هاي نرم افزار بعنوان يک سرويس عرضه مي شود . با استفاده از سرويس هاي وب ، طراحان و پياده کنندگان مي توانند با ترکيب و بکارگيري منابع محلي و از راه دور ، يک سيستم توزيعي و پيوسته را ايجاد نمايند .
در دات نت ، سرويس هاي وب بعنوان بخشي از ASP.NET پياده سازي مي گردند( ASP.NET ، مسئول ارائه تمامي اينترفيس هاي وب است ) . بدين ترتيب امکان گفتگوي برنامه ها با يکديگر و از طريق وب فراهم مي گردد(استفاده از SOAP ) . پياده کنندگان در اين رابطه با انجام عملياتي مختصر ، قادر به استفاده از سرويس هاي وب خواهند بود.آنان مي بايست به عضوي از سرويس وب شده و فريمورک دات نت ساير مسائل موجود را دنبال و مديريت خواهد کرد . رويکرد فوق، تغيير معماري برنامه هاي وب را بدنبال داشته و امکان ارتباط سرويس هاي وب با يکديگر و بر روي بستر وب ، ميسر خواهد شد . سرويس هاي وب داراي نقش و جايگاهي بسيار مهم در توليد نسل جديدي از برنامه هاي مبتني بر وب مي باشند . سرويس هاي وب، گزينه اي مناسب براي جايگزين شدن با برخي از پکيج هاي نرم افزاري خواهند بود.

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


ايمن سازي سرويس دهنده FTP ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۱۴ مراجعه امروز
۴۸۳۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ايمن سازي سرويس دهنده FTP
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۶/۱۳۸۲ اين مقاله ۶۲۵ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

سرويس FTP)File Transfer Protocol) يکي از قديمي ترين و متداولترين سرويس هاي موجود بر روي اينترنت است . از سرويس فوق ، بمنظور ارسال و دريافت فايل در يک شبکه استفاده مي گردد. سرويس FTP ، توسط عموم کاربران اينترنت استفاده و بعنوان استانداردي براي ارسال و دريافت فايل در شبکه ( اينترانت ، اينترنت ) توسط اکثر سيستم هاي عامل پذيرفته شده است
ويندوز 2000 بهمراه خود از يک سرويس دهنده FTP استفاده مي نمايد که بعنوان بخشي از IIS در نظر گرفته مي شود. مديران سيستم با استفاده از سرويس فوق و ترکيب آن با ساير امکانات ارائه شده توسط ويندوز ، قادر به ايجاد و پيکربندي يک سايت FTP با ضريب امنيتي مناسبي خواهند بود.در ادامه و بمنظور ايمن سازي يک سايت FTP ، پيشنهادات متعددي ارائه مي گردد.

نکته اول : دستيابي از طريق Anonymous account را غير فعال نمائيد . دستيابي از نوع Anonymouse، بصورت پيش فرض و پس از نصب اولين سرويس دهنده FTP فعال مي گردد. روش فوق ، امکان دستيابي به سايت FTP را بدون نياز به يک account خاص فراهم مي نمايد. بدين ترتيب استفاده کنندگان بصورت کاملا" ناشناس قادر به استفاده از منابع موجود بر روي سرويس دهنده FTP بوده و امکان مشاهده سودمند ترافيک سايت و در صورت ضرورت، رديابي آنان وجود نخواهد داشت . با حذف قابليت دستيابي Anonymous ، امکان دستيابي به سايت FTP صرفا" در اختيار کاربراني قرار خواهد گرفت که داراي يک account معتبر باشند.
پس از تعريف هر يک از account هاي مورد نظر، مي توان در ادامه با استفاده از ACL)Access Control List) کنترل ها و مجوزهاي مربوط به دستيابي به دايرکتوري FTP ( محل فيزيکي استقرار سايت FTP بر روي ديسک ) را تعريف و مشخص نمود . در اين رابطه مي توان از مجوزهاي NTFS استفاده کرد. به منظور غير فعال نمودن Anonymous account ، مي توان از طريق صفحه Property مربوط به سايت FTP ( برنامه Internet Information Service ) عمليات مورد نظر را انجام داد .

نکته دوم : فعال نمودن Logging . با فعال نمودن Logging بمنظور اتصال به سايت FTP ، اين اطمينان بوجود خواهد آمد که اطلاعات لازم ( آدرس هاي IP و يا نام کاربران ) در خصوص کاربراني که بصورت موفقيت آميز به سايت متصل شده اند ، ثبت خواهد شد.با استفاده از فايل هاي لاگ که در اين رابطه ايجاد خواهد شد ، مي توان ترافيک موجود بر روي سايت را مشاهده و در صورت يک تهاجم ، امکان رديابي اوليه آن فراهم گردد. بمنظور فعال نمودن ويژگي فوق، کافي است که Chex box مربوطه از طريق صفحه Property مربوط به سايت FTP انتخاب گردد .در ادامه ، فايل هاي لاگ بر اساس فرمتي که مشخص شده است ، ايجاد خواهند شد . استفاده از فايل هاي لاگ ، بمنظور مشاهده و آناليز ترافيک سايت بسيار مفيد خواهد بود.

نکته سوم : تنظيم و پيکربندي مناسب ليست ACL ( ليست کنترل دستيابي ) .دستيتابي به دايرکتوري FTP مي بايست با استفاده از مجوزهاي NTFS و بکارگيري محدوديت هاي ACL ، کنترل گردد . دايرکتوري FTP نبايد داراي گروه Everyone با تمامي امتيازات و مجوزها باشد ( امکان کنترل مجوزها و کاربراني که سايت FTP متصل شده اند وجود نخواهد داشت ) .بدين منظور لازم است بر روي دايرکتوري مربوط به سايت FTP مستقر و با انتخاب گزينه Property و Security Option ، اسامي موجود را حذف و با انتخاب دکمه Add از ليست موجود، Authenticated user را انتخاب کرد . در ادامه مي توان با توجه به سياست هاي موجود مجوز Read,Write و List Folder contents را در اختيار گروه مربوطه قرار داد . در صورتيکه سياست موجود اقتضاء مي کند ، مي توان صرفا" امکان دستيابي Write را در اختيار گروه مربوطه قرار و مجوزهاي Read وList Folder Contents را از آنها سلب نمود .

نکته چهارم : پيکربندي سايت بعنوان دريافت کننده نه ارسال کننده . در صورتيکه صرفا" نياز است که کاربران فايل هائي را براي سرويس دهنده ، ارسال و امکان دريافت فايل از سرويس دهنده را نداشته باشند ، مي توان سايت FTP را بصورت Blind put پيکربندي نمود. بدين ترتيب به کاربران امکان ارسال ( نوشتن ) فايل بر روي سرويس دهنده داده خواهد شد .( امکان خواندن از دايرکتوري FTP وجود نخواهد داشت ) . بدين منظور مي توان پس از انتخاب سايت FTP از طريق Home Directory ، اقدام به تنظيمات مورد نظر نمود.

نکته پنجم : فعال نمودن Disk Quotas. با استفاده از امکانات ارائه شده توسط ويندوز 2000 ، مي توان اقدام به تعيين ظرفيت و يا سهيه ذخيره سازي بر روي ديسک براي هر يک از کاربران نمود..ويژگي فوق ، باعث اعمال محدوديت در رابطه با ميزان فضاي ذخيره سازي مربوط به يک کاربر مي گردد.بصورت پيش فرض ، مالکيت به هر کاربر که در فايلي مي نويسد اعطاء مي گردد . با فعال نمودن و انجام تنظيمات مورد نظر، مي توان پيشگيري لازم در ارتباط با تهاجم به يک سايت FTP را انجام داد ( پر نمودن ظرفيت ديسک ). در صورت تحقق وضعيت فوق ، دامنه اشکال بوجود آمده به ساير سرويس هائي که از فضاي ذخيره سازي ديسک استفاده مي نمايند نيز سرايت خواهد کرد. براي فعال نمودن Quota Management ، بر روي درايو موردنظر مستقر و با کليک سمت راست گزينه Property را انتخاب و در نهايت گزينه Quota Tab انتخاب شود .امکان فوق ، صرفا" در ارتبا ط با پارتيشن هاي NTFS قابل استفاده خواهد بود.استفاده از Disk Quota ، محدود به پارتيش هاي NTFS بوده و علاوه بر اين صرفا" مي تواند در رابطه با يک کاربر استفاده شده وامکان بکارگيري آن در ارتباط با گروه ها وجود نخواهد داشت . با انتخاب دکمه Quota Entries مي توان اقدام به تعريف يک Entry جديد و تعريف محدوديت هاي مورد نظر نمود.

نکته ششم : استفاده از محدوديت زماني براي Logon . با استفاده از امکانات ارائه شده همراه ويندوز 2000 ، مي توان زمان خاصي را براي ورود به شبکه کا ربران تعريف نمود. بدين ترتيب کاربران صرفا" قادر به استفاده از سرويس دهنده در ساعات مشخص شده خواهند بود.ويژگي فوق ، بطرز محسوسي باعث کنترل دستيابي به سايت FTP خواهد شد. براي پيکربندي زمان logon ، از برنامه Active Directory Users and Computers استفاده مي گردد . پس از فعال شدن برنامه فوق ، کاربر مورد نظر را انتخاب و پس از مشاهده صفحه Property مربوطه، با انتخاب دکمه Logon hours از طريق Account Tab ، مي توان اقدام به مشخص نمودن زمان مورد نظر کاربر براي استفاده ازسرويس دهنده نمود.

نکته هفتم : محدوديت دستيابي بر اساس آدرس IP . بمنظور دستيابي به سايت FTP مي توان معيار دستيابي را بر اساس آدرس هاي IP خاصي در نظر گرفت . با اعمال محدوديت فوق ، اقدامات مناسبي بمنظور کنترل دستيابي به سايت در نظر گرفته خواهد شد . بمنظور فعال نمودن ويژگي فوق ، پس از انتخاب سايت FTP از طريق برنامهInternet Information Services و مشاهده صفحه Property ، گزينه Directory Security Tab انتخاب گردد. در ادامه، Denied Access فعال و مي توان با استفاده از دکمه Add آدرس هاي IP تائيد شده را معرفي کرد.

نکته هشتم :ثبت رويدادهاي Audit logon . با فعال نمودن Auditing ( مميزي ) مربوط به رويدادهاي Account Logon ، مي توان تمامي تلاش هاي موفقيت آميز و يا با شکست مواجه شده جهت اتصال به سايت FTP را با استفاده از Security log مربوط به Event Viewer ، مشاهده نمود. مشاهده ادواري اين لاگ مي تواند عامل موثري در کشف ، تشخيص و رديابي تهاجم به يک سايت باشد. (تشخيص مزاحمين و مهاجمين اطلاعاتي ). بمنظور فعال نمودن ويژگي فوق ، از برنامه Local Security Policy و يا Group Policy استفاده مي گردد (Programs|Administrative Tools ) . پس از فعال شدن برنامه فوق و استقرار در Local Policies/audit policy ، مي توان اقدام به تغيير Local Setting به Success و Failure نمود.

نکته نهم : فعال نمودن Strong Password . استفاده از رمزهاي عبور پيچيده ،روشي مناسب بمنظور افزايش امنيت در خصوص ارائه يک سرويس خاص براي کاربران تائيد شده است . با توجه به جايگاه سرويس دهنده FTP ، استفاده از رمزهاي عبور قدرتمند مي تواند عاملي موثر در جهت افزايش امنيت سايت هاي FTP باشد . با استفاده از امکانات ارائه شده در ويندوز 2000 ، مديران سيستم مي توانند کاربران را مجبور به استفاده از رمزهاي عبور مستحکم و قوي نمايند. بمنظور فعال نمودن ويژگي فوق ، از برنامه Local Security Policy و يا Group Policy استفاده مي گردد (Programs|Administrative Tools ) . پس از فعال شدن برنامه فوق و استقرار در Account Policy/Password Policy ، مي توان گزينه Passwords Must Meet Complexity Requirements را فعال نمود . پس از فعال شدن ويژگي فوق ، هر يک از account هاي تعريف شده تابع شرايط و محدوديت هاي زير خواهند بود :

رمز عبور تعريف شده نمي تواند شامل تمام و يا بخشي از نام Account کاربر باشد .
رمز عبور تعريف شده مي بايست داراي طولي به اندازه حداقل شش باشد .
رمز عبور تعريف شده مي تواند شامل کاراکترها ئي از سه گروه از چهار گروه زير باشد :
- حروف الفبائي A-Z
- حروف الفبائي a-z
- ارقام صفر تا نه
- کاراکترهاي خاص ( %,#,$,!)

نکته دهم : فعال نمودن Account Lockout و Account Lockout Threshold .آگاهي و تشخيص رمزهاي عبور يکي از موضوعات مورد علاقه اکثر مهاجمان و برنامه هاي تشخيص دهنده رمز عبوراست .با استفاده از امکانات ارائه شده بهمراه ويندوز 2000 ، مديران شبکه مي توانند تعداد دفعاتي را که يک کاربرسعي در ورود به شبکه مي نمايد و عمليات وي با موفقيت همراه نمي گردد را مشخص و در صورت تحقق شرايط فوق ، account مربوطه غير فعال گردد. با فعال نمودن ويژگي فوق و پيکربندي ميزان آستانه ، مديران شبکه مي توانند عماکرد برنامه هاي تشخييص دهنده رمز هاي عبور و يا مهاجمان اطلاعاتي را محدود و ضريب ايمني را افزايش دهند. بمنظور فعال نمودن ويژگي فوق ، از برنامه Local Security Policy و يا Group Policy استفاده مي گردد (Programs|Administrative Tools ) . پس از فعال شدن برنامه فوق و استقرار در Account Policy/Account Lockout Policy ، مي توان تنظيمات لازم در خصوص Account Lockout duration , Account lockout threshold و Reset account lockout counter after را انجام داد .

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت اول ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۴۳ مراجعه امروز
۵۲۵۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت اول
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۷/۱۳۸۲ اين مقاله ۲۶۰۷ بار مطالعه شده است
۲۴ نفر تا به حال به اين مقاله رای داده اند.

در طي سلسله مقالاتي مي خواهيم با C# بيشتر آشنا شويم. فرض اين مقالات بر اين است كه آشنايي مختصري با زبانهاي برنامه نويسي داريد ، هر چند كار ما تقريبا از صفر شروع مي شود و هدف آن سادگي هر چه بيشتر است.

C# از دو زبان C++ و Java متولد شده است! حاوي بسياري از جنبه هاي C++ مي باشد اما ويژگي هاي شيء گرايي خودش را از جاوا به ارث برده است.

C# اگرچه از C++ گرفته شده است اما يك زبان "خالص" شيء گرا (Object oriented) مي باشد. هر دو زبان ياد شده جزو زبانهاي هيبريد محسوب مي شوند اما طراحان C# اين مورد را به اندازه ي C++ مهم تلقي نكرده اند. يك زبان هيبريد اجازه ي برنامه نويسي با شيوه هاي مختلف را ميسر مي كند. دليل اينكه C++ هيبريد است ، اين است كه قرار بوده تا با زبان C سازگار باشد و همين امر سبب گرديده تا بعضي از جنبه هاي C++ بسيار پيچيده شوند.

زبان سي شارپ فرض اش بر اين است كه شما مي خواهيد تنها برنامه نويسي شيء گرا انجام دهيد و همانند C++ مخلوطي از برنامه نويسي رويه ايي (Procedural) و شيء گرا را نمي خواهيد به پايان برسانيد. بنابراين بايد طرز فكر خودتان را با دنياي شيء گرايي تطبيق دهيد. در ادامه خواهيد ديد كه در سي شارپ هر چيزي شيء است حتي يك برنامه ي سي شارپ.

برنامه ي اول :

Visual studio.net را اجرا كنيد و سپس در صفحه ي ظاهر شده New Project را برگزينيد. حالا از گزينه ي Visual C# projects قسمت Console applications را انتخاب نماييد. نامي دلخواه همانند ex01 را وارد نموده و سپس Ok نماييد. كد زير به صورت خودكار براي شما توليد خواهد شد:

using System;

namespace ex01
{
///
/// Summary description for Class1.
///
class Class1
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
}
}
}

اگر يك سري از مفاهيم آنرا متوجه نمي شويد اصلا مهم نيست! در مقالات آتي تمام اين موارد مفصل توضيح داده خواهند شد.
متد استاندارد Main در اينجا قسمتي است كه عمليات اصلي برنامه در حالت Console ( شبيه به برنامه هاي تحت داس اما 32 بيتي ) در آن انجام مي شود.
بدون متد Main برنامه هاي سي شارپ قادر به اجرا نخواهند بود. نوع آن در اينجا void تعريف شده است يعني اين متد خروجي ندارد. حتي اگر برنامه هاي استاندارد ويندوز را هم بخواهيد با C# بنويسيد بازهم متد Main حضور خواهد داشت ، هر چند به صورت خودكار ويژوال استوديو آنرا توليد مي كند.

طريقه ي نوشتن توضيحات (Comments) در سي شارپ همانند C++ مي باشد يعني :

/* any comments */

ويا

// any comments

و تنها برنامه نويس براي نوشتن توضيحاتي در مورد كدهاي خود از آنها استفاده مي كند و در خروجي برنامه ظاهر نمي شوند.

فعلا براي پايان قسمت اول از شيء Console و متد WriteLine آن براي نمايش يك جمله ي ساده استفاده مي كنيم. راجع به متدها ، متغيرها و غيره در آينده بيشتر صحبت مي كنيم.
در آخر برنامه ي ما چيزي شبيه به عبارت زير مي باشد:

using System;

namespace ex01
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Hello C#!");
}
}
}

دكمه ي F5 را فشار دهيد تا برنامه اجرا شود.

تعريف متغيرها در سي شارپ:

سي شارپ عناصري را كه بكار مي گيرد همانند اعداد و كاراكترها ، به صورت نوع ها (Types) طبقه بندي مي كند. اين انواع شامل موارد زير مي شوند :
نوع هاي پايه ايي از پيش تعريف شده مانند اعداد و غيره.
نوع هاي تعريف شده توسط كاربر كه شامل STRUCT ها و ENUM ها مي شوند.

نحوه ي تعريف متغيرها از نوع هاي پايه ايي از پيش تعريف شده :
همانطور كه مي دانيد از متغيرها براي نگهداري اطلاعات استفاده مي شود. در سي شارپ ابتدا نوع متغير و سپس نام متغير و در آخر يك سمي كولون بكار برده مي شود. براي مثال :

int a;

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

نوع هاي داده اي پايه ي زير در در سي شارپ به صورت پيش فرض مهيا هستند:

object : نوعي است نامحدود كه مي تواند تمام انواع ديگر را نيز شامل شود. مثال :

object = null;

string : رشته ؛ در اينجا يك رشته توالي كاراكترهاي يونيكد مي باشد. مثال :

string s= "hello";

sbyte : نوع داده ايي صحيح 8 بيتي علامت دار.
byte : نوع داده ايي صحيح 8 بيتي بدون علامت. مثال :

sbyte val = 12;

short : نوع داده ايي صحيح 16 بيتي علامت دار.
ushort : نوع داده ايي صحيح 16 بيتي بدون علامت. مثال :

short val = 12;

int : نوع داده ايي صحيح 32 بيتي علامت دار.
unit : نوع داده ايي صحيح 32 بيتي بدون علامت. مثال :

int val = 12;

long : نوع داده ايي صحيح 64 بيتي علامت دار.
ulong : نوع داده ايي صحيح 64 بيتي بدون علامت. مثال :

Long val1 = 12; long val2 = 34L;

كلا در اينجا u به معناي unsigned است.

float : نوع اعشاري با single precision .
double : نوع اعشاري با double precision . مثال :

float val = 1.23f;

bool : نوع داده ايي Boolean كه مي تواند true و يا false باشد. مثال :

Bool val = true;

char : كاراكتر، دراينجا char يك كاراكتر يونيكد است.

char val = 'h';

به نحوه ي تعريف كاراكتر ها و همچنين رشته ها در سي شارپ دقت كنيد.

decimal : نوع داده ايي دسيمال با 28 رقم معني دار.

decimal val = 1.23M;

يك نكته :

- بهتر است هنگام تعريف يك متغير ، نامي با مسما براي آن انتخاب شود تا در هنگام كار خواندن كد ساده تر گردد. همچنين رسم شده است كه نوع متغير را به صورت خلاصه به نام متغير اضافه مي كنند. براي مثال بجاي FirstName بهتر است بنويسيم strFirstName . به اين نوع نگارش Hungarian notation مي گويند.
- تمام نوع هاي پيش فرض تعريف شده در سي شارپ شيء هستند. در آينده بيشتر در اين مورد صحبت خواهيم كرد.

مثال اين قسمت :

يك برنامه ي console جديد در را VS.NET باز كنيد. نام آنرا در ابتدا ex02 انتخاب نماييد. در اينجا مي خواهيم دو متغير رشته ايي و صحيح را تعريف و سپس در خروجي نمايش دهيم.

كد نهايي به صورت زير مي باشد:

using System;

namespace ex02
{
///
/// Summary description for Class1.
///
class Class1
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
int intVar1 = 0;

int intVar2;
intVar2=1;

int intV3=15 , intV4 = 12;

string strText1 = "abcd";

Console.WriteLine(
"The value for variables are : \n intVar1="+intVar1 +
"\n intVar2="+ intVar2 +
"\n intV3=" + intV3 +
"\n intV4=" + intV4 +
"\n strText1=" + strText1);

Console.WriteLine("\n\n Press any key to terminate");
Console.ReadLine(); // pause screen!

}
}
}

نكاتي در مورد كد فوق:

- بك اسلش ان ، در زبانهاي مشتق شده از سي به معناي new line مي باشد.
- در كد فوق نحوه ي تعريف چند متغير در يك خط و حالتهاي مقدار دهي مختلف را ملاحظه مي كنيد.
- از متد ReadLine براي نگه داشتن خروجي و مشاهده ي آن در اينجا استفاده كرديم.
- عادت كنيد به صورت دندانه دار كد بنويسيد. اينكار خوانايي كد را صد برابر مي كند. در اينجا كدهاي داخل متد main ، كاملا چند دندانه از آكولادهاي باز و بسته كردن آن جلو تر هستند.
- در كد بالا در متد WriteLine اعداد و رشته ها با هم جمع شده اند! اين مورد بدليل وجود overload هاي زياد اين تابع و ... ميسر گشته است. اصلا به آن دل نبنديد! چون در آينده كامپايلر سي شارپ اگر چنين اعمالي را در جاهاي ديگري مرتكب شويد به شدت با شما برخورد خواهد كرد!! براي جمع كردن اعداد با رشته ها حتما بايد عدد به رشته تبديل گردد و بعد ... . در اين مورد در مقالات بعدي بحث خواهد گرديد.

در مورد كلاسها و using و namespace و غيره در آينده بيشتر صحبت خواهيم كرد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت دوم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۴۶ مراجعه امروز
۵۲۶۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت دوم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۷/۱۳۸۲ اين مقاله ۱۸۸۰ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

مقدمه :

در اين قسمت مي خواهيم با يك سري از اصول اوليه ي شيء گرايي در سي شارپ كمي آشنا شويم. لازم به ذكر است ، بسياري از مواردي كه در اين قسمت مطرح مي شوند فقط براي آشنايي شما است و در آينده بيشتر بحث و مرور خواهند شد.

آشنايي با فضاهاي نام (NameSpaces) :

فضاهاي نام روشي براي مديريت كد نويسي هستند. براي مثال آنها ايجاد شده اند تا تداخلي بين نام هاي توابع در برنامه شما رخ ندهد. اين مساله در پروژه هاي بزرگ خود را نشان مي دهد و ممكن است دو آيتم در يك پروژه نام هاي يكساني را پيدا كنند. بدين وسيله اين شانس تصادم و تداخل كاهش پيدا مي كند. براي ايجاد يك فضاي نام به صورت زير عمل مي شود:

namespace anyName
{
……..

Class anyClassName
{
……….
}

…….

}

يكي از فضاهاي نام پايه اي در دات نت فريم ورك ، فضاي نام System مي باشد. براي استفاده از آن مي توان از كد زير كمك گرفت :

using System;

تمام فضاهاي نام به صورت پيش فرض public مي باشند و در خارج از كد شما قابل دسترسي هستند. روش استفاده از آنها به صورت زير است:

ProjectName.NameSpace.ClassName.MemberName

نكته :
اگر دقت كرده باشيد هنگامي كه كرسر ماوس را روي هر آيتمي در منوي autocomplete نگه مي داريد و يا آنرا انتخاب مي كنيد يك راهنماي كوچك نمايش داده مي شود كه در حقيقت كامنت مربوط به آن تابع مي باشد. روش نوشتن چنين كامنت حرفه اي كه در منوهاي ويژوال استوديو ظاهر شود به صورت زير است كه بهتر است (!) قبل از هر تابع يا خاصيت يا كلاس و .... نوشته شود

///
///
///
///

كلاس ها :

چون سي شارپ تمام سر و كارش با كلاس ها است بنابراين بايد در مورد نحوه ي تعريف و استفاده از آنها تسلط كافي داشته باشيم.

يك پروژه ي جديد console در VS.NET باز كنيد و نام آنرا در ابتدا ex03 وارد نماييد.
بعد از باز شدن پروژه ، از منوي Project گزينه ي Add class را انتخاب كنيد تا كلاسي جديد به نام clsDate.cs را اضافه نماييم. ساختار فايل ايجاد شده توسط VS.NET به صورت زير است :

using System;

namespace ex03
{
///
/// Summary description for clsDate.
///
public class clsDate
{
public clsDate()
{
//
// TODO: Add constructor logic here (chashm!)
//
}
}
}

تابع يا متد clsDate كه در اينجا به صورت پيش فرض ايجاد شده است اصطلاحا سازنده (constructor) نام دارد. اين تابع هر بار كه يك شيء جديد از كلاس مي سازيم به صورت خودكار اجرا مي شود.

از اين كلاس مي خواهيم براي نمايش تاريخ/ ساعت و غيره استفاده كنيم.

براي مثال مي خواهيم تاريخ جاري سيستم را به صورت يك خاصيت از اين كلاس دريافت كنيم. براي اين منظور كد زير را به برنامه اضافه مي نماييم:

public string currentSystemDate
{
get
{
return System.DateTime.Today.ToString() ;
}
}

توضيح كد فوق :

خاصيتي را كه مي خواهيم از برنامه دريافت كنيم با كلمه ي كليدي get معرفي مي نماييم. هر چيزي كه اين قسمت برگرداند خروجي currentSystemDate خواهد بود. اين دستور زبان كه در بالا معرفي شد استاندارد است و در همه جا به يك صورت تعريف و بكار برده مي شود. پس شكل آنرا به خاطر بسپاريد.
از كلمه ي كليدي return براي برگرداندن يك خروجي از خاصيت و يا تابع استفاده مي شود.

براي استفاده از اين خاصيت جديد ، در فايل Class1.cs كه متد main برنامه ي ما در آنجا قرار دارد به صورت زير عمل مي كنيم :

clsDate m_var = new clsDate(); // initialize variable
Console.WriteLine ( m_var.currentSystemDate );
Console.ReadLine();//pause!

توضيح كد فوق :

براي استفاده از يك كلاس بايد يك متغير از آن را تعريف كنيم. در هر زباني يك سري نوع هاي استاندارد مانند int و string و غيره وجود دارند. كلاس هم در حقيقت يك نوع داده ي بسيار بسيار قدرتمند به شمار مي آيد. براي تعريف يك متغير از نوع جديد روش كار مانند سابق است. براي مثال زماني كه يك متغير عدد صحيح را تعريف مي كنيد به صورت زير عمل مي شود :

int i=0;

راي تعريف يك متغير از نوع داده اي كه خودمان تعريف كرده ايم نيز بايد به همين صورت عمل شود.

clsDate m_var = new clsDate();

از كلمه ي كليدي new اينجا به صورت استاندارد براي مقدار دهي اوليه به اين متغير جديد استفاده مي نماييم.

سپس به روش دستيابي به اين خاصيتي كه به كلاس اضافه كرده ايم مي رسيم.

m_var.currentSystemDate

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

عموما از خاصيت ها براي برگرداندن و يا تنظيم يك مقدار ساده استفاده مي شود و در آنها عمليات پيچيده اي مد نظر نمي باشد.

توضيحي در مورد ; () System.DateTime.Today.ToString
استفاده از خواص :

شما به ويژگي هاي يك شيء با استفاده از خواص آن مي توانيد دسترسي پيدا كنيد. يك property عضوي است كه امكان دسترسي به ويژگي شيء يا كلاس را فراهم مي كند. براي مثال طول يك رشته (string) ، سايز يك فونت ، عنوان يك فرم و نام يك مصرف كننده ، خاصيت هستند .
بسياري از اشياء ذاتي دات نت فريم ورك ، خواص مفيد زيادي را به همراه دارند. براي مثال شيء DateTime را در نظر بگيريد. با استفاده از خاصيت Today آن مي توان تاريخ جاري سيستم را بدست آورد. براي استفاده از يك خاصيت لازم است تا كلاس تعريف كننده شيء در برنامه مهيا باشد. منظور همان استفاده از فضاي نام مربوطه مي باشد. پس از وارد كردن فضاي نام كلاس مورد نظر مي توانيد از شيء و خواص آن استفاده كنيد. دو راه وجود دارد يا به صورت كامل تمام موارد بايد ذكر شوند مانند System.DateTime.Now; و يا با وارد كردن فضاي نام System كوتاه سازي صورت مي گيرد.
براي استفاده از هر متد و يا شيء ايي در سي شارپ بايد اين شيء قابل دسترسي باشد. براي مثال شيء Console كه از آن براي چاپ كردن خروجي بر روي صفحه ي نمايش استفاده مي كنيم در فضاي نام System واقع شده است. يا بايد در ابتداي برنامه ذكر كرد using System ; و سپس خيلي راحت از اين شيء استفاده كرد و يا مي توان اينكار را انجام نداد و نوشت : System.Console و الي آخر. با ذكر فضاي نام در ابتدا با استفاده از using مي توان خلاصه نويسي كرد.

نتيجه ي نهايي مثال اين فصل :

محتويات فايل Class1.cs :

using System;

namespace ex03
{
///
/// Summary description for Class1.
///
class Class1
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
clsDate m_var = new clsDate(); // initialize variable
Console.WriteLine ( m_var.currentSystemDate );

Console.ReadLine();//pause!
}
}
}

محتويات فايل clsDate.cs كه به برنامه اضافه كرديم:

using System;

namespace ex03
{
///
/// Summary description for clsDate.
///
public class clsDate
{
public clsDate()
{
//
// TODO: Add constructor logic here
//
}

public string currentSystemDate
{
get
{
return System.DateTime.Today.ToString() ;
}
}

}
}

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت سوم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۴۹ مراجعه امروز
۵۲۶۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت سوم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۷/۱۳۸۲ اين مقاله ۱۷۲۶ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

ساختارهاي تصميم گيري :

در بسياري از موارد هنگام برنامه نويسي لازم است تا از عبارات شرطي استفاده كنيم. براي انجام اينكار دو روش عمده وجود دارد. استفاده از if و يا switch . از if بيشتر براي مقايسه هايي تكي و كوچك استفاده مي شود و حاصل مقايسه ي آن يا true است و يا false . از عبارت switch هنگامي استفاده مي شود كه مقايسه هاي متعددي بايد در مورد يك مقدار صورت گيرد.
هر دو عبارت if و switch توسط عبارتهايي Boolean كنترل مي شوند ( true و يا false ) . در هنگام استفاده از if اگر عبارت Boolean حاصل اش true باشد اولين قسمت شرط اجرا مي شود و سپس برنامه از انتهاي if ادامه پيدا مي كند. اگر حاصل عبارت Boolean مساوي false باشد كنترل برنامه به قسمت else منتقل مي شود.

مثال :

يك پروژه ي جديد console باز كنيد و نام آنرا ex04 بگذاريد. سپس كد زير را در آن وارد و جرا كنيد :

using System;

namespace ex04
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Enter 1 character to be evaluated");

char cUserInput = (char) Console.Read();

if ( char.IsDigit( cUserInput ) )
Console.WriteLine("The char is a number!");
else
Console.WriteLine("The char is not a number!");

}
}
}

نكاتي در مورد كد فوق :

1- سي شارپ به كوچكي و بزرگي حروف حساس است . براي مثال cUserInput با cUserinput فرق مي كند.
2- حتما بايد بعد از if پرانتزها ذكر گردد.
3- حتما بايد داخل if يك عبارت Boolean ذكر شود مانند if(x>5) .
4- در سي شارپ مقايسه ي تساوي دو عبارت با == و انتساب با = انجام مي شود. ( موارد 1 و 4 مواردي هستند كه اغلب تازه كاران با آن مشكل دارند! ) براي مثال if(i==3) صحيح است اما if(i=3) در سي شارپ معنايي ندارد.
5- اگر بعد از if يك خط كد قرار گيرد نيازي به آوردن آكولاد ها نيست. هنگامي نياز به آكولادها مي باشد كه بيش از يك خط بايد بعد از if قرار گيرد.
6- در سي شارپ همانند اسلاف خودش براي تبديل نوع هاي داده ايي مي توان به صورت زير نيز عمل كرد : (char) Console.Read() ; يعني دريافتي Read به char تبديل مي شود .در اين مورد باز هم صحبت خواهد شد.
7- همانطور كه ذكر شد در سي شارپ همه چيز شيء است حتي نوع هاي پايه ايي مانند char . با استفاده از متد IsDigit آن مي توان چك كرد كه آيا ورودي آن عدد است يا خير؟ ( در مورد متدها صحبت خواهد شد )

استفاده از switch :

بهتر است اين مورد را با يك مثال دنبال كنيم.
پروژه ي سي شارپ جديدي به نام ex05 در حالت console در VS.NET باز كنيد. دراينجا مي خواهيم يك كلاس جديد تعريف كرده و توسط خاصيتي كه در آن ايجاد مي كنيم متوجه شويم روز جاري مطابق سيستم چه روزي است .
يك كلاس جديد از منوي پروژه ،‌با استفاده از گزينه ي Add class به برنامه اضافه كنيد و نام آنرا در ابتدا clsDate بگذاريد.

using System;

namespace ex05
{
///
/// Summary description for clsDate.
///
public class clsDate
{
public clsDate()
{
//
// TODO: Add constructor logic here
//
}

public string systemDayOfWeek
{
get
{

string res="";
switch( System.DateTime.Now.DayOfWeek.ToString())
{
case "Saturday" :
res = "شنبه";
break;

case "Sunday" :
res = "يک شنبه" ;
break;

case "Monday":
res = "دوشنبه";
break;

case "Tuesday":
res = "سه شنبه";
break;

case "Wednesday":
res = "چهار شنبه";
break;

case "Thursday":
res = "پنج شنبه";
break;

case "Friday":
res = "جمعه" ;
break;
}

return res ;
}

}

}
}

هنگام ذخيره كردن اين كد ويژوال استوديو به شما اخطار مي دهد كه كد داراي حروف يونيكد است. از منوي فايل گزينه ي advanced save options را انتخاب كنيد. در اينجا مي توان نوع ذخيره سازي را يونيكد انتخاب كرد.

براي استفاده از كلاس فوق مانند مطالبي كه در قسمت قبل گفته شد عمل مي كنيم :

using System;

namespace ex05
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
clsDate m_var = new clsDate();
Console.WriteLine( m_var.systemDayOfWeek );
Console.ReadLine();

}
}
}

هر چند حالت console يونيكد را پشتيباني نمي كند ولي اصل برنامه براي ما مهم است و در آينده بيشتر از آن استفاده خواهيم كرد.

همانطور كه ملاحظه كرديد اگر از switch استفاده نمي شد بايد از 7 عدد if ‌استفاده مي گرديد كه اصلا ظاهر حرفه اي و شكيلي نداشت!
با استفاده از عبارت زير كار مقايسه شروع مي شود. روز سيستم در يافت شده و وارد بدنه ي switch مي گردد. سپس توسط case ها چك مي شود تا تساوي آن با عبارت بعد از case به اثبات برسد.

switch( System.DateTime.Now.DayOfWeek.ToString())

اگر هر كدام از عبارات بعد از case صحيح بودند كار پس از آن كه در اينجا انتساب است انجام شده و سپس توسط break كنترل برنامه از switch خارج مي شود و ادامه ي كار دنبال مي گردد.
اگر هيچكدام از case ها صحيح نبودند مي توان از گزينه ي default هم در صورت نياز استفاده كرد. اين حالت در يك چنين مواقعي اجرا مي گردد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


طراحی برنامه ( بخش دوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۴۰ مراجعه امروز
۴۹۵۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
طراحی برنامه ( بخش دوم )
نويسنده : شرکت سخا روش
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۷/۱۳۸۲ اين مقاله ۵۶۶ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

در بخش اول اين مقاله به مسائل مرتبط با برنامه نويسي اشاره و در ادامه با مراحل متفاوت برنامه نويسي آشنا شديم . در اين بخش به بررسي متدولوژي 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 ( برنامه نويسي شي گراء ) محسوب مي گردند.

دياگرام هاي کلاس UML
دياگرام کلاس در UML يکي از مهمترين دياگرام ها تلقي مي گردد . دياگرام فوق ، مسئوليت مدل سازي ساختار کلاس و محتويات را با استفاده از عناصري نظير کلاس ها ، اشياء و پکيج ها برعهده دارد . اين دياگرام همچنين ، ارتباطاتي نظير : توارث و پيوستگي را نمايش خواهد داد. دياگرام فوق ، شکل خلاصه و استانداردي بمنظور نمايش يک کلاس را ارائه مي نمايد. در اين راستا از يک مستطيل که به سه بخش متفاوت تقسيم مي گردد ، استفاده مي شود. در اولين بخش مستطيل ، نام کلاس قرار مي گيرد . در دومين بخش مستطيل ، خصلت هاي يک کلاس قرار خواهند گرفت ( ممکن است از واژه صفات و يا متغير نيز استفاده گردد ) و در بخش سوم ، متدهاي يک کلاس قرار مي گيرند.متدهاي هر کلاس ، عملياتي را که يک کلاس مي تواند انجام دهد ، مشخص مي نمايند. شکل زير ، يک دياگرام کلاس نمونه را نشان مي دهد. در اولين بخش ، نام کلاس Vehicle مشخص شده است .نام هر کلاس با يک حرف بزرگ شروع و در موارديکه نام کلاس شامل بيش از يک کلمه باشد ، هر کلمه در نام کلاس با يک حرف بزرگ آغاز مي گردد . Vehicle ، PassengerCar و IncomeStatement نمونه هائي در اين زمينه مي باشند .استفاده از از فضاي خالي بين کلمات تشکيل دهنده نام يک کلاس ، مجاز نمي باشد .

خصايص کلاس (Properties , Attributes)
در دياگرام کلاس Vehicle و در بخش دوم از شش خصلت Integer استفاده شده است . در نمونه کلاس هاي ديگر ، يک کلاس ممکن است داراي دهها خصلت باشد .در برخي زبانهاي برنامه نويسي نظير ويژوال بيسيک دات نت ،از خصلت با نام Prtoperty نيز ياد مي گردد. هر خصلت مي تواند داراي مقادير متفاوتي باشد . مقادير جاري خصلت ها ، وضعيت يک کلاس را تشريح مي نمايند . در مقام مقايسه مي توان خصايص يک شي را نظير نقش اسامي در يک جمله در نظر گرفت ( مقايسه فوق صرفا" جنبه آموزشي دارد ) .

علايم + و -
همانگونه که مشاهده مي گردد ، هر entry دربخش دوم دياگرام کلاس Vehicle ، داراي يک علامت - در جلوي نام خود است .در بخش سوم ، برخي از Entry ها ، داراي علامت + و برخي ديگر داراي علامت - مي باشند . وجود علامت + در ابتداي يک آيتم ( خصلت ، متد ) ، نشاندهنده در دسترس بودن آن از طريق خارج از کلاس است . بعبارت ديگر ، علامت +، امکان استفاده از آيتم مورد نظر و تاثيرگذاري بر وضعيت يک کلاس را نشان مي دهد . علامت + ، عمومي بودن ( Public ) عناصر کلاس مربوطه را نشان مي دهد .
اگر يک Entry با يک علامت - شروع گردد ، بدين معني خواهد بود که آيتم مورد نظر صرفا" براي استفاده خود کلاس در دسترس بوده و امکان استفاده از آن براي خارج از کلاس ميسر نخواهد بود. بنابراين علامت - ، نشاندهنده خصوصي ( Private ) بودن عناصر مربوط به يک کلاس است .
استفاده از علائم + و - ، نشاندهنده نوع دستيابي به هر يک از عناصر مربوط به يک کلاس است . در حقيقت علامت + ، روشي بمنظور ارتباط با کلاس را مشخص نموده و علامت - نشاندهنده عناصري است که صرفا" براي خود کلاس قابل استفاده خواهند بود .
ايجاد يک آيتم بصورت خصوصي همواره مورد توجه طراحان شي گراء بوده و تامين کننده اهداف کپسوله سازي در برنامه نويسي شي گراء است . با کپسوله سازي داده ، امکان بروز تغييرغيرعمد داده در برخي بخش ها ي برنامه و از طريق خارج از کلاس به حداقل مقدار خود خواهد رسيد . بدين ترتيب، تشخيص و برطرف نمودن خطاهاي احتمالي ، بسرعت و بسادگي ميسر خواهد شد .

متدهاي کلاس ( عمليات )
عنصر سوم در دياگرام کلاس ، نشاندهنده نوع عمليات مرتبط با کلاس است . در UML آيتم هاي موجود در اين بخش را "عمليات " ( Operations ) ، ودر برخي از زبان هاي برنامه نويسي نظير ويژوال بيسيک دات نت ، به آنان "متد" گفته مي شود . متدها ، نحوه ارتباط برنامه نويسان با يک کلاس را مشخص مي نمايند. هر متد عمليات خاصي را در ارتباط با يک کلاس انجام خواهد داد.اگر خصلت ها را بمنزله اسامي در يک جمله در نظر بگيريم ، مي توان متدها را بمنزله افعال موجود در يک جمله در نظر گرفت .
متدهاي کلاس و آرگومان ها
در برخي موارد يک متد نيازمند اطلاعات خارجي بمنظور انجام وظايف محوله است . مثلا" در دياگرام کلاس Vehicle از متد زير استفاده شده است :

+SetSpeed(DesiredSpeed:Integer):Integer

علامت + نشاندهنده اين موضوع است که ( ) SetSpeed يک متد Public است . بنابراين امکان استفاده از آن توسط يک برنامه نويس وجود خواهد داشت .بمنظور ارسال داده به متد مورد نظر از آرگومان استفاده شده که بين علامت پرانتز قرار مي گيرند.در مثال فوق ، پارامتر مورد نظر DesiredSpeed بوده و از نوع Integer است . در انتهاي علامت پرانتز بسته ، ازيک کالون ":" ، که بدنبال آن کلمه Integer آمده است ، استفاده شده است . اين بدان معني است که متد ( ) SetSpeed يک مقدار صحيح را به برنامه صدازننده ، بر مي گرداند.
در نمونه کلاس Vehicle از دومتد بمنظور افزايش و يا کاهش سرعت استفاده شده است :

-IncreaseSpeed(DesiredSpeed:Integer):Integer
-DecreaseSpeed(DesiredSpeed:Integer):Integer

هر يک از متدهاي فوق ، عمليات مورد نظر در رابطه با افزايش و يا کاهش سرعت را انجام خواهند داد . براي نيل به خواسته فوق ( افزايش و يا کاهش سرعت ) مي توان دو متد فوق را با يکديگر تلفيق و در يک متد واحد ديگر جايگزين نمود:

-ChangeSpeed(DesiredSpeed:Integer):Integer

در صورتيکه پارامتر DesiredSpeed مثبت باشد ، سرعت افزايش و در غير اينصورت ( پارامتر منفي باشد ) ، سرعت کاهش خواهد يافت.

Dim MyVehicle as New Vehicle
Dim ObjectSpeed as integer
' Some code that does something...
ObjectSpeed = MyVehicle.GetSpeed()
ObjectSpeed = MyVehicle.ChangeSpeed(-ObjectSpeed)

درنمونه مثال فوق ، در ابتدا يک شي Vehicle با نام MyVehicle تعريف شده است . در ادامه ، متد GetSpeed در ارتباط با شي MyVehicle فرا خوانده شده است .بمنظور جداسازي نام شي از متد مربوطه از علامت نقطه استفاده شده است .
فرض کنيد که Vehicle با سرعت 55مايل در ساعت در حال حرکت است . مقدار ObjectSpeed ، پنجاه و پنج در نظر گرفته مي شود .در صورتيکه در ادامه مقداري منفي را به متد فوق پاس دهيم سرعت کاهش پيدا خواهد کرد. اگر مقدار 55 - را به متد ChangeSpeed() پاس دهيم ، توقف اتومبيل را بدنبال خواهد داشت .
همانگونه که مشاهده مي شود ، برخي از متدها با علامت - شروع شده اند . اين بدان معني است که آنان متدهاي اختصاصي ( Private) بوده و خارج از کلاس قابل دستيابي نخواهند بود. چنين متدهائي به ساير متدها ي موجود در کلاس ، سرويس و خدمات لازم را ارائه و استفاده از آنان براي برنامه نويس مجاز نخواهد بود.بعبارت ديگر متدهاي فوق بعنوان ايترفيس کلاس مطرح نبوده و از خدمات آنان در داخل کلاس استفاده خواهد شد . در چنين مواردي ممکن است يک متد که بصورت Public تعريف و امکان استفاده از آن در خارج از کلاس و توسط برنامه نويسان وجود دارد ، خود از خدمات چندين متد خصوصي استفاده نمايد .
يک دياگرام کلاس UML ، امکان مرور سريع و فشرده پتانسيل ها ي يک کلاس را فراهم و نحوه ارتباط يک برنامه نويس با کلاس مورد نظر را نيز مشخص خواهد شد. اگر يک کلاس را بعنوان يک جعبه سياه در نظر بگيريم ، علامت "-" ، نشاندهنده آيتم هائي درون جعبه سياه است که امکان استفاده از آنان توسط برنامه نويسان وجود نخواهد داشت . علامت "+" ، نشاندهنده امکاناتي است که مي توان از آنان بمنظور ارتباط با متدها و خصايص يک کلاس استفاده کرد . آيتم هاي Public يک کلاس ، اينترفيس لازم براي يک کلاس را تعريف و نحوه ارتباط با آن را مشخص مي نمايند. در حقيقت متدهاي Public ، نحوه استفاده از يک کلاس را به برنامه نويسان ديکته خواهند کرد .

خلاصه

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

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

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

Input Step->ReadKeyboard( )
ReadSetupTable( ) ->ReadTable1( ) ->(Code)
ReadTable2( )
ReadTable3( )

UML ، از کلمات Unified Modeling Language اقتباس شده است . مزيت استفاده از UML ، تفکر مبتني بر برنامه نويسي شي گراء است .بلاک هاي اوليه ايجاد UML کلاس ، خصلت و متد ناميده مي شوند. دياگرام هاي کلاس UML تمام سه عنصر OOP را در يک دياگرام مناسب نمايش مي دهند .

در OOP ، واژه هاي Private و Public به نحوه دستيابي به خصلت ها بر مي گردد . اگرخصلتي از نوع Private باشد ،امکان تغيير آن صرفا" براي کساني که به کلاس فوق تعلق دارند، وجود خواهد داشت .اگر خصلتي از نوع Public باشد ، ساير اشياء امکان دستيابي کامل به خصلت را ( اعمال تغييرات مورد نظر ) خواهند داشت.

کيفيت مقاله :
عالی خوب متوسط ضعيف


آشنايي با فيلترهاي CSS ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۴۱ مراجعه امروز
۵۱۵۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آشنايي با فيلترهاي CSS
نويسنده : عليرضا گلکاری
موضوع : DHTML [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۷/۱۳۸۲ اين مقاله ۱۶۸۱ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.

تقريبا تمام كساني كه با طراحي صفحات وب و يا HTML سروكار دارند باCSS (Cascading Style Sheets) آشنايي دارند. با استفاده از CSS نحوه نمايش اطلاعات درون صفحه وب مشخص ميشود. با استفاده از CSS تعيين نحوه نمايش اطلاعات بسيار راحتتر ازHTML است. همچنين انجام بعضي از انواع قالب بندي هايي كه با CSS امكان پذير است با دستورات HTML امكان پذير نيست.
يكي از امكانات جالبي كه CSS در اختيار ما ميگذارد خصوصيتي بنام Filter ميباشد. كه بوسيله آن ميتوان به تصاوير و متنهاي درون صفحه وب افكتهاي متفاوتي را اضافه كرد. بطور مثال شما قادر خواهيد بود درون يك صفحه وب يك متن سايه دار داشته باشيد بدون اينكه از عكس بجاي متن استفاده كنيد. كه اين خود باعث ميشود كه ويرايش كردن متن مورد نظر شما نيز به راحتي صورت گيرد، چون ديگر شما با يك سري تصاوير كار نداريد، بلكه متن مورد نظر خود را به راحتي ويرايش ميكنيد. همچنين شما قادر خواهيد بود كه شفافيت يك عكس را كم كنيد يا آن را وارونه كنيد. اينها فقط چند نمونه از امكانات خصوصيت Filter در CSS بود. در ادامه امكانات و نحوه استفاده از خصوصيت Filter را بيان خواهيم كرد.

بايد دقت داشت كه براي كار كردن فيلتر ها هميشه بايد خصوصيت wtihd را براي تگ مورد نظر تنظيم كنيد. در غير اين صورت اين فيلتر ها از كار خواهند افتاد.
براي اضافه كردن فيلتر ها از تگDIV استفاده شده است. براي راحتي كار با نوشتن دستورات زير خصوصيت width براي تگ DIV تنظيم شده است. توجه داشته باشيد كه اين دستورات بايد در قسمت head صفحه وب و قبل از تگ نوشته شود.

< style>
< !--
div{width:100%;}
-->
< /style>

همچنين براي اضافه كردن فيلتر ها از روش زير استفاده شده است.

فيلتر مورد نظر">
محتوياتي كه قرار است فيلتر بر روي آن اعمال شود
اين محتويات ميتواند هرچيزي باشد مثلا متن يا تصوير

بطور مثال

< div style="filter: alpha(opacity=30);">
< img src="images/art11361.jpg" width="100" height="100">
< /div>

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

 filter: alpha(opacity=30); alpha : با اين فيلتر ميتوان ميزان نمايان بودن يك تصوير را مشخص نمود
opacity : مقدارد نمايان شدن تصوير را مشخص مكند كه مقداري بين 0 تا 100 را مي پذيرد.
filter:alpha(opacity=0, finishopacity=100, style=1, startx=0, starty=0, finishx=100, finishy=100); در اين قسمت تمام پارامترهاي خصوصيت alpha نشان داده شده است. كه با استفاده از اين پارامترها ميتوان ميزان نمايش داده شدن يك شكل را از كم به زياد تعيين نمود.
filter:alpha(opacity=100, finishopacity=10, style=2, startx=0, starty=0, finishx=100, finishy=100); اين مثال با همان پارامترهايي كه در مثال قبل آمده بود بيان شده و فقط مقادير پارامترهايي كه بصورت رنگي در آمده اند تغيير كرده اند.
همچنين پاراتر style‌ ميتواند مقاديري بين 0 تا 3 داشته باشد.
filter:blur(add=false, direction=90, strength=7); با اين فيلتر ميتوان تصوير را محو كرد.
direction : زاويه محو شدن شكل
strength: ميزان تاثيراين فيلتر
filter:blur(add=true, direction=90, strength=7); add : اين پارامتر مشخص ميكند كه آيا تصوير اوليه نيز با تصوير ايجاد شده جديد تركيب شود يا خير
filter:fliph; چرخش بصورت افقي
filter:flipv; چرخش بصورت عمودي
filter:gray; ايجاد جلوه سياه و سفيد
filter:xray; ابتدا شكل را سياه و سفيد و سپس ميزان رنگها و روشنايي را معكوس ميكند.
filter:invert; ميزان رنگها و روشنايي را معكوس ميكند.

Test mask picture

 filter: mask(color=#ffffff); اين فيلتر به اين صورت عمل ميكند كه محتويات مورد نظر را با يك رنگ خواص به صورت شفاف در ميآورد در اينجا عكس مورد نظر به عنوان زمينه (backgroung) تعيين شده و با تنظيم رنگ با رنگ زمينه دلخواه (در اينجا سفيد) در اصل ما رنگ متن را با يك تصوير پر كرده ايم.

Glow

 filter:glow(color=#0099CC, strength=4); ايجاد حالت روشنايي با رنگ و ميزان دلخواه در اطراف متن مورد نظر

Blur

 filter:blur; همان فيلتر blur اما بدون پارامتر

Shadow

 filter:shadow(color=#999999, direction=135); ايجاد جلوه سايه با رنگ و زاويه دلخواه

Drop Shadow

 filter:dropshadow(color=#999999, offx=3, offy=3, positive=true); نمايش سايه يك متن با رنگ دلخواه در موقعيت دلخواه

Wave

 filter:wave(strength=3); ايجاد جلوه موجي شكل به اندازه دلخواه

Flip H

 filter: fliph(); چرخش بصورت افقي

Flip V

 filter: flipv(); چرخش بصورت عمودي

دقت داشته باشيد كه براي مشاهده جلوه هاي بيان شده به مرورگر Internet Explorer 4.0 يا بالاتر از آن نياز است.

منبع : www.w3schools.com

کيفيت مقاله :
عالی خوب متوسط ضعيف


چگونه از theme جديد WinXP در برنامه هاي خود استفاده كنيم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۴۳ مراجعه امروز
۴۹۵۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
چگونه از theme جديد WinXP در برنامه هاي خود استفاده كنيم
نويسنده : رضا کريم پور
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۷/۱۳۸۲ اين مقاله ۶۴۶ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

به همراه آخرين نسخه از سيستم عامل Microsoft تكنولوژي جديدي بنــــــــام Theme Engine عرضه شده است كه به كمك آن برنامه هاي شما زيباتر و شكيل تر از گذشته ترسيم ميشوند اما بكار گيري آن كمي ناشناخته مانده است.

كمي تئوري!
هر پنجره در سيستم عامل ويندوز به دو قسمت اصلي زير تقسيم ميشود:
- Non-client area(شامل Title، Frame، ُMain scroll bar)
Client area - (ناحيه اصلي يك پنجره كه محل قرار گيري ساير كنترل ها مانند List Box ، Edit Box و ... است.)

ويندوز XP بطور پيش فرض براي ترسيم ناحيه Non-Client از ComCtl32.dll ويرايش 6 استفاده مي كند و ترسم ناحيه Client يك پنجره را به ComCtl32.dll ويرايش 5 واگذار ميكند.حتمآ تا كنون متوجه شده ايد كه بحث پيرامون يك DLL با دو ورژن متفاوت دور مي زند.تنها كاري كه ما براي theme aware كردن برنامه هاي خود بايد انجام دهيم، استفاده از ورژن 6 اين DLL بجاي ورژن 5 است.

توضيح کامل چگونگي اين فرايند خارج از حوصله اين مقاله (و من!) است، اما اگر مايل به کسب اطلاعات بيشتر در اين مورد هستيد، در Internet کلمات DLL HELL را جستجو کنيد.

در اين متن نحوه استفاده از اين ويژگي جديد به دو روش توضيح داده شده است:
در روش اول از Resource ها استفاده خواهم کرد و در روش دوم (که کلي تر است) از Resource ها استفاده نخواهيم کرد!! :)

روش اول

در اين قسمت نرم افزارهاي(کامپايلر و اسمبلر( زير، مورد برسي قرار مي -گيرند:
-Visual C++ 6, 7
-Visual BASIC 6
-C++ Builder (BCB) 6
-Delphi 6, 7
-Microsoft Macro Assembler (MASM 32-bit)

قبل از هرچيز ابتدا متن زير را در فايلي بنام MyExe.Manifest ذخيره كنيد.(البـــــــــــته ميتوانيد هر نام دلخاهي را انتخاب كنيد ولي پسوند را تغيير ندهيد)

< ?xml version="1.0" encoding="UTF-8" standalone="yes"?>
< assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
< assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="CompanyName.ProductName.YourApp" type="win32"/>
< description> Your application description here.< /description>
< dependency> < dependentAssembly> < assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> < /dependentAssembly> < /dependency> < /assembly>
همان طور که ملاحضه مي کنيد، چرت و پرت هاي فوق چيزي جز يک فايل XML نمي باشد.

اكنون يك فايل ديگر بنام MyExe.rc ايجاد كرده و متن زير را در آن قرار دهيد:

1 24 "MyExe.Manifest"

حتماً مي دانيد که فايلهاي .rc يا Resource Script ها فايلهاي متني هستند که پس از کامپايل شدن بوسيله Resource Compiler ( RC.EXE ) محتويات Resource Section فايلهاي اجرايي تحت ويندوز را تشکيل مي دهند.
براي اطلاعات بيشتر در مورد Resource ها به آدرس
Platform SDK/User Interface Services/Windows User Interface/Resources
در MSDN مراجعه کنيد.
براي اطلاعات بيشتر در مورد ساختار فايلهاي اجرايي تحت ويندوز کلمه PE يـــــــــــا Portable Executable را در MSDN جستجو کنيد.

1. Delphi و C++Builder
فايل MyExe.rc را به پروژه خود اضافه كنيد.
اگر از VCL استفاده نمي كنيد تابع InitCommonControls را در اولين مکان ممکن(as soon as possible :) ) فراخواني كنيد.اگر از VCL استفاده مي كنيد لازم نيست اين كار را انجام دهيد.
در Delphi 7 مي توانيد تنها با يک عمل Drag and Drop و استفاده از كنترلي بنـــــام XPManifest (در واقع به هيچ وجه كنترل نيست) در تب ٌWin32 اين کار را انجم دهيد.

2.VC++
فايل MyExe.rc را به پروژه خود اضافه كرده و تابع InitCommonControls را در Entry Point برنامه که معمولاً(و نه هميشه) WinMainو يا main اســـــــــــت، فراخواني كنيد.

3.MASM
ابتدا فايل MyExe.rc را بوسيله RC.EXE كامپايل كنيد:

C:\> RC.EXE MyExe.rc
اكنون بايد فايل MyExe.res ايجاد شده باشد.
سپس برنامه اصلي خود را نيز اسمبل كرده و در زمان لينك كردن از فايل MyExe.res استفاده كنيد: (با فرض اينكه فايل object شما MyExe.obj نام داشته باشد)

C:\> Link /subsystem:windows MyExe.obj MyExe.res

در ضمن فراخواني InitCommonControls را در Entry Point کد خود، فراموش نكنيد.

4.VB
متاسفانه بطور مستقيم نمي توان اينكار را با 6VB نيز انجام داد و تنها راهي كه مـــــن براي theme aware كردن exe هاي VB مي دانم(بجز روش دوم كه در انتهاي مقاله مورد برسي قرار مي گيرد) تزريق كردن فايل manifest بوسيله يك Resource Editor مانند Resource Hacker يا PExplorer است.

روش دوم

لازم نيست حتماً فايل manifest را در resource برنامه خود قرار دهيد بلكه ميتوانيد آنرا بشكل زير تغيير نام داده و در همان پوشه فايل exe قرار دهيد:
اگر نام فايل exe شما MyExe.exe باشد آنگاه فايل manifest را بــــــــــــــــــــــــه MyExe.exe.manifest تغيير نام دهيد.
سپس تابع InitCommonControls را در اولين مکان ممکن، براي Initial شدن ComCtl32.dll فراخواني کنيد.
البته اين روش(كه در مورد VB بخوبي كار مي كند) ممكن است بعلت ايجاد وابستگي بين فايل اجرايي و يك فايل خارجي (كه به اصطلاح External Dependency ناميده مي شود) چندان مطلوب نباشد.البته خاطر نشان مي كنم تنها خسارتي كه ممكن است برنامه شما در صورت پاك شدن اتفاقي فايل Manifest متحمل شود، از دست دادن چهره زيباي خود در سيستم عامل Windows XP است.
.
.
.
اكنون بايد توانايي استفاده از Theme Engine را در ويندوز XP و متعاقباً Longhorn و Server 2003 را کسب کرده باشيد.

تمرين:
اديتور ويژوال بيسيک 6 را Theme Aware کنيد.

حل:
تذكر:شما با انجام اين تمرين يكي از مفاد قانون Copy Right را با تغيير غير قانوني يك برنامه لغو خواهيد كرد.اگر مورد فوق براي شما دردسر ساز است، از انجام مراحلي كه ذكر خواهد شد خودداري كرده و تنها به خواندن شفاهي اكتفا كنيد، در غير اين صورت هيچ مسوليتي متوجه نويسنده نمي باشد.

براي نيل به هدف از روش دوم استفاده خواهيم كرد.فايل اجرايي اديتور ويژوال بيسيک VB6.exe نام دارد و اگر Import Section آنرا بوسيله DumpBin.exe (موجود در دايركتوري Bin ويژوال C++) جستجو كنيد، شاهد حضور تابعInitCommonControls خواهيد بود.پس كافيست فايل Manifest را به VB6.exe.manifest تغيير نام داده و در همان دايركتوري كه VB6.exe قرار دارد كپي كنيد.حال VB6.exe را اجرا كرده و حاصل كار خود را ملاحظه كنيد...
سوالات و نظرات خود را به آدرس titanwalker@mail.com ارسال كنيد.
موفق باشيد
رضا كريم پور

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت چهارم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۵۲ مراجعه امروز
۵۲۶۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت چهارم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۷/۱۳۸۲ اين مقاله ۱۶۵۳ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

آرايه ها در سي شارپ :

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

براي تعريف آرايه چندين راه مختلف وجود دارد :
براي تعريف آرايه ابتدا نوع آنرا مشخص مي كنيد سپس [] را بايد جلوي تعريف نوع بگذاريد اين دستور زبان است و چون چرا ندارد! در زبان سي كمي متفاوت بود. اين كروشه ها بعد از نام متغير مي آمدند. و سپس در اينجا نام يك متغير را كه بعدا به آن ارجا مي دهيم خواهيد گذاشت. براي مثال

int[] table; // not int table[];

حد پايين آرايه صفر بوده براي مثال اگر آرايه chrData[] ده عضو داشته باشد، اولين عضو آن chrData[0] و آخرين عضو آن chrData[9] است.
مطلب ديگري كه در مورد آرايه ها خيلي مهم است اندازه ي آن است. يعني يك آرايه حاوي چند خانه ي خالي است كه ما اجازه داريم آنرا پر كنيم. مثال :

int[] numbers; // declare numbers as an int array of any size
numbers = new int[10]; // numbers is a 10-element array
numbers = new int[20]; // now it's a 20-element array

1- تعريف آرايه اي از رشته ها و مقدار دهي اوليه آن.

String[] strData = new string[2];

2- تعريف و مقدار دهي اوليه

string [] strData = { "1234","abcd" };

كه آرايه اي از نوع رشته اي به طول 2 عضو با مقدار دهي اوليه ايجاد شده است. در اين حالت نيازي به تعيين طول آن نمي باشد.

3- روشي ديگر براي مقدار دهي اوليه

strData[0] = "1234";
strData[1] = "abcd";

مثال : يك پروژه ي جديد Console سي شارپ را باز كنيد و نام آنرا در ابتدا ex06 بگذاريد. در اين مثال مي خواهيم نحوه ي كار با آرايه ها را مرور كنيم :

using System;

namespace ex06
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
string[] sGoalList = new string[3];
string sReplyStatement = "You have choosen Goal '";

// Store goals in the array
sGoalList[0] = "Hike the Appalachian Trail";
sGoalList[1] = "Run the marathon";
sGoalList[2] = "Give $1 million to worthwhile causes";

// Store response to goals in the array
//(declaring and initializing on same line)
string[] sGoalResponse = {
"If you are staring from GA, you should get "
+ "started in early spring, so you will "+
"not get caught in snow.",
"Make sure that you have a good pair of shoes.",
"Start saving as soon as possible."};

// Give the user a list of goals to choose from
Console.WriteLine("GOAL LIST");

for(int i = 0; i < sGoalList.Length; i++)
{
Console.WriteLine("Goal " + i +
" - " + sGoalList[i]);
}

// Request the user to choose a goal.
Console.WriteLine (""); // Write an empty line for space
Console.Write("Please choose the number of the "
+ "goal that you want to achieve [0,1,2]: ");

Console.ReadLine();

}
}
}

نكاتي در مورد كد فوق :
1- نحوه ي استفاده از عملگر + را براي اتصال رشته هاي بلند در كد فوق مي توان ديد.
2- در سي شارپ پايان خط سمي كولون مي باشد. بنابراين نگراني در مورد چند خطي شدن يك دستور وجود ندارد.
3- هنگامي كه آرايه اي را با مقادير درون آكولادها ، مقدار دهي اوليه مي كنيد لزومي ندارد طول آن آرايه را مشخص كنيد ؛ مانند آرايه sGoalResponse در بالا. در غير اينصورت حتما بايد طول يك آرايه را كه معرف تعداد خانه هاي خالي آن است ، معرفي كنيد مانند آرايه sGoalList .
4- فعلا حلقه ي for را در اين مثال بخاطر داشته باشيد تا در مقاله ي بعدي راجع به آن صحبت كنيم

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت پنجم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۵۵ مراجعه امروز
۵۲۷۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت پنجم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۷/۱۳۸۲ اين مقاله ۱۵۲۹ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

حلقه ها در سي شارپ :

مقدمه :

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

int[] intData = new int[1000];
intData[0]=0;
.
.
.
intData[999]=1000;

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

تعريف حلقه ها و استفاده از آنها :

براي تعريف حلقه ها ابزارهاي متعددي مانند while, do , for , foreach وجود دارند. استفاده و انتخاب آنها بستگي به سليقه ي شما و منطق برنامه دارد. در هر حال يك مساله بديهي است كه همواره بيش از يك راه حل براي يك مساله وجود خواهد داشت.

استفاده از حلقه ي for :

عموما كدنويسي را با كد نويسي مي توان آموخت! بنابراين در مورد انواع حلقه ها مثالهايي ارائه خواهد گرديد.

يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex07 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex07
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int[] intData = new int[1000];

for (int i=0 ; i<1000 ; i++ )
intData[i]=i;

for(int i=0 ; i< intData.Length ; i++)
{
int j = intData[i];
Console.WriteLine("intData[" + i + "]=" + j);
}

Console.ReadLine();

}
}
}

توضيحاتي در مورد كد فوق :
1- براي تعريف حلقه ي for همانطور كه مي بينيد بايد تعداد بار اجراي حلقه ( اينجا از 0 تا 999 است ) و همچنين نحوه ي رسيدن از 0 به 1000 را مشخص كرد ( در اينجا i++ است يعني هر بار يك واحد به شمارشگر حلقه اضافه مي شود. )
2- در زبان سي i++ يعني i=i+1 و i-- يعني i=i-1 و كلا i-=n يعني i=i-n و به همين ترتيب. براي مثال i*=n يعني i=i*n و i+=n يعني i=i+n و ...
3- اگر پس از حلقه ي for يك خط كد داشته باشيم نيازي به آكولاد نيست (مانند قسمت اول كد). ولي اگر تعداد خطوط مربوط به بدنه ي for زياد بود بايد حتما از آكولاد استفاده شود (مانند قسمت دوم كد). (اين قاعده اي كلي است در زبانهاي مشتق شده از زبان سي در مورد هر چيزي!)
4- فرض كنيد در قسمت اول كد بالا بجاي 1000 مي نوشتيد 1001 . سريعا با يك خطاي زمان اجرا مواجه مي شديد. زيرا مي خواستيد به عضوي از آرايه دسترسي پيدا كنيد كه تعريف نشده است. راه مدرن چك كردن اين مسائل استفاده از خاصيت Length آرايه است كه در قسمت دوم كد در عمل مشاهده مي نماييد. هميشه از اين روش استفاده كنيد.
5- حلقه ي اول يعني اينكه كار پر كردن آرايه intData را از صفر تا 999 يكي يكي (i++) انجام بده.

استفاده از حلقه ي while :
يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex08 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex08
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int n = 1;

while (n < 6)
{
Console.WriteLine("Current value of n is {0}", n);
n++;
}

Console.ReadLine();
}
}
}

توضيحاتي در مورد كد فوق :
1- حلقه ي while در بالا كار انجام حلقه را تا هنگامي انجام مي دهد كه شرط ذكر شده در ابتداي آن صادق و برقرار باشد. يعني در حلقه ي فوق تا وقتي n<6 است اين حلقه ادامه خواهد يافت.
2- حلقه ي while صفر يا بيشتر بار ممكن است اجرا شود.
3- در كد فوق از {0} استفاده گرديده است. متد WriteLine به شما اين اجازه را مي دهد كه n تا آرگومان براي آن تعريف كنيد و مقادير هر كدام را كه خواستيد در كد نمايش دهيد از {x} استفاده كنيد. در اين مورد مقدار آرگومان x ام نمايش داده مي شود.

استفاده از حلقه ي do :

يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex09 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex09
{

class Class1
{
[STAThread]
static void Main(string[] args)
{
int x;
int y = 0;

do
{
x = y++;
Console.WriteLine(x);

}while(y < 5);

Console.ReadLine();

}
}
}

توضيحاتي در مورد كد فوق :
1- اين حلقه به حلقه ي do…while معروف است و هر دو جزء آن بايد ذكر گردد.
2- اين حلقه تا زماني كه شرط ذكر شده در قمست while صحيح است ادامه مي يابد.
3- اين حلقه در ابتداي كار بدون توجه به قسمت while حداقل يكبار اجرا مي شود. (مثال زير را اجرا نماييد)

int n = 10;
do
{
Console.WriteLine("Current value of n is {0}", n);
n++;
} while (n < 6);

استفاده از حلقه ي foreach :

يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex10 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex10
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int odd = 0, even = 0;
int[] arr = new int [] {0,1,2,5,7,8,11};

foreach (int i in arr)
{
if (i%2 == 0)
even++;
else
odd++;
}

Console.WriteLine(
"Found {0} Odd Numbers, and {1} Even Numbers.",
odd, even) ;

Console.ReadLine();

}
}
}

توضيحاتي در مورد كد فوق :
1- از foreach براي حركت در بين اعضاي يك آرايه (مانند مثال بالا) و يا مجموعه ايي از اشياء استفاده مي شود (روشي شكيل ، مدرن و مطمئن! و تقريبا به ارث رسيده از ويژوال بيسيك!!).
2- در زبانهاي مشتق شده از C ، عملگر % ، باقيمانده را محاسبه مي كند.
3- در كد فوق با استفاده از حلقه ي foreach تك تك اعضاي آرايه در مورد زوج و يا فرد بودند مورد بررسي قرار گرفته اند و تعداد اعضاي زوج و فرد در آخر نمايش داده مي شود

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت ششم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۵۸ مراجعه امروز
۵۲۷۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت ششم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۷/۷/۱۳۸۲ اين مقاله ۱۴۳۴ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.

دو مورد تكميلي در مورد حلقه ها در سي شارپ :

1- هر جايي خواستيد به هر دليلي حلقه را پايان دهيد مي توانيد از دستور break; استفاده كنيد. در اين حالت به صورت آني حلقه خاتمه يافته و كدهاي ادامه ي برنامه پس از حلقه اجرا مي شوند.
2- نحوه ي استفاده از دستور continue : فرض كنيد حلقه ي شما در راند 15 خودش است! حالا در اين راند شما مي خواهيد يك سري از دستورات درون حلقه اجرا نشوند و حلقه به راند بعدي منتقل شده و كارش را ادامه دهد. اينجا است كه از دستور continue استفاده مي شود. بهتر است به يك مثال ساده در اين زمينه توجه كنيم.

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex11 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex11
{
class Class1
{
[STAThread]
static void Main(string[] args)
{

Console.WriteLine(
"for (int i = 1; i <= 100; i++) -> break at i==5" );
for (int i = 1; i <= 100; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
Console.ReadLine();

Console.WriteLine(
"for (int i = 1; i <= 10; i++) -> continue if i<9" );
for (int i = 1; i <= 10; i++)
{
if (i < 9)
continue;
Console.WriteLine(i);
}
Console.ReadLine();

}
}
}

موارد تكميلي مربوط به رد و بدل كردن مقادير به/از كلاس ها :

در قسمت بعدي مي خواهيم خاصيتي را تعريف كنيم كه يك مقدار را از كاربر مي گيرد و در برنامه مي توان توسط قسمت هاي ديگر از آن استفاده كرد.

ابتدا يك متغير عمومي بايد در سطح كلاس تعريف كرد تا مقدار دريافت شده توسط set را در خود نگاه داري كند (در مورد scope متغيرها ( متغيرهاي عمومي و محلي و امثال اينها) در هنگام معرفي توابع بيشتر بحث خواهد شد) . سپس از طريق كلمه ي كليدي value مقدار دريافت شده به متغير انتساب مي يابد و چون در سطح كلاس عمومي است در تمام كلاس قابل درسترسي است.

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex12 انتخاب نماييد. سپس از منوي پروژه يك كلاس جديد به آن اضافه نماييد (به نام clsDate) و كد زير را درون آن بنويسيد :

using System;

namespace ex12
{
public class clsDate
{
private int Year;

public clsDate()
{
}

public int setYear
{
set
{
Year = value;
}
}

public bool IsLeapYear
{
get
{
return System.DateTime.IsLeapYear(Year);
}
}

}
}

براي استفاده از آن در متد main برنامه به صورت زير عمل مي كنيم:

using System;

namespace ex12
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
clsDate m_var = new clsDate();

m_var.setYear = 1990;

if (m_var.IsLeapYear)
Console.WriteLine("1990 is a leap year.");
else
Console.WriteLine("1990 is not a leap year.");

Console.ReadLine();
}
}
}

توضيحاتي در مورد كد فوق:

1- نحوه ي تعريف متغير از يك كلاس جزو اساسي ترين قسمت هاي كار با يك كلاس محسوب مي شود كه در قسمت هاي پيشين نيز معرفي گرديد.
2- هنگامي كه از if استفاده مي كنيم لزومي ندارد حتما بنويسيم m_var.IsLeapYear==true . همين كه اين خاصيت ذكر مي شود در وهله ي اول true بودن آن چك خواهد شد.
3- نحوه ي مقدار دهي به يك خاصيت را هم در كد فوق ملاحظه مي نماييد. در هنگام استفاده از خاصيت ها نيازي به آوردن پرانتزها () در مقابل نام آنها وجود ندارد.
4- براي مرور ، نحوه ي معرفي خاصيت ها با get نيز بيان گرديد. با استفاده از set و get مي توان به كلاس ها ، مقادير متغيرها را پاس كرد و يا مقداري را دريافت نمود.

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت هفتم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۶۱ مراجعه امروز
۵۲۷۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت هفتم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۱/۸/۱۳۸۲ اين مقاله ۱۵۸۳ بار مطالعه شده است
۹ نفر تا به حال به اين مقاله رای داده اند.
تعريف متدها در سي شارپ

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

در سي شارپ يك تابع به صورت زير تعريف مي شود :

(نوع و اسامي پارامترها) نام تابع نوع خروجي تابع سطح دسترسي به تابع
}
بدنه ي تابع
{

براي تعريف يك متد يا تابع ابتدا سطح دسترسي به آن مانند public و private سپس نوع خروجي تابع مانند void ( هيچي ) ذكر مي گردد كه داخل اين پرانتزها مي توان ورودي هاي تابع يا بقولي آرگومان هاي ورودي را معرفي كرد. سپس تابع بايد با { شروع و با يك } خاتمه يابد.

براي مثال :

public int myFunc( int x )
{
...….
}

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

توابع void :

توابعي كه با نوع void معرفي مي شوند هيچ خروجي ندارند و در زبان ويژوال بيسيك به آْنها sub و در دلفي به آنها procedure مي گويند.

بازگرداندن يك مقدار از يك تابع :

پس از اينكه عمليات يك مجموعه از كدها درون تابع به پايان رسيد با استفاده از كلمه ي return مي توان خروجي تابع را معرفي كرد. لازم به ذكر است ، هرجايي اين كلمه ي return ذكر شود كار تابع خاتمه مي يابد.

بهتر است موارد فوق را با چند مثال مرور كنيم :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex13 انتخاب نماييد. در اينجا مي خواهيم تابعي را تعريف كنيم كه سه برابر جذر يك عدد را بر مي گرداند.

using System;

namespace ex13
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine( int3SQL(3) );
Console.ReadLine();
}

public static double int3SQL( double intInput )
{
double i=0;
i = Math.Sqrt( intInput );
return i;
}
}
}

توضيحاتي در مورد كد فوق :

1- از شيء Math در سي شارپ مي توان براي انجام يك سري عمليات رياضي ابتدايي استفاده كرد. در اينجا از متد جذر گرفتن آن استفاده شده است.
2- در تعريف تابع خودمان از كلمه ي كليدي static استفاده شده است. درون تابع Main نمي توان توابع غير استاتيك را فراخواني كرد. فعلا اين نكته را بخاطر را داشته باشيد تا در مقالات بعدي بيشتر راجع به آن صحبت شود.
3- بد نيست تابع تعريف شده را كمي بيشتر آناليز كنيم :

public static double int3SQL( double intInput )
{
double i=0;
i = Math.Sqrt( intInput );
return i;
}

ابتدا سطح دسترسي به تابع ذكر شده است. پابليك ، يعني اين تابع خارج از كلاس يك برنامه نيز قابل دسترسي است. سپس از كلمه ي static استفاده گرديده كه توضيح مختصري را در مورد آن ملاحظه كرديد. در ادامه نوع خروجي تابع كه در اينجا double مي باشد معرفي گرديده است. دقت كنيد كه حتما بايد نوع تعريف شده با مقداري كه يك تابع بر مي گرداند يكسان باشد و گرنه با يك خطا برنامه متوقف مي شود. سپس نام تابع تعريف شده است. داخل پرانتز ها نوع و نام آرگوماني ارائه شده است كه در بدنه ي تابع استفاده مي گردد. اگر به تعداد بيشتري پارامتر و يا آرگومان نياز بود مي توان آنها را با , از هم جدا كرد.
پس از اينكه عمليات تابع خاتمه مي يابد با استفاده از return اين خروجي را معرفي مي نماييم.
براي استفاده از اين تابع به سادگي نام تابع و سپس پرانتزها به همراه يك عدد دلخواه را مي نويسم كه آنرا در متد Main برنامه مي توان مشاهده كرد.

تعريف توابع در كلاس هاي ديگر برنامه و نحوه ي استفاده از آنها :

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

مثالي ديگر در اين زمينه :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex14 انتخاب نماييد. سپس از منوي پروژه يك كلاس جديد را به برنامه اضافه نماييد (نام آنرا clsTools بگذاريد) .

using System;

namespace ex14
{
public class clsTools
{
public clsTools()
{
}

public uint intCalc ( uint a , uint b )
{
uint c = Math.Min (a,b);
double x = Math.Sqrt(c) ;
uint w = Convert.ToUInt32 ( x);
return w;
}
}
}

سپس در متد Main برنامه مي توان به صورت زير از آن استفاده كرد :

using System;

namespace ex14
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
clsTools m_var = new clsTools();
Console.WriteLine( m_var.intCalc(4,9));
Console.ReadLine();
}
}
}

توضيحاتي در مورد كد فوق :
1- تابع intCalc ما دو عدد صحيح مثبت را مي گيرد و سپس جذر كوچكترين دو عدد ورودي را محاسبه مي كند.
2- براي تبديل نوع هاي عددي مختلف به هم مي توان از شيء Convert استفاده كرد.
3- بدون استفاده از شيء Convert يكبار برنامه را اجرا كنيد و دليل خطاي بوجود آمده را بيان نماييد

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت هشتم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۶۴ مراجعه امروز
۵۲۸۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت هشتم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۱/۸/۱۳۸۲ اين مقاله ۱۴۴۱ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

چگونه از يك تابع بيش از يك خروجي دريافت كنيم.

ظاهرا به نظر مي رسد كه توابع فقط مي توانند يك return داشته باشند و بلافاصله پس از فراخواني return كار تابع پايان يافته است. در سي شارپ دو كلمه ي كليدي به نام هاي ref و out اضافه شده اند كه اين امر را ساده تر مي كنند.

استفاده از كلمه ي كليدي out :

از out در تعريف تابع قبل از معرفي نوع آرگومان ورودي استفاده مي كنيم . در اين حالت بجاي اينكه به اين آرگومان ، آرگومان ورودي بگوييم ، مي توان آنرا آرگومان خروجي ناميد. تا يك مثال را در اين زمينه با هم مرور نكنيم اين مورد مفهوم نخواهد بود :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex15 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex15
{
class Class1
{

public static int TestOut(out char i)
{
i = 'b';
return -1;
}

[STAThread]
static void Main(string[] args)
{
char i; // variable need not be initialized
Console.WriteLine(TestOut(out i));
Console.WriteLine(i);
Console.ReadLine();

}
}
}

توضيحاتي در مورد كد فوق :
1- در تابع TestOut آرگومان i از با كلمه ي كليدي out مشخص شده است. يعني اينكه درون تابع هر گونه تغييري روي i انجام شود ، خارج از تابع قابل دسترسي است.
2- توابعي كه داراي آرگومانهايي تعريف شده با كلمه ي كليدي out هستند نيز مي توانند از return هم استفاده كنند. همانند مثال فوق.

استفاده از كلمه ي كليدي ref :

اين كلمه ي كليدي نيز دقيقا همانند out عمل مي كند و نحوه ي تعريف و استفاده از آن نيز مشابه است با اين تفاوت كه آرگوماني كه به اين نوع توابع فرستاده مي شود بايد مقدار دهي اوليه شده باشد.

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex16 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex16
{
class Class1
{
public static void FillArray(ref int[] arr)
{
// Create the array on demand:
if (arr == null)
arr = new int[10];
// Otherwise fill the array:
arr[0] = 123;
arr[4] = 1024;
}

[STAThread]
static void Main(string[] args)
{
// Initialize the array:
int[] myArray = {1,2,3,4,5};

// Pass the array using ref:
FillArray(ref myArray);

// Display the updated array:
Console.WriteLine("Array elements are:");
for (int i = 0; i < myArray.Length; i++)
Console.WriteLine(myArray[i]);

Console.ReadLine();
}
}
}

توضيحاتي در مورد كد فوق :
1- همانطور كه ملاحظه مي كنيد در اينجا هنگام استفاده از تابع FillArray بايد آرگوماني را كه مي خواهيم به آن پاس كنيم مقدار دهي اوليه كنيم.
2- پس مي توان نتيجه گرفت آرگومانهايي كه با out تعريف مي شوند به صورت خالص خروجي هستند و نيازي به مقدار دهي اوليه هنگام استفاده از آنها وجود ندارد. از ref هنگامي استفاده مي كنيم كه بخواهيم روي متغير موجود و مقدار دهي شده ي خارج از تابع ، درون تابع عملياتي صورت گيرد و سپس همان متغير دستكاري شده ، عودت داده شود.

تعريف تابعي با تعداد آرگومانهاي نامعلوم :

گاهي از اوقات نياز است تا تابعي تعريف كنيم كه تعداد آرگومانهاي آن متغير باشند .براي اين منظور از كلمه ي كليدي params استفاده مي شود.
دونكته در اينجا حائز اهميت است:
1- در هر تابعي تنها مي توان يكبار از params استفاده كرد.
2- پس از بكار بردن params ديگر نمي توان هيچ آرگوماني را تعريف كرد.

يكي از مثالهايي كه در اين زمينه مي توان ارائه داد استفاده از آرايه ها به عنوان آرگومان ورودي است. در اين حالت يا مي توان يك آرايه را به صورت كامل به تابع معرفي كرد و يا تنها نام آنرا به تابع پاس كرد. مثال زير را ملاحظه كنيد :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex17 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex17
{
class Class1
{
public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}

[STAThread]
static void Main(string[] args)
{
UseParams(1, 2, 3);

int[] myarray = new int[3] {10,11,12};
UseParams(myarray);

Console.ReadLine();

}
}
}

توضيحاتي در مورد كد فوق :

1- در تابع main به دو صورت از تابع UseParams ما استفاده شده است. يا اينكه خيلي ساده هر تعداد آرگومان را مي توان به تابع فرستاد و يا اينكه در ادامه آرايه ايي رسما تعريف و سپس به تابع فرستاده شود.
2- نحوه ي تعريف و استفاده از آرايه ها به صورت آرگومان ورودي را نيز مي توان در مثال فوق آموخت

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت نهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۶۷ مراجعه امروز
۵۲۸۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت نهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۱/۸/۱۳۸۲ اين مقاله ۱۳۸۰ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

مبحث overloading :

گاهي از اوقات لازم است تا نگارش هاي مختلفي از يك تابع داشته باشيم. براي مثال تعريف سه تابع با يك نام اما با آرگومانهاي مختلف. به اين نوع توابع و يا متدها اصطلاحا Overloaded Methods مي گويند . ( فكر كنم آنرا سربارگذاري توابع ترجمه كرده اند! ) براي مثال :

void myMethod(int p1);
void myMethod(int p1, int p2);
void myMethod(int p1, string s1);

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex18 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex18
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
writeIT();

writeIT(12);

Console.ReadLine();
}

public static void writeIT()
{
Console.WriteLine(" writeIT() Ver." );
}

public static void writeIT(int intI)
{
Console.WriteLine(" writeIT(intI) Ver. = " + intI );
}

}
}

توضيحاتي در مورد كد فوق :

1- نحوه ي تعريف دو تابع با يك نام را ملاحظه مي نماييد. اينكار در زبان سي ممنوع است!
2- كامپايلر به صورت هوشمند بر اساس نوع و تعداد آرگومانهاي ورودي ، ورژن مناسب را انتخاب و اجرا مي كند.

نمونه ي ضعيفي از اين بحث در وي بي 6 به صورت تعريف توابعي با پارامترهاي Optional وجود داشت .

مباحث تكميلي آرايه ها (آرايه هاي چند بعدي):

آرايه هاي معمولي (يك بعدي) را مي توان يك رديف با تعدادي خانه خالي آماده ي پر شدن در نظر گرفت. آرايه ي دوبعدي را مي توان مانند يك جدول تشكليل شده از رديف ها و ستون ها در نظر گرفت و الي آخر...
سي شارپ دو نوع آرايه ي چند بعدي را پشتيباني مي كند : rectangular and jagged
در يك آرايه ي rectangular هر رديف ، طولش با رديف بعدي يكي است. آرايه ي jagged در حقيقت آرايه ايي از آرايه ها است ، بنابراين هر كدام از آنها مي تواند طول مختلفي داشته باشد.

تعريف يك آرايه ي دوبعدي به صورت زير است :

type [,] array-name

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex19 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex19
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
const int rows = 4;
const int columns = 3;
// declare a 4x3 integer array
int[,] rectangularArray = new int[rows, columns];
// populate the array
for (int i = 0;i < rows;i++)
{
for (int j = 0;j
            {
rectangularArray[i,j] = i+j;
}
}
// report the contents of the array
for (int i = 0;i < rows;i++)
{
for (int j = 0;j
            {
Console.WriteLine("rectangularArray[{0},{1}] = {2}",
i,j,rectangularArray[i,j]);
}
}

Console.ReadLine();
}
}
}

توضيحاتي در مورد كد فوق :
1- نحوه ي تعريف ، مقدار دهي اوليه و استفاده از آرايه هاي دو بعدي را در مثال فوق ملاحظه مي نماييد.
2- در يك آرايه ي دوبعدي محل قرار گيري رديف ها و ستون ها براي مثال به صورت زير است :

new int[rows, columns]-

استفاده از آرايه هاي چند بعدي :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex20 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex20
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
const int rows = 4;
const int columns = 3;
// imply a 4x3 array
int[,] rectangularArray =
{
{0,1,2},
{3,4,5},
{6,7,8},
{9,10,11}
};
for (int i = 0;i < rows;i++)
{
for (int j = 0;j
            {
Console.WriteLine("rectangularArray[{0},{1}] = {2}",
i,j,rectangularArray[i,j]);
}
}
}
}
}
توضيحاتي در مورد كد فوق :
1- در حقيقت مثال فوق تعريف آرايه ايي از آرايه ها بود.
2- چون مقدار دهي اوليه به صورت واضحي انجام شده نيازي به ذكر ابعاد آرايه به صورت صحيح وجود نداشت

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت دهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۷۰ مراجعه امروز
۵۲۸۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت دهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۱۱/۸/۱۳۸۲ اين مقاله ۱۴۳۸ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

Jagged arrays

Jagged arrays آرايه اي از آرايه ها است و همانطور كه ذكر شد لزومي ندارد كه هر رديف آن با رديف بعدي هم طول باشد . هنگام تعريف اين نوع آرايه شما تعداد رديف ها را مشخص مي نماييد. هر رديف يك آرايه را نگهداري مي كند. در اينجا هر آرايه بايد تعريف شود. روش تعريف Jagged array به صورت زير است
type [] []...

در اينجا تعداد براكت ها بيانگر ابعاد آرايه مي باشد. براي مثال آرايه ي زير دو بعدي است :

int [] [] myJaggedArray;

و براي مثال براي دسترسي به پنجمين عنصر آرايه ي سوم به صورت زير عمل مي شود :

myJaggedArray[2][4]

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex21 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex21
{
class Class1
{
[STAThread]
static void Main(string[] args)
{

const int rows = 4;
// declare the jagged array as 4 rows high
int[][] jaggedArray = new int[rows][];
// the first row has 5 elements
jaggedArray[0] = new int[5];
// a row with 2 elements
jaggedArray[1] = new int[2];
// a row with 3 elements
jaggedArray[2] = new int[3];
// the last row has 5 elements
jaggedArray[3] = new int[5];
// Fill some (but not all) elements of the rows
jaggedArray[0][3] = 15;
jaggedArray[1][1] = 12;
jaggedArray[2][1] = 9;
jaggedArray[2][2] = 99;
jaggedArray[3][0] = 10;
jaggedArray[3][1] = 11;
jaggedArray[3][2] = 12;
jaggedArray[3][3] = 13;
jaggedArray[3][4] = 14;
for (int i = 0;i < 5; i++)
{
Console.WriteLine("jaggedArray[0][{0}] = {1}",
i,jaggedArray[0][i]);
}
for (int i = 0;i < 2; i++)
{
Console.WriteLine("jaggedArray[1][{0}] = {1}",
i,jaggedArray[1][i]);
}
for (int i = 0;i < 3; i++)
{
Console.WriteLine("jaggedArray[2][{0}] = {1}",
i,jaggedArray[2][i]);
}
for (int i = 0;i < 5; i++)
{
Console.WriteLine("jaggedArray[3][{0}] = {1}",
i,jaggedArray[3][i]);
}

Console.ReadLine();

}
}
}

توضيحاتي در مورد كد فوق :

هنگام كار با آرايه هاي rectangular براي درسترسي به اعضا به صورت زير عمل مي شد :

rectangularArrayrectangularArray[i,j]

اما در اينجا بدين صورت است :

jaggedArray[3][i]

استفاده از System.Array :

دات نت فريم ورك كلاسي را معرفي كرده است به نام Array. توسط اين كلاس كار با آرايه ها و اعمال روي آنها براي مثال سورت كردن و غيره به شدت ساده مي شود .

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex22 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;

namespace ex22
{
class Class1
{
public static void PrintMyArray(object[] theArray)
{
foreach (object obj in theArray)
{
Console.WriteLine("Value: {0}", obj);
}
Console.WriteLine("\n");
}

[STAThread]
static void Main(string[] args)
{
String[] myArray = {
"Who", "is", "John", "Galt"
};
PrintMyArray(myArray);
Array.Reverse(myArray);
PrintMyArray(myArray);
String[] myOtherArray = {
"We", "Hold", "These", "Truths",
"To", "Be", "Self", "Evident" };

PrintMyArray(myOtherArray);
Array.Sort(myOtherArray);
PrintMyArray(myOtherArray);

Console.ReadLine() ;

}
}
}

توضيحاتي در مورد كد فوق :
از دو متد Sort و Reverse در اينجا براي سورت كردن و نمايش آرايه به ترتيب معكوس (از انتها به ابتدا) استفاده گرديده است.

تعريف آرايه هاي ديناميك در سي شارپ :

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

هنگام استفاده از ArrayList نيازي به دانستن تعداد اعضايي كه بايد اضافه شوند نمي باشد و با استفاده از متد Add آن به سادگي مي توان اعضاء را به آن اضافه نمود . تعدادي از خواص و متدهاي اين كلاس به صورت زير هستند :

Adapter , FixedSize , ReadOnly , Repeat , Synchronized , Capacity,Count , IsFixedSize , IsReadOnly , IsSynchronized , Item , SyncRoot , Add , AddRange , BinarySearch , Clear , Clone , Contains , CopyTo , GetEnumerator , GetRange , IndexOf , Insert , InsertRange , LastIndexOf , Remove , RemoveAt , RemoveRange , Reverse , SetRange , Sort , ToArray , TrimToSize

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex23 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

using System;
using System.Collections;

namespace ex23
{
// a simple class to store in the array
public class Employee
{
public Employee(int empID)
{
this.empID = empID;
}
public override string ToString( )
{
return empID.ToString( );
}
public int EmpID
{
get
{
return empID;
}
set
{
empID = value;
}
}
private int empID;
}

class Class1
{
[STAThread]
static void Main(string[] args)
{

ArrayList empArray = new ArrayList( );
ArrayList intArray = new ArrayList( );
// populate the array
for (int i = 0;i<5;i++)
{
empArray.Add(new Employee(i+100));
intArray.Add(i*5);
}
// print all the contents
for (int i = 0;i
         {
Console.Write("{0} ", intArray[i].ToString( ));
}
Console.WriteLine("\n");
// print all the contents of the button array
for (int i = 0;i
         {
Console.Write("{0} ", empArray[i].ToString( ));
}
Console.WriteLine("\n");
Console.WriteLine("empArray.Capacity: {0}",
empArray.Capacity);

Console.ReadLine();

}
}
}
توضيحاتي در مورد كد فوق :

1- با كلمه ي كليدي override در قسمت هاي بعدي آشنا خواهيم شد.
2- براي استفاده از ArrayList لازم بود تا فضاي نامي را كه اين كلاس در آن تعريف شده است ، به برنامه اضافه كرد.
3- در مثال فوق نحوه ي تعريف دو كلاس را در يك فضاي نام مشاهده مي نماييد.
4- نحوه ي تعريف و مقدار دهي ArrayList و همچنين استفاده از خواص آن در مثال فوق بررسي شده است

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت يازدهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۷۳ مراجعه امروز
۵۲۸۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت يازدهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۸/۸/۱۳۸۲ اين مقاله ۱۳۷۴ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.
از اين قسمت به بعد مي خواهيم نگاهي دقيق تر به بحث شيء گرايي در سي شارپ بياندازيم؛ همانند فضاهاي نام ، كلاس ها ، ارث بري ، پلي مرفيسم و غيره.

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

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex24 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

// Namespace Declaration
using System;

namespace ex24
{
namespace tutorial
{
// Program start class
class NamespaceCSS
{
// Main begins program execution.
public static void Main()
{
// Write to console
Console.WriteLine("This is the new Namespace.");
}
}
}

}

توضيحاتي در مورد كد فوق :
يكي از روش هاي مناسب براي معرفي فضاهاي نام ، ارائه ي آنها به صورت سلسله مراتبي مي باشد. قسمت هاي عمومي تر در بالا و قسمت هاي اختصاصي تر در فصاهاي نام داخلي تر قرار داده مي شوند. اين روش به معرفي فضاهاي نام تو در تو منتهي مي شود (nested namespaces) ، همانند مثال بالا.

كد فوق را به صورت زير با استفاده از عملگر دات (.) مي توان خلاصه نويسي كرد و نتيجه با قبل تفاوتي ندارد:

// Namespace Declaration
using System;

namespace ex24.tutorial
{
// Program start class
class NamespaceCSS
{
// Main begins program execution.
public static void Main()
{
// Write to console
Console.WriteLine("This is the new Namespace.");
}
}
}

طريقه ي فراخواني اعضاي فضاهاي نام :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex25 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

// Namespace Declaration
using System;

namespace ex25
{
// nested namespace
namespace tutorial
{
class myExample1
{
public static void myPrint1()
{
Console.WriteLine("calling another namespace member1.");
}
}
}

// Program start class
class NamespaceCalling
{
// Main begins program execution.
public static void Main()
{
// Write to console
tutorial.myExample1.myPrint1();
tutorial.myExample2.myPrint2();
}
}
}

// same namespace as nested namespace above
namespace ex25.tutorial
{
class myExample2
{
public static void myPrint2()
{
Console.WriteLine("calling another namespace member2.");
}
}
}

توضيحاتي در مورد كد فوق :
در كد فوق نحوه ي استفاده از اعضاي تعريف شده در فضاهاي نام را مي توان مشاهده كرد. نحوه ي استفاده از آنها همانطور كه در قسمت هاي قبل نيز گفته شد به صورت زير است :

ProjectName.NameSpace.ClassName.MemberName

براي مثال در فصاي نام tutorial كلاس myExample1 قرار دارد و داخل آن متد myPrint1 تعريف شده است. پس نحوه ي دسترسي به متد آن به صورت زير است :

tutorial.myExample1.myPrint1();

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

استفاده از using :

مثال : يك برنامه ي سي شارپ جديد console را در VS.NET باز كنيد و نام آنرا درابتدا ex26 انتخاب نماييد. سپس كد زير را درون آن بنويسيد :

// Namespace Declaration
using System;
using ex26.tutorial;

// Program start class
class UsingDirective
{
// Main begins program execution.
public static void Main()
{
// Call namespace member
myExample.myPrint();
}
}

// C# Namespace
namespace ex26.tutorial
{
class myExample
{
public static void myPrint()
{
Console.WriteLine("Example of using a using directive.");
}
}
}

توضيحاتي در مورد كد فوق :

همانند مثال بالا ، براي خلاصه نويسي مي توان از كلمه ي using به همراه نام namespace مورد نظر استفاده كرد. براي مثال اگر متد WriteLine را بخواهيم كامل بنويسيم به صورت زير است :

System.Console.WriteLine(...);

اما با قيد كردن و الحاق كردن فضاي نام آن ، ديگر نيازي به ذكر System در ابتداي آن نيست.

نكته :

باز هم مي توان خلاصه نويسي بيشتري را ارائه داد

using csTut = ex26.tutorial.myExample; // alias

در اين صورت تنها كافي است متد كلاس تعريف شده در آنرا به صورت زير فراخواني كنيم :

csTut.myPrint();

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت دوازدهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۷۶ مراجعه امروز
۵۲۹۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت دوازدهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۸/۸/۱۳۸۲ اين مقاله ۱۲۹۶ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.
كلاس ها در سي شارپ :

تا بحال در حد كاربرد ، با كلاس ها آشنا شده ايم . اما در اين قسمت مي خواهيم نگاهي دقيق تر به كلاس ها بياندازيم.

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

using System;

class Data
{
public int x;
}
class App
{
public static void Main()
{
Data d1 = new Data();
d1.x = 1;
Data d2 = new Data();
d2.x = 2;
Console.WriteLine("d1.x = {0}", d1.x);
Console.WriteLine("d2.x = {0}", d2.x);
}
}

در اينجا كلاس Data تعريف شده است و داراي يك عضو به نام x مي باشد. به اين نوع داده در كلاس فيلد گفته مي شود و هنگاميكه به صورت public معرفي مي شود يعني خارج از كلاس نيز قابل دسترسي است. در كد بالا دو متغير از كلاس تعريف و مقدار دهي اوليه شده اند. خروجي برنامه به صورت زير است :

d1.x = 1
d2.x = 2

دليل اين خروجي آن است كه هر instance (نمونه) از كلاس منحصر بفرد است و در اينجا نمي توان انتظار داشت كه هر دو خروجي يكي شوند.

براي مقدار دهي اوليه متغيرهايي كه به صورت فيلد تعريف مي شوند ، بهتر است مقدار دهي آنها را در سازنده ي كلاس (constructor) انجام دهيم.

class Data
{
public int x;
public Data(){x = 99;}
}

همانطور كه پيشتر نيز ذكر شد ، متدي كه هم نام كلاس است ، سازنده نام مي گيرد. يك كلاس مي تواند بيش از يك سازنده داشته باشد. براي مثال :

class Data
{
public int x;
private Data(){}
public Data(int y){x = y;}
public Data(int y, int z){x = y + z;}
}

از آنجائيكه كه سازنده ي بدون پارامتر ذكر شده در كد فوق private تعريف شده است بنابراين خارج از كلاس ديگر قابل دسترسي نمي باشد . بنابراين كدي خارج از كلاس ، تنها مي تواند از دو سازنده ي ديگر استفاده كند. براي مثال تعريف دو متغير جديد از اين كلاس به صورت زير مي باشد :

Data d1 = new Data(44);
Data d2 = new Data(22, 33);

سي شارپ به شما اجازه مي دهد تا سازنده ها را در يك كلاس توسط كلمه ي كليدي this نيز فراخواني كنيد يعني بجاي ذكر نام متد سازنده از كلمه ي this استفاده شود ( در خود كلاس ) .

اگر مي خواهيد متغيري را بين نمونه (instance) هاي مختلف يك كلاس به اشتراك بگذاريد كلمه ي كليدي static وارد صحنه مي شود. به مثال زير توجه كنيد :

using System;

class Counted
{
public static int count = 0;
public Counted()
{
count++;
}
public int GetInstanceCount()
{
return count;
}
}
class App
{
public static void Main()
{
Counted d1 = new Counted();
Console.WriteLine("current total {0}", d1.GetInstanceCount());
Counted d2 = new Counted();
Console.WriteLine("current total {0}", d2.GetInstanceCount());
Console.WriteLine("total {0}", Counted.count);
}
}

بايد خاطر نشان كرد كه متغيرهاي استاتيك توسط نمونه هاي كلاس قابل دستيابي نيستند و فقط درون كلاس به شكل زير مي توان از آْنها استفاده كرد :

.

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

در مثال فوق تابع GetInstanceCount تنها يك عدد را بر مي گرداند. در برنامه نويسي شيء گرا مرسوم است كه در اين حالت به جاي توابع از خواص استفاده شود كه به اندازه ي كافي در مورد آنها در قسمت هاي قبل توضيح داده شد. در اين صورت تعريف فوق به صورت زير در مي آيد :

class Counted
{
public static int x = 0;
public Counted()
{
x++;
}
public int InstanceCount // property
{
get{return x;}
}
}

و در اين صورت قسمت بعدي كد به صورت زير اصلاح مي شود (فراخواني خواص ، بدون ذكر پرانتزها بعد از نام آنها صورت مي گيرد):

Counted d1 = new Counted();
Console.WriteLine("current total {0}", d1.InstanceCount);
Counted d2 = new Counted();
Console.WriteLine("current total {0}", d2.InstanceCount);

اگر يك خاصيت هم خواندني و هم نوشتني باشد به صورت زير تعريف مي شود :

private string name;
public string Name
{
get{return name;}
set{name = value;}
}

فيلدهاي پابليك را مي توان خواند و يا تغيير داد. اگر لازم باشد تا كاربر نتواند آنها را تغيير دهد مي توان از كلمه ي كليدي readonly قبل از تعريف آنها استفاده كرد. مثال :

class Data
{
public readonly int x = 42;
}

بحث كلاس ها ادامه دارد...

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت سيزدهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۷۹ مراجعه امروز
۵۲۹۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت سيزدهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۸/۸/۱۳۸۲ اين مقاله ۱۳۴۰ بار مطالعه شده است
۲ نفر تا به حال به اين مقاله رای داده اند.
ايندكسرها (Indexers)

با استفاده از ايندكسرها مي توان با يك كلاس همانند آرايه ها رفتار كرد. به مثال زير توجه كنيد :

using System;

///
/// A simple indexer example.
///
class IntIndexer
{
private string[] myData;

public IntIndexer(int size)
{
myData = new string[size];

for (int i=0; i < size; i++)
{
myData[i] = "empty";
}
}

public string this[int pos]
{
get
{
return myData[pos];
}
set
{
myData[pos] = value;
}
}

static void Main(string[] args)
{
int size = 10;

IntIndexer myInd = new IntIndexer(size);

myInd[9] = "Some Value";
myInd[3] = "Another Value";
myInd[5] = "Any Value";

Console.WriteLine("\nIndexer Output\n");

for (int i=0; i < size; i++)
{
Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]);
}
}
}

در مثال فوق نحوه ي تعريف و استفاده از ايندكسرها را مي توان مشاهده كرد. كلاس IntIndexer حاوي آرايه اي به نام myData مي باشد. بدليل private بودن آن در خارج از كلاس قابل دسترسي نيست. اين آرايه در سازنده ي كلاس (متد IntIndexer) با كلمه ي empty مقدار دهي اوليه شده است.
عضو بعدي كلاس Indexer مي باشد و با كلمه ي كليدي this و براكتها مشخص شده ست (this[int pos]). همانطور كه ملاحظه مي فرماييد نحوه ي تعريف ايندكسرها شبيه به تعريف خواص مي باشد.

this [argument list]
{
get
{
// Get codes goes here
}
set
{
// Set codes goes here
}
}

خروجي مثال فوق به صورت زير است :

myInd[0]: empty
myInd[1]: empty
myInd[2]: empty
myInd[3]: Another Value
myInd[4]: empty
myInd[5]: Any Value
myInd[6]: empty
myInd[7]: empty
myInd[8]: empty
myInd[9]: Some Value

استفاده از اعداد صحيح روشي است متداول براي دسترسي به اعضاي آرايه ها در بسياري از زبانها اما ايندكسرها در سي شارپ فراتر از اين مي رود. ايندكسرها را مي توان با پارامترهاي متعددي تعريف كرد و هر پارامتر با نوعي مختلف (دقيقا همانند پارامترهاي ورودي متدها). البته محدوديتي كه اينجا وجود دارد در مورد نوع پارامتر ها است كه تنها مي تواند integers, enums, and strings باشد . بعلاوه قابليت Overloading ايندكسرها نيز وجود دارد. به همين جهت به آنها آرايه هاي هوشمند هم گفته مي شود (smart arrays) .مثال :

using System;

///
/// Implements overloaded indexers.
///
class OvrIndexer
{
private string[] myData;
private int arrSize;

public OvrIndexer(int size)
{
arrSize = size;
myData = new string[size];

for (int i=0; i < size; i++)
{
myData[i] = "empty";
}
}

public string this[int pos]
{
get
{
return myData[pos];
}
set
{
myData[pos] = value;
}
}

public string this[string data]
{
get
{
int count = 0;

for (int i=0; i < arrSize; i++)
{
if (myData[i] == data)
{
count++;
}
}
return count.ToString();
}
set
{
for (int i=0; i < arrSize; i++)
{
if (myData[i] == data)
{
myData[i] = value;
}
}
}
}

static void Main(string[] args)
{
int size = 10;
OvrIndexer myInd = new OvrIndexer(size);

myInd[9] = "Some Value";
myInd[3] = "Another Value";
myInd[5] = "Any Value";

myInd["empty"] = "no value";

Console.WriteLine("\nIndexer Output\n");

for (int i=0; i < size; i++)
{
Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]);
}

Console.WriteLine("\nNumber of \"no value\" entries: {0}", myInd["no value"]);
}
}

در مثال فوق اولين ايندكسر با يك پارامتر از نوع اعداد صحيح تعريف شده است و در ايندكسر دوم از نوع رشته.
خروجي برنامه ي فوق به صورت زير است :

myInd[0]: no value
myInd[1]: no value
myInd[2]: no value
myInd[3]: Another Value
myInd[4]: no value
myInd[5]: Any Value
myInd[6]: no value
myInd[7]: no value
myInd[8]: no value
myInd[9]: Some Value

Number of "no value" entries: 7

نكته :
1- امضاي (ليست پارامترهاي) ايندكسر ها در يك كلاس بايد منحصر بفرد باشد .
2- تعريف يك ايندكسر به صورت استاتيك مجاز نيست.

در صورت نياز به ايندكسرهايي با پارمترهاي ورودي متعدد مي توان به صورت زير عمل كرد :

public object this[int param1, ..., int paramN]
{
get
{
// process and return some class data
}
set
{
// process and assign some class data
}
}

يك مثال ديگر :

using System;

class IndexExample
{
string Message;

public static void Main()
{
IndexExample obj=new IndexExample("Welcome");

/* This will access the String variable Message
using array like notation
*/
for(int i=0;i < obj.Length;i++)
{
Console.WriteLine(obj[i]);
}
obj[obj.Length-1]="e to C#";

Console.WriteLine(obj.Message);

}

public IndexExample(string s)
{
Message=s;
}

public string this[int i]
{
get
{
if(i >= 0 && i < Message.Length)
{
return Message.Substring(i,1);
}
else
{
return "";
}
}
set
{
if(i >= 0 && i < Message.Length)
{
Message=Message.Substring(0,i) + value + Message.Substring(i+1);
}
}
}

public int Length
{
get
{
if(Message!=null)
{
return Message.Length;
}
else
return 0;
}
}
}

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت چهاردهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۸۲ مراجعه امروز
۵۲۹۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت چهاردهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۸/۸/۱۳۸۲ اين مقاله ۱۲۹۳ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
ارث بري (Inheritance) :

ارث بري يكي از مفاهيم اوليه ي برنامه نويسي شيء گرا مي باشد. با استفاده از آن استفاده مجدد از كد موجود به نحوي مؤثر ميسر مي گردد و صرفه جويي قابل توجهي را در زمان برنامه نويسي پديد مي آورد. به كد زير دقت كنيد :

using System;

public class ParentClass
{
public ParentClass()
{
Console.WriteLine("Parent Constructor.");
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}

public class ChildClass : ParentClass
{
public ChildClass()
{
Console.WriteLine("Child Constructor.");
}
public static void Main()
{
ChildClass child = new ChildClass();
child.print();
}
}

Output:
Parent Constructor.
Child Constructor.
I'm a Parent Class.

كد فوق از دو كلاس استفاده مي كند. كلاس بالايي ParentClass و كلاس اصلي ChildClass مي باشد. كاري كه انجام شده است استفاده از كدهاي كلاس والد ParentClass در كلاس بچه (!) ChildClass مي باشد. براي اينكه ParentClass را بعنوان كلاس پايه براي ChildClass معرفي كنيم به صورت زير عمل شد :

public class ChildClass : ParentClass

كلاس پايه با استفاده از معرفي كولون ":" ، پس از كلاس مشتق شده تعريف مي شود. در سي شارپ تنها ارث بري يگانه پشتيباني مي شود. بنابراين تنها يك كلاس پايه را براي ارث بري مي توان تعريف كرد.

ChildClass دقيقا توانايي هاي ParentClass را دارا است. بنابراين مي توان گفت ChildClass همان ParentClass است. براي مثال در كد فوق ChildClass داراي متد print نمي باشد اما آنرا از كلاس ParentClass به ارث برده است و در متد Main برنامه از آن استفاده گرديده است.

هنگام ساختن يك شيء از كلاس مشتق شده (derived) ، ابتدا يك نمونه از كلاس والد خود بخود ساخته مي شود. اين مورد در خروجي كد فوق هنگامي كه متدهاي سازنده ها روي صفحه چاپ شده اند قابل مشاهده است.

تبادل اطلاعات بين كلاس والد و كلاس فرزند :

به مثال زير دقت كنيد :

using System;

public class Parent
{
string parentString;

public Parent()
{
Console.WriteLine("Parent Constructor.");
}

public Parent(string myString)
{
parentString = myString;
Console.WriteLine(parentString);
}

public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}

public class Child : Parent
{
public Child() : base("From Derived")
{
Console.WriteLine("Child Constructor.");
}

public void print()
{
base.print();
Console.WriteLine("I'm a Child Class.");
}

public static void Main()
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}

Output:
From Derived
Child Constructor.
I'm a Parent Class.
I'm a Child Class.
I'm a Parent Class.

كلاس فرزند با كلاس والد در هنگام instantiation مي تواند تبادل اطلاعات كند. همانطور كه در مثال فوق بارز است با استفاده از كلمه ي كليدي base ، كلاس فرزند تابع سازنده ي كلاس والد را فراخواني كرده است. اولين خط خروجي بيانگر اين موضوع است.

گاهي از اوقات ما مي خواهيم تابعي را كه در كلاس والد تعريف شده است را در كلاس فرزند با تعريف ديگري و مخصوص به خودمان ارائه دهيم. در اينصورت تابع تعريف شده در كلاس فرزند ، تابع هم نام والد را مخفي خواهد كرد و ديگر آن تابع والد فراخواني نخواهد گرديد. در اين حالت تنها يك راه براي دسترسي به تابع اصلي والد وجود دارد و آن استفاده از base. مي باشد كه در كد فوق پياده سازي شده است.
با استفاده از base. مي توان به تمام اعضاي public و يا protected كلاس والد از درون كلاس فرزند دسترسي داشت.
راه ديگري كه براي اين منظور وجود دارد در آخرين خط كد فوق در متد Main پياده سازي شده است :

((Parent)child).print();

براي تبديل نوع هاي مختلف در سي شارپ مي توان از پرانتز و سپس ذكر نوع اصلي استفاده كرد به اين عمل casting و يا boxing هم مي گويند. در كد فوق درحقيقت child به نوعي از parent تبديل شده است. بنابراين مانند اين است كه يك نمونه از كلاس والد متد print همان كلاس را فراخواني مي كند.

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت پانزدهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۸۵ مراجعه امروز
۵۳۰۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت پانزدهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۸/۸/۱۳۸۲ اين مقاله ۱۳۳۱ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
پلي مرفيسم (Polymorphism)

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

نحوه ي ايجاد متدهاي پلي مرفيك :
براي ايجاد متدي كه نياز است تا پلي مرفيسم را پشتيباني نمايد ، تنها كافي است آنرا از نوع virtual در كلاس پايه تعريف كنيم. مثال :
فرض كنيد تابع DrawWindow در كلاس Window تعريف شده است. براي ايجاد قابليت پلي مرفيسم در آن به صورت زير عمل مي شود :

public virtual void DrawWindow( )

در اين حالت هر كلاسي كه از Window مشتق شود ، مجاز است نگارش خاص خودش را از DrawWindow ارائه كند. در اين صورت در كلاسي كه از كلاس پايه ي ما ارث مي برد ، تنها كافي است كه كلمه ي كليدي override را قبل از نام تابع مذكور ذكر نماييم.

يك مثال كامل :

using System;

public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Line.");
}
}

public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Circle.");
}
}

public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Square.");
}
}
public class DrawDemo
{
public static int Main(string[] args)
{
DrawingObject[] dObj = new DrawingObject[4];

dObj[0] = new Line();
dObj[1] = new Circle();
dObj[2] = new Square();
dObj[3] = new DrawingObject();

foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}

return 0;
}
}

كلاس DrawingObject ، كلاسي پايه براي تمام كد ما كه از آن به ارث مي برد ، مي باشد. متد Draw در آن با كلمه ي كليدي virtual معرفي شده است. يعني تمام كلاس هاي فرزند اين كلاس والد مي توانند اين متد را override كنند ( تحريف كردن و يا تحت الشعاع قرار دادن هم ترجمه شده است! ).
در ادامه سه كلاس تعريف شده اند كه تمامي آنها از كلاس مبنا ارث مي برند و تابع Draw را تحريف كرده اند (!). با استفاده از كلمه ي كليدي override مي توان تابع مجازي كلاس مبنا را با تعريفي جديد در زمان اجراي برنامه ارائه داد. تحريف شدن تنها زماني رخ مي دهد كه كلاس ، توسط ريفرنس كلاس مبنا مورد ارجاع واقع شده باشد.
و در متد Main برنامه از اين كلاس ها در عمل استفاده گرديده است. در متد Main ، آرايه اي از نوع DrawingObject تعريف و مقدار دهي اوليه شده است تا بتواند 4 شيء از نوع اين كلاس را در خودش ذخيره كند.
بدليل رابطه ي ارث بري موجود مي توان آرايه ي dObj را با نوع هايي از كلاس هاي Line ، Circle و Square مقدار دهي كرد (همانند كدهاي بعدي متد Main ) . اگر ارث بري در اينجا وجود نمي داشت مي بايست به ازاي هر كلاس يك آرايه تعريف مي شد.
سپس از حلقه ي زيباي foreach براي حركت در بين اعضاي اين آرايه استفاده گرديده است. در اينجا هر شيء متد خاص خودش را در مورد Draw فراخواني مي كند و نتيجه را روي صفحه نمايش خواهد داد.
خروجي نهايي به صورت زير خواهد بود :

Output:
I'm a Line.
I'm a Circle.
I'm a Square.
I'm just a generic drawing object.

کيفيت مقاله :
عالی خوب متوسط ضعيف


ساخت منوهاي Drop Down ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۴۴ مراجعه امروز
۵۱۶۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ساخت منوهاي Drop Down
نويسنده : مجتبی دشتی نژاد
موضوع : DHTML [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۲ اين مقاله ۱۴۸۸ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

در اين يادداشت مي خواهم چگونگي ساخت منوهاي Drop Down را آموزش بدهم. البته منظورم کادرهاي Drop Down که با تگ <select> درست مي شوند نيست! شايد تا به حال سايتهايي را ديده باشيد که هنگامي که بر روي متني کليک مي کنيد، در زير آن يک ناحيه اي نمايان مي شود که در آن نوشته و يا عکسي مي باشد. اگر به Windows Explorer نگاهي بياندازيد، منظورم را متوجه مي شود. در آن پنجره به My Computer نگاه کنيد. در کنار آن يک علامت مثبت است که با کليک بر روي آن گزينه، علامت مثبت به علامت منفي و سپس هارد ديسک درايوها و CD-ROMها در زير آن به نمايش در مي آيند. اين کار هم توسط يک کد جاوااسکريپت در وب امکان پذير است. به ياد داشته باشيد که براي آن عکسها، من از نامهاي p.gif (براي علامت مثبت) و n.gif (براي علامت منفي) استفاده کرده ام. بقيه روش کار به صورت زير است:
ابتدا کد جاوااسکريپت زير را در قسمت Head صفحه (يعني در بين تگهاي </head> و <head>) کپي نماييد.

<script language="javascript">
<!--

var ns6 = (!document.all && document.getElementById);
var ie4 = (document.all);
var ns4 = (document.layers);
var openImg = "http://blog.mojtaba.net/images/p.gif";
var closeImg = "http://blog.mojtaba.net/images/n.gif";

function showLayer(layerName) {

var layerImageName = layerName + "Image"
if (ns6) {
if ( document.getElementById(layerName).style.display == '' ) {
document.getElementById(layerName).style.display = 'none';
document.getElementById(layerImageName).src = openImg;
} else {
document.getElementById(layerName).style.display = '';
document.getElementById(layerImageName).src = closeImg;
}
} else if (ie4) {
if ( document.all[layerName].style.display == '' ) {
document.all[layerName].style.display = 'none';
document.all[layerImageName].src = openImg;
} else {
document.all[layerName].style.display = '';
document.all[layerImageName].src = closeImg;
}
} else if (ns4) {
if ( document.layers[layerName].display == '' ) {
document.layers[layerName].display == 'none';
document.layers[layerImageItem].src == openImg;
} else {
document.layers[layerName].display == '';
document.layers[layerImageItem].src == closeImg;
}
}
}

//-->
</script>

پس از انجام اين کار، يک لايه به وسيله تگ <div> مي سازيم و به آن نامي را اختصاص مي دهيم.

<div id="other">

</div>

همان طور که مشاهده مي کنيد، من به اين لايه، نام other را اختصاص دادم. حال براي اين که اين لايه از صفحه ناپديد شود، مي بايست به وسيله CSS، و خاصيت display آن را مخفي کنيم. براي اين کار کد زير را به لايه خود اضافه کنيد.

style="display: none"

يعني بايد کد شما، چيزي شبيه به کد زير شود.

<div id="other" style="display: none">

</div>

پس از آنکه کار مخفي کردن لايه به اتمام رسيد، نوبت به لينکي مي رسد که اين لايه را نمايش دهد و يا آن را مخفي کند. همان طور که مي دانيد، لينکها در HTML توسط تگ <a> ساخته مي شوند. پس من هم به وسيله اين تگ، لينکي همانند لينک زير را مي سازم.

<a href="javascript:void(showLayer('other'));">Other</a>

همان طور که مشاهده مي کنيد، کلمه اي که درون پرانتزهاي showLayer نوشته شده است، دقيقا همان نامي است که به لايه مورد نظر خود اختصاص داده ايم. پس اگر خواستيد نام آن لايه را عوض کنيد، فراموش نکنيد که اينجا رو هم عوض کنيد.
تا به اينجاي کار تقريبا تمامي کارها انجام شده است. فقط تنها مسئله اي که مي ماند، آن شکلهاي مثبت و منفي است. براي وارد کردن يک عکس درون صفحه وب، از تگ <img> استفاده مي کنيم.

<img id="otherImage" border="0" width="9" height="9" src="http://blog.mojtaba.net/images/p.gif">

تنها نکته اي که در اينجا حائز اهميت است آن است که مقدار خاصيت ID براي اين عکس، برابر نام همان لايه+Image مي باشد. يعني اگر نام لايه را hidden انتخاب مي کرديد، نام اين عکس را بايد به صورت hiddenImage مي نوشتيد.
نکته ديگري که آن را مهم مي دانم به شما بگويم، آن است که بهتر است اين عکسهاي مثبت و منفي را، در هنگام بارگذاري صفحه، لود کنيد. اکثر افرادي که به وسيله اين روش، اين نوع منوهاي Drop Down را مي سازند، انجام اين کار آخري را فراموش مي کنند. اين کار باعث مي شود هنگامي که کاربر بر روي آن لينک کليک مي کند، بلافاصله علامت مثبت به علامت منفي تبديل شود. در غير اين صورت، کاربر بايد منتظر لود شدن علامت منفي شود. ولي اگر همزمان با لود شدن صفحه، علامت منفي را هم در حافظه پنهاني لود کنيد، همچين مشکلي پيش نمي آيد. در حقيقت، اين يکي از اصول طراحي عکسهاي Rollover به وسيله جاوااسکريپت است. با انجام اين کار، عکسهاي Rollover جذابيت بيشتري پيدا مي کنند. چرا که کاربر ديگر منتظر لود شدن عکس Hover نمي نشيند و همين که نشانه گر ماوس را بر روي عکس مي برد، عکس Hover را مشاهده مي کند.
براي لود کردن عکسهاي مورد نظر همزمان با لود شدن صفحه، از کد جاوااسکريپت زير استفاده مي کنيم.

label = new Image(h,w)
label.src = "path"

اين ساختار کلي کد مي باشد. کد مورد نظر ما به صورت زير در مي آيد.

p = new Image(9,9)
p.src = "http://blog.mojtaba.net/images/p.gif"
n = new Image(9,9)
n.src = "http://blog.mojtaba.net/images/n.gif"

در زير کد نهايي را مشاهده مي کنيد (من تگهاي <html> و <head> و <body> رو هم نوشتم)...

<html>

<head>
<title>Drop Down Menu</title>
<script language="javascript">
<!--

var ns6 = (!document.all && document.getElementById);
var ie4 = (document.all);
var ns4 = (document.layers);
var openImg = "http://blog.mojtaba.net/images/p.gif";
var closeImg = "http://blog.mojtaba.net/images/n.gif";

function showLayer(layerName) {

var layerImageName = layerName + "Image"
if (ns6) {
if ( document.getElementById(layerName).style.display == '' ) {
document.getElementById(layerName).style.display = 'none';
document.getElementById(layerImageName).src = openImg;
} else {
document.getElementById(layerName).style.display = '';
document.getElementById(layerImageName).src = closeImg;
}
} else if (ie4) {
if ( document.all[layerName].style.display == '' ) {
document.all[layerName].style.display = 'none';
document.all[layerImageName].src = openImg;
} else {
document.all[layerName].style.display = '';
document.all[layerImageName].src = closeImg;
}
} else if (ns4) {
if ( document.layers[layerName].display == '' ) {
document.layers[layerName].display == 'none';
document.layers[layerImageItem].src == openImg;
} else {
document.layers[layerName].display == '';
document.layers[layerImageItem].src == closeImg;
}
}
}

p = new Image(9,9)
p.src = "http://blog.mojtaba.net/images/p.gif"
n = new Image(9,9)
n.src = "http://blog.mojtaba.net/images/n.gif"

//-->
</script>
</head>

<body>
<a href="javascript:void(showLayer('other'));">
<img id="otherImage" border="0" width="9" height="9" src="http://blog.mojtaba.net/images/p.gif"> Other</a>
<div id="other" style="display: none">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<p>Paragraph 3</p>
</div>
</body>

</html>

فقط به ياد داشته باشيد که در هنگام استفاده از اين کد، عکسهاي p.gif و n.gif را درون هاست خود کپي کنيد و به جاي استفاده از آدرسهاي http://blog.mojtaba.net/images/p.gif و http://blog.mojtaba.net/images/n.gif از آدرسهاي درون هاست خود استفاده کنيد. چرا که Bandwidth من محدوديت داره...

کيفيت مقاله :
عالی خوب متوسط ضعيف


ساخت منوهاي Rollover با CSS ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۴۷ مراجعه امروز
۵۱۶۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ساخت منوهاي Rollover با CSS
نويسنده : مجتبی دشتی نژاد
موضوع : DHTML [image] نسخه قابل چاپ
تاريخ نشر : ۴/۹/۱۳۸۲ اين مقاله ۱۳۵۸ بار مطالعه شده است
۱۱ نفر تا به حال به اين مقاله رای داده اند.

حتما تا به حال در حين گشت زني در اينترنت، با منوهايي برخورد کرده ايد که هنگامي که ماوس بر روي آنها قرار مي گيرد، رنگ آنها عوض مي شود. به اين حالت اصطلاحا Rollover مي گويند. اين کار هم به وسيله جاوااسکريپت و هم به وسيله CSS انجام مي شود. اگر بخواهيد به وسيله جاوااسکريپت اين کار را انجام دهيد، کمي وقتتان گرفته خواهد شد. اما به وسيله CSS، انجام اين کار مثل آب خوردن است!
در زير کد HTML نهايي (و نه کد CSS) را مشاهده مي کنيد.

<div id="navigation">
<a href="#">Main Page</a>
<a href="#">Articles</a>
<a href="#">Tutorials</a>
<a href="#">Download</a>
<a href="#">Contact Me</a>
</div>

اين کد، تنها شما را به مقصود نهايي نمي رساند. مرحله اصلي در نوشتن کد CSS آن است. کد CSS را در زير مشاهده مي کنيد (فراموش نکنيد که براي استفاده از کد زير، مي بايست آن را در بين دو تگ </style> و <style type="text/css"> و در قسمت Head صفحه (يعني بين تگهاي </head> و <head>) قرار دهيد. همچنين مي توانيد از يک فايل CSS خارجي نيز استفاده کنيد.)

#navigation {
text-align: center;
font-family: tahoma;
font-size: 9pt;
}

#navigation a {
display: block;
padding: 5;
color: #ffffff;
width: 200px;
text-decoration: none;
background-color: #006699;
border: 1px solid #003366;
margin-top: 2;
margin-bottom: 2;
}

#navigation a:hover {
color: #000000;
background-color: #99cc00;
border: 1px solid #003366;
}

همچنين اگر مي خواهيد منو را به صورت افقي (Horizontal) داشته باشيد، مي توانيد خاصيت display: block را حذف کنيد. اين خاصيت سبب مي شود تا المنتهاي <a> به صورت Block-Level و نه Inline ظاهر شوند. بقيه کد هم که تقريبا براي CSSکارها خوانا مي باشد. اما اگر جايي براي شما نامفهوم بود، بهم بگيد تا توضيحش بدم... من اين کد را در سه مرورگر Opera 7, Netscape 7 و IE 6 تست کردم، خوشبختانه هر سه مرورگر به طور کامل از اين کد پشتيباني مي کنند...

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت شانزدهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۸۸ مراجعه امروز
۵۳۰۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت شانزدهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۹/۱۳۸۲ اين مقاله ۱۲۶۰ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

كلاس ها ي abstract
كلاس ها را همچنين مي توان به صورت abstract تعريف كرد. از اين نوع كلاس ها نمي توان instance ايي را ايجاد نمود. در اين كلاس هاي پايه ، صرفا تعريف متدها و خواص هايي عنوان گرديده و در آينده در كلاس هاي فرزند توسعه داده خواهند شد. براي مثال :

public abstract class Named
{
public abstract String Name {get; set;} // property
public abstract void PrintName(); // method
}
public class B : Named
{
private String name = "empty";
public override String Name
{
get{return name;}
set{name=value;}
}
public override void PrintName()
{
Console.WriteLine("Name is {0}", name);
}
}

والي كه شايد پيش بيايد اين است كه اگر interface ها صرفا تعريف توابع و خواص را مي توانند در خود جاي دهند پس چه دليلي براي بكار بردن آنها و طولاني كردن كار كد نويسي وجود دارد؟
كاربردهاي زيادي را مي توان براي اينترفيس ها برشمرد. اينترفيس يك رفتار را تعريف مي كند. فرض كنيد در حال توسعه ي برنامه ايي هستيد كه بر روي دو كامپيوتر مختلف بايد با هم در ارتباط مستقيم بوده و برهم كنش داشته باشند و هر برنامه از ماژولي به نام CCommObj communication object استفاده مي نمايد. يكي از متدهاي اين شيء ، SendData() مي باشد كه رشته اي را دريافت كرده و به برنامه ي ديگر مي فرستد. اين فراخواني از نوع asynchronous است زيرا ما نمي خواهيم اگر خطايي در شبكه رخ داد، برنامه براي هميشه منتظر باقي بماند. اما چگونه برنامه ي A كه تابع ذكر شده را فراخواني كرده است مي تواند تشخيص دهد كه پيغام به مقصد رسيده است يا خير و يا آيا خطايي در شبكه مانع رسيدن پيغام گشته است يا خير؟ جواب بدين صورت است كه CCommObj هنگام دريافت پيغام ، رخدادي را سبب خواهد شد و اگر خطايي رخ داده باشد خير. در اين حالت نياز به يك ماژول logging نيز احساس مي گردد تا خطاهاي رخ داده را ثبت نمايد. يك روش انجام آن اين است كه CCommObj پياده سازي اين امكان را نيز بعهده گرفته و اگر فردا نيز خواستيم ماژول ديگري را به برنامه اضافه كنيم هر روز بايد CCommObj را تغيير دهيم. تمام اين كارها را به سادگي مي توان در يك اينترفيس مدل كرد. روش آن نيز در ادامه بيان مي گردد:
در ابتدا يك اينترفيس ايجاد مي كنيم تا ليست تمام امكانات ممكن را "منتشر" كند:

interface ICommObjEvents
{
void OnDataSent();
void OnError();
}

شي ء CCommObj ما از اين توابع كه بعدا توسعه داده خواهند شد براي با خبر سازي كلاينت ها استفاده مي نمايد. تمام متدها در يك اينترفيس ذاتا پابليك هستند بنابراين نيازي به ذكر صريح اين مطلب نمي باشد و اگر اينكار را انجام دهيد كامپايلر خطاي زير را گوشزد خواهد كرد :

The modifier 'public' is not valid for this item

در ادامه كلاينت CClientApp_A را پياده سازي خواهيم كرد :

class CClientApp_A:ICommObjEvents
{
public void OnDataSent()
{
Console.WriteLine("OnDataSent");
}
public void OnError()
{
Console.WriteLine("OnError");
}
private CCommObj m_Server;
public void Init(CCommObj theSource)
{
m_Server = theSource;
theSource.Advise (this);
string strAdd = ("N450:1");
m_Server.read (strAdd,10);
}
}

در كد فوق كلاس CClientApp_A از ICommObjEvents ارث برده و تمام متدهاي اين اينترفيس را پياده سازي نموده است. هنگامي كه CCommObj تابع OnDataSent را فراخواني مي كند اين كلاينت پيغام را دريافت خواهد كرد. لازم به ذكر است كه كلاس كلاينت ما چون از يك اينترفيس ارث بري مي نمايد پس بايد تمام توابع و خواص كلاس پايه را پياده سازي كند در غير اينصورت هر چند برنامه كامپايل خواهد شد اما هنگامي كه شيء CCommObj هر كدام از توابع اين كلاس را فراخواني كد ، خطاي زمان اجرا رخ خواهد داد.
متد Init كلاس فوق آرگوماني را از نوع CCommObj دريافت نموده و در يك متغير private آنرا ذخيره مي نمايد. همچنين در اين متد ، متد Advise از كلاس CCommObj نيز فراخواني گشته است.

public class CCommObj
{
private int m_nIndex;
public ICommObjEvents [] m_arSinkColl;
public CCommObj()
{
m_arSinkColl = new ICommObjEvents[10];
m_nIndex = 0;
}
public int Advise(ICommObjEvents theSink)
{
m_arSinkColl[m_nIndex] = theSink;
int lCookie = m_nIndex;
m_nIndex++;
return lCookie
}
public void SendData(string strData)
{
foreach ( ICommObjEvents theSink in m_arSinkColl)
if(theSink != null )
theSink.OnDataSent ();
}
}

اين بحث ادامه دارد (لطفا با ما باشيد و جايي نرويد چون تازه بحث شيء گرايي شروع شده است!!) ....

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت هفدهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۹۱ مراجعه امروز
۵۳۰۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت هفدهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۹/۱۳۸۲ اين مقاله ۱۲۵۸ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.

در كلاس CCommObj كه با آن آشنا شديم ، آرايه اي Private از نوع ICommObjEvents به نام m_arSinkColl وجود دارد. اين آرايه تمام اينترفيس هاي sink شده را ذخيره مي كند. واژه ي sink در اينجا به كلاسي گفته مي شود كه دريافت كننده ي رخدادها است. متد Advise تنها sink وارده به آنرا در يك آرايه ذخيره مي كند و سپس انديس آرايه را كه در اينجا cookie ناميده شده است بر مي گرداند. اين كوكي توسط كلاينتي كه ديگر نمي خواهد از آن آيتم هيچونه رخدادي را دريافت كند به سرور فرستاده مي شود و سپس سرور اين آيتم را از ليست خودش حذف خواهد كرد.

نحوه ي فراخواني متد advise توسط كلاينت نيز جالب است.

public void Init(CCommObj theSource)
{
m_Server = theSource;
theSource.Advise (this);
string strAdd = ("Hello");
m_Server.read (strAdd,10);
}

در اينجا تنها يك this بعنوان آرگومان به متد advice فرستاده شده است در حاليكه انتظار مي رفت آرگوماني از نوع ICommObjEvents به تابع فرستاده شود. دليل صحت اين عمل بدين صورت است كه كلاس ClientApp_A از اينترفيس ICommObjEvents ارث برده است و آنرا پياده سازي نموده است.
در ادامه ليست كامل برنامه ي نوشته شده را در حالت Console ملاحظه مي فرماييد.

namespace CSharpCenter
{

using System;

public interface ICommObjEvents
{
void OnDataSent();
void OnError();
}
public class CCommObj
{
private int m_nIndex;
public ICommObjEvents [] m_arSinkColl;
public CCommObj()
{
m_arSinkColl = new ICommObjEvents[10];
m_nIndex = 0;
}

public void Advise(ICommObjEvents theSink)
{

m_arSinkColl[m_nIndex] = theSink;
m_nIndex++;
}
public void SendData(string strData)
{
foreach ( ICommObjEvents theSink in m_arSinkColl)
{
if(theSink != null )
{
theSink.OnDataSent ();
}
}
}
}
class CClientApp_A:ICommObjEvents
{
public void OnDataSent()
{
Console.WriteLine("OnDataSent Client App A");
}
public void OnError()
{
Console.WriteLine("OnError");
}
public void Read()
{
string strAdd = ("Hello");
m_Server.SendData (strAdd);

}
private CCommObj m_Server;
public void Init(CCommObj theSource)
{
m_Server = theSource;
theSource.Advise (this);
}
}
class CClientApp_B:ICommObjEvents
{
public void OnDataSent()
{
Console.WriteLine("OnDataSent Client App B");
}
public void OnError()
{
Console.WriteLine("OnError");
}
private CCommObj m_Server;
public void Init(CCommObj theSource)
{
m_Server = theSource;
theSource.Advise (this);
}
}
class ConsoleApp
{
public static void Main()
{
CClientApp_A theClient = new CClientApp_A ();
CClientApp_B theClient2 = new CClientApp_B ();
CCommObj theComm = new CCommObj ();
theClient.Init (theComm);
theClient2.Init (theComm);
theClient.Read();

}
}

}

در متد Main برنامه ي فوق ، ما دو كلاينت تعريف كرده ايم و يك نمونه از CCommObj را. دو كلاينت instance هاي CCommObj را بعنوان آرگومان دريافت كرده اند. در هنگام فراخواني init توسط هر كلاينت متد advise فراخواني مي گردد. در خاتمه Read مربوط به كلاينت 1 فراخواني شده است كه سبب مي شود تا رخداد OnDataSend شيء CCommObj اجرا شود و به تمام كلاينت ها فرستاده شود.

هدف از اين مثال ارائه ي بعضي از جنبه هاي اينترفيس ها و نحوه ي استفاده از آنها بود. دو مطلب ديگر در مورد اينترفيس ها باقي مانده اند تا به پايان بحث مربوط به آنها برسيم:

چگونه مي توان متوجه شد كه يك شيء واقعا يك اينترفيس را پياده سازي كرده است؟
دو روش براي فهميدن اين موضوع وجود دارد:
- استفاده از كلمه ي كليدي is
- استفاده از كلمه ي كليدي as

اولين مثال زير از كلمه ي كليدي is استفاده مي كند :

CClientApp_C theClient3 = new CClientApp_C ();
if(theClient3 is ICommObjEvents)
Console.WriteLine ("theClient3 implements ICommObjEvents");
else
Console.WriteLine ("theClient3 doesnot implement ICommObjEvents");

كلمه ي كليدي is مقدار true را بر مي گرداند اگر اپراتور سمت چپ ، اينترفيس سمت راست را پياده سازي كرده باشد.

ICommObjEvents theClient5 = theClient3 as ICommObjEvents;
if(theClient5 != null )
Console.WriteLine ("Yes theClient implements interface");

else
Console.WriteLine ("NO,Yes theClient doesn't implements interface");

در مثال فوق اپراتور as در حال casting شيء theClient5 به ICommObjEvents مي باشد. چون CClientApp_C اينترفيس را پياده سازي نمي كند حاصل خط اول نال خواهد بود.

به صورت خلاصه :
يك اينترفيس قراردادي است كه به كلاينت گارانتي مي دهد يك كلاس خاص چگونه رفتار خواهد كرد. هنگاميكه كلاسي يك اينترفيس را پياده سازي مي كند به تمام كلاينت ها مي گويد كه : من تمام موارد ذكر شده در اينترفيس را ارائه و پياده سازي خواهم كرد. نمونه ي عملي استفاده از اينترفيس ها بحث dot net remoting است.

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت هجدهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۹۴ مراجعه امروز
۵۳۱۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت هجدهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۹/۱۳۸۲ اين مقاله ۱۲۸۲ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

مقابله با خطاها در سي شارپ (Exception Handling in C#)

EXCEPTION يك خطاي زمان اجر است كه بدليل شرايطي غيرنرمال در برنامه ايجاد مي شود. در سي شارپ exeption كلاسي است در فضاي نام سيستم. شيء ايي از نوع exception بيانگر شرايطي است كه سبب رخ دادن خطا در كد شده است. سي شارپ از exception ها به صورتي بسيار شبيه به جاوا و سي پلاس پلاس استفاده مي نمايد.

دلايلي كه بايد در برنامه exception handling حتما صورت گيرد به شرح زير است:
- قابل صرفنظر كردن نيستند و اگر كدي اين موضوع را در نظر نگيرد با يك خطاي زمان اجرا خاتمه پيدا خواهد كرد.
- سبب مشخص شدن خطا در يك نقطه از برنامه شده و ما را به اصلاح آن سوق مي دهد.

بوسيله ي عبارات try...catch مي توان مديريت خطاها را انجام داد. كدي كه احتمال دارد خطايي در آن رخ دهد درون try قرار گرفته و سپس بوسيله ي يك يا چند قطعه ي catch مي توان آنرا مديريت كرد. و اگر از اين قطعات خطايابي استفاده نشود برنامه به صورتهاي زير متوقف خواهد شد :

class A {static void Main() {catch {}}}
TEMP.cs(3,5): error CS1003: Syntax error, 'try' expected

class A {static void Main() {finally {}}}
TEMP.cs(3,5): error CS1003: Syntax error, 'try' expected

class A {static void Main() {try {}}}
TEMP.cs(6,3): error CS1524: Expected catch or finally

بهتر است يك مثال ساده را در اين زمينه مرور كنيم:

int a, b = 0 ;
Console.WriteLine( "My program starts " ) ;
try
{
a = 10 / b;
}
catch ( Exception e )
{
Console.WriteLine ( e ) ;
}
Console.WriteLine ( "Remaining program" ) ;
The output of the program is:
My program starts
System.DivideByZeroException: Attempted to divide by zero.
at ConsoleApplication4.Class1.Main(String[] args) in
d:\dont delete\consoleapplication4\class1.cs:line 51
Remaining program

برنامه شروع به اجرا مي كند. سپس وارد بلوك و يا قطعه ي try مي گردد. اگر هيچ خطايي هنگام اجراي دستورات داخل آن رخ ندهد ، برنامه به خط آخر جهش خواهد كرد و كاري به قطعات catch ندارد.
اما در اينجا در اولين try عددي بر صفر تقسيم شده است بنابراين كنترل برنامه به بلوك catch منتقل مي شود و صرفا نوع خطاي رخ داده شده نوشته و نمايش داده مي شود. سپس برنامه به كار عادي خودش ادامه مي دهد.

تعدادي از كلاس هاي exception در سي شارپ كه از كلاس System.Exception ارث برده اند به شرح زير هستند :

• Exception Class - - Cause
• SystemException - A failed run-time check;used as a base class for other.
• AccessException - Failure to access a type member, such as a method or field.
• ArgumentException - An argument to a method was invalid.
• ArgumentNullException - A null argument was passed to a method that doesn't accept it.
• ArgumentOutOfRangeException - Argument value is out of range.
• ArithmeticException - Arithmetic over - or underflow has occurred.
• ArrayTypeMismatchException - Attempt to store the wrong type of object in an array.
• BadImageFormatException - Image is in the wrong format.
• CoreException - Base class for exceptions thrown by the runtime.
• DivideByZeroException - An attempt was made to divide by zero.
• FormatException - The format of an argument is wrong.
• IndexOutOfRangeException - An array index is out of bounds.
• InvalidCastExpression - An attempt was made to cast to an invalid class.
• InvalidOperationException - A method was called at an invalid time.
• MissingMemberException - An invalid version of a DLL was accessed.
• NotFiniteNumberException - A number is not valid.
• NotSupportedException - Indicates sthat a method is not implemented by a class.
• NullReferenceException - Attempt to use an unassigned reference.
• OutOfMemoryException - Not enough memory to continue execution.
• StackOverflowException - A stack has overflown.

در كد فوق صرفا عمومي ترين نوع از اين كلاس ها كه شامل تمامي اين موارد مي شود مورد استفاده قرار گرفت يعني :

catch ( Exception e )

اگر نيازي به خطايابي دقيقتر باشد مي توان از كلاس هاي فوق براي اهداف مورد نظر استفاده نمود.

مثالي ديگر: ( در اين مثال خطايابي دقيق تر با استفاده از كلاس هاي فوق و همچنين مفهوم finally نيز گنجانده شده است )

int a, b = 0 ;
Console.WriteLine( "My program starts" ) ;
try
{
a = 10 / b;
}
catch ( InvalidOperationException e )
{
Console.WriteLine ( e ) ;
}
catch ( DivideByZeroException e)
{
Console.WriteLine ( e ) ;
}
finally
{
Console.WriteLine ( "finally" ) ;
}
Console.WriteLine ( "Remaining program" ) ;
The output here is:
My program starts
System.DivideByZeroException: Attempted to divide by zero.
at ConsoleApplication4.Class1.Main(String[] args) in
d:\dont delete\consoleapplication4\class1.cs:line 51
finally
Remaining program

قسمت موجود در قطعه ي فاينالي همواره صرفنظر از قسمت هاي ديگر اجرا مي شود.

به مثال زير دقت كنيد :

int a, b = 0 ;
Console.WriteLine( "My program starts" )
try
{
a = 10 / b;
}
finally
{
Console.WriteLine ( "finally" ) ;
}
Console.WriteLine ( "Remaining program" ) ;
Here the output is
My program starts
Exception occurred: System.DivideByZeroException:
Attempted to divide by zero.at ConsoleApplication4.Class1.
Main(String[] args) in d:\dont delete\consoleapplication4
\class1.cs:line 51
finally

قسمت چاپ Remaining program اجرا نشده است.

عبارت throw :

اين عبارت سبب ايجاد يك خطا در برنامه مي شود.

مثال :

int a, b = 0 ;
Console.WriteLine( "My program starts" ) ;
try
{
a = 10 / b;
}
catch ( Exception e)
{
throw
}
finally
{
Console.WriteLine ( "finally" ) ;
}

در اين حالت قسمت فاينالي اجرا شده و برنامه بلافاصله خاتمه پيدا مي كند

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت نوزدهم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۹۷ مراجعه امروز
۵۳۱۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت نوزدهم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۹/۱۳۸۲ اين مقاله ۱۲۴۶ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

سربارگذاري عملگر ها (Operator OverLoading)

به تعريف مجدد راه و روش اجراي عملگر ها توسط ما ، سربارگذاري عملگرها گفته مي شود. فرض كنيد مي خواهيد عدد 2 را به يك مقدار datetime اضافه كنيد. خطاي زير حاصل خواهد شد:

CS0019: Operator '+' cannot be applied to operands of type 'System.DateTime' and 'int'

جالب بود اگر مي توانستيم عدد 2 را به datetime اضافه كنيم و نتيجه ي آن تعداد روزهاي مشخص بعلاوه ي دو مي بود. اينگونه توانايي ها را مي توان بوسيله ي operator overloading ايجاد كرد.

تنها عملگر هاي زير را مي توان overload كرد:

Unary Operators
+ - ! ~ ++ -- true false

Binary Operators
+ - * / % & | ^ << >> == != > < >= <=

نحوه ي انجام اينكار نيز در حالت كلي به صورت زير است:

return_datatype operator operator_to_be_overloaded (agruments)
{
}

به مثال زير توجه كنيد:

using System;
class MyDate
{
public DateTime tempDate;
public MyDate(int year,int month,int day)
{
tempDate=new DateTime(year,month,day);
}
public static DateTime operator + (MyDate D,int noOfDays)
{
return D.tempDate.AddDays(noOfDays);
}
public static DateTime operator + (int noOfDays,MyDate D)
{
return D.tempDate.AddDays(noOfDays);
}
}

class Test
{
static void Main()
{
MyDate MD=new MyDate(2001,7,16);
Console.WriteLine(MD + 10 );
}
}

output:
2001-07-26

در مثال فوق عملگر + دوبار overload شده است. يكبار توسط آن مي توان يك عدد صحيح را به يك تاريخ اضافه كرد و بار ديگر يك يك تاريخ را مي توان به عدد صحيح افزود.

موارد زير را هنگام سربارگذاري عملگرها به خاطر داشته باشيد:

1- تنها اپراتورهاي ذكر شده را مي توان overload كرد. اپراتورهايي مانند new,typeof, sizeof و غيره را نمي توان سربارگذاري نمود.
2- خروجي متدهاي بكار گرفته شده در سربارگذاري عملگر ها نمي تواند void باشد.
3- حداقل يكي از آرگومانهاي بكار گرفته شده در متدي كه براي overloading عملگرها بكار مي رود بايد از نوع كلاس حاوي متد باشد.
4- متدهاي مربوطه بايد به صورت public و static تعريف شوند.
5- هنگامي كه اپراتور < را سربارگذاري مي كنيد بايد جفت متناظر آن يعني > را هم سربارگذاري نماييد.
6- هنگاميكه براي مثال + را overload مي كنيد خودبخود =+ نيز overload شده است و نيازي به كدنويسي براي آن نيست.

يكي از موارد جالب بكار گيري سربارگذاري عملگرها در برنامه نويسي سه بعدي و ساختن كلاسي براي انجام عمليات ماتريسي و برداري مي باشد

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقدمه اي بر سي شارپ : قسمت بيستم ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۰۰ مراجعه امروز
۵۳۱۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقدمه اي بر سي شارپ : قسمت بيستم
نويسنده : وحيد نصيري
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۱/۹/۱۳۸۲ اين مقاله ۱۳۵۹ بار مطالعه شده است
۶ نفر تا به حال به اين مقاله رای داده اند.

Delegates

Delegates در سي شارپ روشي مطمئن و typesafe را براي بكار گيري مفهوم function pointer ارائه مي دهند. يكي از ابتدايي ترين استفاده هاي function pointers پياده سازي callback مي باشد. اما در ابتدا لازم است تا با اصول اوليه ي كاري آن آشنا شويم.

مثال يك :
يك delegate چگونه تعريف و استفاده مي شود؟
Delegate يك شيء است كه بيانگر يك تابع مي باشد بنابراين مي تواند بعنوان آرگومان ورودي يك تابع ديگر و يا عضوي از يك كلاس بكار رود.
در زبان "function-pointer" ، Func1() اشاره گري به Func2() را بعنوان پارامتر دريافت كرده و نهايتا آنرا فراخواني مي كند.
در زبان "delegate" ، Func1() يك شيء delegate از Func2() را دريافت كرده و سپس آنرا فراخواني مي كند.
در مثال زير از دو تابع براي شرح اين مطلب سود جسته شده است:
Func1() از delegate استفاده مي كند.
Func2() يك delegate است.

( شماره گذاري خطوط ، در كد زير ، صرفا براي راحت تر شدن توضيحات در مورد آنها است و لزومي به تايپ آنها در برنامه ي اصلي نيست. )

01 using System;
02 delegate void Delg(string sTry);
03 public class Example1{

// function which uses the delegate object
04 private static void Func1(Delg d){
05 d("Passed from Func1");
06 }

// function which is passed as an object
07 private static void Func2(string sToPrint){
08 Console.WriteLine("{0}",sToPrint);
09 }

// Main execution starts here
10 public static void Main(){
11 Delg d = new Delg(Func2);
12 Func1(d);
13 }
14 }

LINE 02
يك شيء delegate را براي Func2 تعريف مي كند.

LINE 04-06
تابعي را تعريف كرده است كه آرگومان ورودي آن از نوع Delg است.

LINE 07-09
تابعي را تعريف مي كند كه بايد به صورت delegate به تابع ديگر فرستاده شود.

LINE 10-14
تابع Main اجراي برنامه را با ايجاد يك شيء delegate براي Func2 آغاز كرده و سپس تابع Func1 را فراخواني مي كند.

مثال 2:
چگونه مي توان از delegates در كارهاي عملي استفاده كرد؟

طرح يك مساله:
شخصي تقاضاي ثبت نام در يك مؤسسه ي آموزشي و همچنين تقاضاي كاريابي در يك شركت را داده است. هر كدام از اين نهادها روشي خاص خود را براي ارزيابي شخص دارند.

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

پياده سازي (با استفاده از سي شارپ):
ما delegate‌ايي را تعريف مي كنيم كه بيانگر اينترفيسي است كه به شركت و آموزشگاه اجازه ي چك كردن شخص را مي دهد.
سه كلاس school و company و person را تعريف مي نماييم.
كلاس test را براي آزمودن اين موارد ايجاد مي كنيم.

01 using System;
02 using System.Collections;

03 public delegate bool GetChecker(Person p);

// Person has his information with him as he
// applies for School and Company
04 public class Person
05 {
06 public string Name;
07 public int Age;
08 public bool Graduate;
09 public int YearsOfExp;
10 public bool Certified;

11 public Person(string name,
int age,
bool graduate,
int yearsOfExp,
bool certified)
12 {
13 Name=name;
14 Age=age;
15 Graduate=graduate;
16 YearsOfExp=yearsOfExp;
17 Certified=certified;
18 }
19 public bool CheckMe(GetChecker checker)
20 {
21 return(checker(this));
22 }
23 }

// A school, the person applied for higher studies
24 public class School
25 {
26 public static bool SchoolCheck(Person p)
27 {
28 return (p.Age>10 && p.Graduate);
29 }
30 }

// A Company, the person wants to work for
31 public class Company
32 {
33 public static bool CompanyCheck(Person p)
34 {
35 return (p.YearsOfExp>5 && p.Certified);
36 }
37 }

// A Test class, displays delegation in action
38 public class Test
39 {
40 public static void Main()
41 {
42 Person p1 = new Person("Jack",20,true,6,false);
43 Console.WriteLine("{0} School Check : {1}",
p1.Name,
p1.CheckMe(new GetChecker(School.SchoolCheck)));
44 Console.WriteLine("{0} Company Check : {1}",
p1.Name,
p1.CheckMe(new GetChecker(Company.CompanyCheck)));
45 }
46 }

LINE 03
Delegate مورد نياز را تعريف مي كند.

LINE 04-23
كلاس person را تعريف مي كند. اين كلاس تابعي پابليك را ارائه مي دهد كه آرگومان ورودي آن از نوع GetChecker مي باشد.

LINE 24-30
كلاس school را تعريف مي كند و سپس تابعي را كه delegate است ارائه مي دهد.

LINE 31-37
كلاس company را تعريف مي كند و سپس تابعي را كه delegate است ارائه مي دهد.

LINE 38-36
كلاس test را پياده سازي مي نمايد. سپس يك شيء شخص ساخته مي شود. در ادامه new GetChecker(School.SchoolCheck) و new GetChecker(Company.CompanyCheck) شيء ايي را ايجاد مي كند از نوع delegate مورد نياز و آنرا به تابع CheckMe مي فرستد. خروجي نتيجه ي ارزيابي اين شخص مي باشد.

اگر چك كردن اشخاص بيشتري نياز باشد به اين صورت عمل مي شود:

Person p1 = new Person("Jack",20,true,6,false);
Person p2 = new Person("Daniel",25,true,10,true);
GetChecker checker1= new GetChecker(School.SchoolCheck);
GetChecker checker2= new GetChecker(School.CompanyCheck);

Console.WriteLine("{0} School Check : {1}",
p1.Name,p1.CheckMe(checker1));
Console.WriteLine("{0} Company Check : {1}",
p1.Name,p1.CheckMe(checker2));
Console.WriteLine("{0} School Check : {1}",
p2.Name,p2.CheckMe(checker1));
Console.WriteLine("{0} Company Check : {1}",
p2.Name,p2.CheckMe(checker2));

مثال 3 :
Delegates در تعامل بين دات نت فريم ورك و سي شارپ چه نقشي دارد؟

طرح يك مساله:
نمايش دادن ميزان پيشرفت خواندن يك فايل هنگامي كه حجم فايل بسيار زياد است.

راه حل ( با استفاده از سي شارپ):
در مثال زير از كلاس FileReader براي خواندن يك فايل حجيم استفاده شده است. هنگاميكه برنامه مشغول خواندن فايل است 'Still reading.. را نمايش مي دهد و در پايان 'Finished reading..'. را عرضه مي كند.
براي اينكار از فضاي نام System.IO استفاده شده است. اين فضاي نام حاوي delegate ايي مهيا شده براي ما مي باشد. بدين ترتيب مي توانيم به دات نت فريم ورك بگوييم كه ما تابعي را تعريف كرده ايم كه او مي تواند آنرا فراخواني كند.
سؤال: چه نيازي وجود دارد تا دات نت فريم ورك تابع ما را فراخواني و اجرا كند؟ با استفاده از تابع ما كه دات نت فريم آنرا صدا خواهد زد در طول خواندن فايل به ما گفته مي شود كه بله! من هنوز مشغول خواندن هستم! به اين عمليات Callback نيز گفته مي شود. به اينكار پردازش asynchronous نيز مي گويند!

01 using System;
02 using System.IO;

03 public class FileReader{
04 private Stream sInput;
05 private byte[] arrByte;
06 private AsyncCallback callbackOnFinish;

07 public FileReader(){
08 arrByte=new byte[256];
09 callbackOnFinish = new AsyncCallback(this.readFinished);
10 }

11 public void readFinished(IAsyncResult result){

12 if(sInput.EndRead(result)>0){
13 sInput.BeginRead(arrByte,
0,
arrByte.Length,
callbackOnFinish,
null);
14 Console.WriteLine("Still reading..");
15 }
16 else Console.WriteLine("Finished reading..");
17 }

18 public void readFile(){
19 sInput = File.OpenRead(@"C:\big.dat");
20 sInput.BeginRead(arrByte,
0,
arrByte.Length,
callbackOnFinish,
null);
21 for(long i=0;i<=1000000000;i++){
// just to introduce some delay
22 }
23 }

24 public static void Main(){
25 FileReader asynctest=new FileReader();
26 asynctest.readFile();
27 }
28 }

LINE 02
فضاي نام System.IO را به برنامه ملحق مي كند. اين فضاي نام به صورت خودكار حاوي تعريف delegate زير مي باشد:

public delegate void AsyncCallback (IAsyncResult ar);

LINE 03-10
تعريف كلاس

LINE 06
شيء delegate را تعريف مي كند.

LINE 07-10
سازنده ي كلاس را پياده سازي مي كنند. در اينجا ما تصميم گرفته ايم كه بافري حاوي 256 بايت را در هر لحظه بخوانيم.

LINE 09
شيء delegate نمونه سازي شده است.

LINE 18-23
readFile را پياده سازي مي كند.

LINE 12-16
نحوه ي استفاده از شيء IAsyncResult را بيان مي كند.

LINE 12
sInput.EndRead(result) تعداد بايتهاي خوانده شده را بر مي گرداند. اين خواندن تاجايي كه تعداد بايتهاي خوانده شده صفر است ادامه پيدا مي كند و در اينجا 'Finished reading..' اعلام مي گردد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


امکانات شبکه اي ويندوز ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۱۷ مراجعه امروز
۴۸۳۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
امکانات شبکه اي ويندوز
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۱۰/۱۳۸۲ اين مقاله ۷۰۶ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.

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

ارتباطات
از اهداف اوليه يک سيستم عامل ؛ ارائه سرويس هاي ارتباطي لازم براي برنامه هائي است که بر روي سيستم عامل اجراء مي گردند . ويندوز 2000 و ويندوز دات نت ، برنامه هائي را بهمراه API ارائه نموده که امکانات لازم در خصوص نيل به اهداف فوق را فراهم مي نمايد. بعبارت ديگر ، برنامه ها مي بايست قادر به درخواست عمليات ارسال و دريافت داده با ساده ترين حالت ممکن،از سيستم عامل باشند. سيستم عامل مي بايست صرفنظر از نوع ارتباط ( شبکه محلي ، شبکه هاي بدون کابل ، ارتباطات مبتني بر خط تلفن ) ، امکانات لازم را در اين خصوص ارائه نمايد.
ويندوز از پروتکل شبکه اي TCP/IP ، بعنوان پروتکل اوليه و ذاتي خود استفاده مي نمايد. ويندوز حمايت لازم در خصوص پروتکل هاي شبکه قديمي تر نظير Microsoft NWLink که با پروتکل شبکه اي IPX/SPX شرکت ناول ، سازگار است را نيز ارائه مي نمايد . مزيت مهم پروتکل TCP/IP ، عدم وابستگي آن نسبت به نوع محيط انتقال است . بدين ترتيب ، امکان استفاده از پروتکل فوق ، در هر نوع شبکه اي وجود خواهد داشت . سرويس دهندگان NET Enterprise . ، بصورت مستمر با پروتکل TCP/IP ، در ارتباط بوده و از آن بعنوان پروتکل اساسي استفاده مي نمايند . با توجه به نقش حياتي پروتکل فوق براي اکثر سرويس دهندگان NET Enterprise . ، طراحي ، پياده سازي و نگهداري شبکه اي که از سرويس دهندگان NET Enterprise . ، استفاده مي نمايد ، مستلزم شناخت مناسبي از نحوه عملکرد پروتکل TCP/IP و نحوه ارتباط برنامه ها با آن است. دراين مقاله قصد نداريم به جزئيات مربوط به پروتکل TCP/IP پرداخته و هدف صرفا" آشنائي با مفاهيم اوليه پروتکل فوق ، بمنظور استفاده در شبکه هاي مبتني بر سيستم عامل ويندوز است .

آدرس دهي TCP/IP
تمامي کامپيوترهاي موجود بر روي يک شبکه مبتني بر TCP/IP ، مي بايست داراي يک آدرس منحصربفرد باشند. ( آدرس فوق ، IP ناميده مي شود) . عملکرد آدرس فوق شباهت زيادي به اختصاص يک شماره تلفن خاص براي کامپيوتر دارد . آدرس ها در زمان درج( واردکردن) و نمايش با فرمت dotted-decimal ارائه مي شوند.( نظير : IP:192.168.10.10 ) . هر گروه از اعداد توسط يک نقطه از هم جدا مي شوند که از آنان با نام octet ، ياد مي گردد . يک آدرس IP ، شامل دو بخش متفاوت اطلاعاتي است : يک شماره مشخصه شبکه ( Network ID Number ) و يک شماره مشخصه منحصربفرد ميزبان ( host ID number ) . شماره مشخصه شبکه ، شباهت زيادي به کد يک ناحيه و يا شهرداشته و توسط تمامي کامپيوترهاي موجود بر روي يک شبکه ، به اشتراک گذاشته مي شود. شماره مشخصه ميزبان ، باقيمانده شماره تلفن است .و بصورت کاملا" انحصاري يک ميزبان خاص در شبکه را مشخص خواهد کرد . بمنظور اطمينان از اين موضوع که تمامي کامپيوترهاي موجود در اينترنت داراي يک آدرس IP منحصربفرد مي باشند ، فرآيند اختصاص آدرس هاي IP ، توسط IANA)Interner Assigned Numbers Authority) مديريت مي گردد . IANA ، آدرس هاي IP را در اختيار مراکز اصلي ISP ، قرار داده و و مراکز فوق، آدرس هاي IP را در اختيار افراد حقوقي و حقيقي قرار خواهند داد. IANA ، سه بلاک از آدرس هاي IP را براي استفاده خصوصي ، رزو نموده است. (امکان استفاده از آدرس هاي فوق ، در اختيار کامپيوترهاي اينترنت قرار نخواهد گرفت) .سازمان ها و موسسات مي توانند از آدرس هاي خصوصي فوق، در شبکه هاي اختصاصي خود استفاده نمايند.
مدل آدرس دهي جديد IP ، با نام IPv6 ، است و قرار است به نياز تصاعدي ( فزاينده ) در رابطه با تعداد آدرس هاي در دسترس و عمومي پاسخگو باشد. سخت افزار ها و نرم افزارها ي موجود در حال حاضر امکانات حمايتي لازم بمنظور استفاده ازIPv6 را دارا نمي باشند و بدين دليل ما همچنان از مدل آدرس دهي قديمي استفاده مي نمائيم . IPv6 ، چندين سال است که مطرح گرديده است ولي عمليات آداپته نمودن آن داراي آهنگي کند است و نبايد انتظار داشته باشيم که مدل آدرس دهي فوق را بزودي در محيط خود شاهد باشيم.
با اينکه کامپيوترهائي که از آدرس خصوصي IP استفاده مي نمايند ، قادر به دستيابي مستقيم به اينترنت نمي باشند ( براي دستيابي به اينترنت ، مي بايست ازيک آدرس عمومي IP استفاده گردد) . از NAT)Network Address Translation) بعنوان پتانسيلي که قادر به ترجمه آدرس هاي عمومي و خصوصي است ، استفاده مي گردد. NAT ، امکان استفاده از آدرس هاي IP خصوصي بمنظور اتصال به اينترنت را براي کاربران يک سازمان، فراهم و باعث کاهش تعداد آدرس هاي IP عمومي مورد نياز بمنظور ارتباط ودستيابي به اينترنت مي گردد . سرويس ( Routing and Remote Access Service(RRAS ويندوز داراي قابليت ها و پتانسيل هاي NAT بهمراه ساير پتانسيل هاي کليدي ديگر است.

روتنيگ و Subnet
براي يک شبکه کامپيوتري وجود تعداد زيادي کامپيوتر در شبکه و عدم توانائي بمنظور سرويس دهي مناسب و سريع به آنان ، نمي تواند بعنوان يک مزيت مطرح گردد. ( دقيقا" مشابه وجود تعداد زيادي اتومبيل در يک بزرگراه ). شبکه هاي کامپيوتري بمنزله منابع ارتباطي مشترکي بوده و حضور تعداد زيادي کامپيوتر بر روي يک شبکه نظير وجود صدها اتوميبل سرگردان در ترافيک يک بزرگراه است . بمنظور پيشگيري از ازدحام( شلوغي ) ، شبکه هاي کامپيوتري به چندين بخش مستقل ديگر و با نام " سگمنت " ( Segment ) ، تقسيم مي گردند. هر سگمنت ، اساسا" خود يک شبکه کامپيوتري با قابليت هاي منحصر بفرد خود است. با توجه به رويکرد فوق ( تقسيم شبکه به چندين سگمنت) ، ما با مسئله اي ديگر مواجه خواهيم شد و آنهم نحوه انتقال اطلاعات بين هر يک از شبکه ها است . اگر شما شبکه هاي کامپيوتري را بعنوان همسايه اي در مجاورت منزل خود در نظر بگيريد، مي توان عرضه اطلاعات بين آنها را نظير توزيع يک نامه دانست در صورتيکه قصد ارسال نامه براي شخصي در همسايگي خود را داشته باشيد ، مي بايست متن مورد نظر خود را نوشته و آن را در صندوق پستي مربوطه ، قرار دهيد . در صورتيکه قصد ارسال نامه براي همسايه ديگري را داشته باشيم ( ساکن در محلي ديگر در کشور) ، به اداره پست مراجعه و نامه را براي وي ارسال مي نمائيم . اداره پست، با فرآيند توزيع ( روت) يک نامه از نقطه اي به نقطه اي ديگربخوبي آشنا بوده و مي تواند نامه را با کارآئي مطلوبي به مقصد مورد نظر برساند. زمانيکه اطلاعات از کامپيوتري در شبکه به کامپيوتري در شبکه ديگر ارسال مي گردند،ما با واقعيتي مهم و با نام " روتينگ " ( Routing ) مواجه خواهيم بود.
روتينگ ، توسط دستگاههاي سخت افزاري خاصي با نام "روتر" ، مديريت و اداره مي گردد . روترها ، چندين شبکه را در زمان يکساني بيکديگر متصل و مسئول انتقال اطلاعات ( داده ) بين شبکه ها مي باشند. عملکرد روترها بر اين واقعيت مسلم استواراست که در فرآيند انتقال اطلاعات توسط TCP/IP ، آدرس IP کامپيوتر مقصد، حضوري کاملا" محسوس و هميشگي دارد. آدرس هاي IP شامل مشخصه شبکه ( Network ID ) و مشخصه ميزبان ( Host ID ) مي باشند. با تامل در يک آدرس IP عمومي نظير IP: 10.1.4.250 ، تشخيص مشخصه شبکه و ميزبان ، امري مشکل بنظر مي آيد. بمنظور مشخص نمودن مشخصه هاي فوق ، کامپيوترها از Subnet mask استفاده مي نمايند. بمنظور شناخت مناسب نسبت به نقش Sunet mask ، لازم است بدين نکته بديهي! اشاره گردد که تمام فعاليـت ها در کامپيوتر با فرمت باينري ، انجام مي شود. بعبارت ديگر، هر چيز در کامپيوتر بصورت مجموعه اي از صفر و يک نمايش داده مي شود . فرص کنيد Subnet mask ، مثال فوق را Subnet: 255.255.0.0 ، در نظر بگيريم . در صورتيکه هر octet درآدرس IP و Subnet mask را به باينري تبديل نمائيم ، نتايج زير را خواهيم داشت :

IP address : 00001010.00000001.00000100.11111010

Subnet mask: 11111111.11111111.00000000.00000000

Subnet mask ، مشخص مي نمايد که کدام بخش از آدرس IP ، نشاندهنده مشخصه شبکه و کدام بخش نشاندهنده مشخصه ميزبان است . دقت داشته باشيد که هرoctet ، شامل هشت رقم باينري است و يا بيت است . هر بيت در Subnet mask که مقدار يک را دارا است ، نشاندهنده بخشي از آدرس IP مشخصه شبکه ، است . هر صفر در Subnet mask مرتبط با يک بيت در آدرس IP ، مربوط به مشخصه ميزبان است . بنابراين ، در مثال فوق، مشخصه شبکه شامل network ID : 10.1.x.x و مشخصه ميزبان host ID : 4.250 ، است . دقت داشته باشيد که Subnet mask ، مي بايست همواره شامل رشته اي از يک ها بوده که بدنبال آن رشته اي از صفرها ، قرار مي گيرد. از لحاظ تئوري اين امر امکان پذير خواهد بود که داراي يک Sunbet mask باشيم که به چيزي مطابق زير ترجمه شده باشد( رشته يک ها و صفرها با اصل اشاره شده مغايرت داشته باشد) . ولي اين نوع subnet در حال حاضر توسط TCP/IP حمايت نمي گردد .

11110111.00111100.11100011.00000000

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

پورت هاي برنامه
زمانيکه يک بسته اطلاعاتي به مقصد مورد نظر مي رسد ، کامپيوترمقصد نيازمند روشي بمنظور تشخيص نوع عملياتي است که مي بايست در رابطه با بسته اطلاعاتي دريافتي انجام شود. انجام چندين عمليات متفاوت بصورت همزمان و نگهداري وضعيت شبکه در يک حالت مطمئن و کارآ ، امري پيچيده بنظر مي آيد. مثلا" فرض کنيد ، با استفاده از برنامه مرورگر، قصد مشاهده يک وب سايت را در پنجره مربوطه داشته باشيد و در همان حالت پنجره اي ديگر فعال و يک سند word ، در آن فعال شده باشد در چنين حالتي بر روي کامپيوتر خود شاهد دو نوع ترافيک خواهيم بود: ترافيک داده هائي که باعث نمايش صفحه وب در مرورگر شده و ترافيک داده هائي که باعث نمايش يک سند word خواهد شد. کامپيوتر شما چگونه از اين موضوع آگاهي پيدا مي نمايد که مرورگر مي بايست اولين بخش داده را دريافت در حاليکه Word مي بايست بخش ديگري را اخذ نمايد؟
پاسخ به سوال فوق ، شماره پورت ( port ) است . پورت ، مشابه يک آدرس IP براي يک برنامه خاص موجود بر روي کامپيوتر است . زمانيکه کامپيوتر شما داده ئي را ارسال مي نمايد ، داده براي يک آدرس IP ارسال مي گرددکه نشاندهنده شبکه و ميزبان مقصد مورد نظر ، بهمراه يک شماره پورت خاص است که برنامه خاصي را بر روي کامپيوتر مقصد ، بعنوان مقصد نهائي اطلاعات مشخص خواهد کرد. مثلا" درخواست هاي مربوط به صفحات وب ، همواره براي پورت 80 ارسال خواهد شد . IANA ، مسئوليت اختصاص شماره پورت به برنامه ها را نيز برعهده داشته و اين اطمينان بوجود خواهد آمد که اکثر برنامه هاي متداول داراي يک شماره پورت منحصر بفرد در اين راستا خواهند بود . زمانيکه يک کامپيوتر مبتني برسيستم عامل ويندوز، داده ئي را دريافت مي نمايد ، شماره پورت آن بررسي تا مشخص گردد که کدام برنامه مي بايست داده را دريافت نمايد.
پورت ها داراي نقشي مهم در رابطه با امنيت مي باشند. تعداد زيادي از شرکت ها ، امکان استفاده عموم از وب سايت و يا سرويس دهنده FTP را بمنظور دريافت فايل ، فراهم مي نمايند. شرکت ها و موسسات تمايلي به فراهم نمودن امکان دستيابي عموم به سرويس دهندگان فايل ، سرويس دهندگان چاپ و ساير منابع موجود درشبکه اختصاصي خود ، را ندارند.هر يک ازعمليات فوق ، از طريق يک شماره پورت خاص انجام شده و مي توان بنوعي آنها را بلاک نمود. پورت ها داراي جايگاهي خاص بمنظور فيلترينگ ترافيک و ايمن سازي شبکه مي باشند. دستگاه هاي شبکه اي که "فايروال " ناميده شده و يا نرم افزارهاي فايروال نظير ISA(Internet Security and Acceleration Server) ، قادر به کنترل ترافيک ورودي به شبکه بر روي شماره پورت هاي خاصي بوده و حتي مي توان ترافيک را بر روي پورت هاي خاصي ، بلاک کرد .
IANA، شماره پورت هاي صفر تا 1024 را تعريف که از آنان با نام پورت هاي " خوش نام " ، ياد مي گردد. ويندوز شامل ليستي از اين پورت ها بوده که در يک فايل متني با نام Services و در آدرس system32\Drivers\ETC ، ذخيره شده اند.

سرويس هاي شبکه
سيستم عامل ويندوز، مجموعه اي از سرويس هاي اساسي شبکه را ارائه که مي توان از آنان در هر نوع شبکه ( بزرگ تا کوچک )، استفاده کرد . اين سرويس ها توسط عناصر انتخابي که بهمراه ويندوز ارائه مي گردند ، قابل استفاده خواهند بود. امکانات فوق، شامل : سرويس Name Resolution ، سرويس پيکربندي IP و سرويس RRAS ، مي باشد. در ادامه به تشريح هر يک از سرويس هاي فوق خواهيم پرداخت .

سرويس Name Resolution
سرويس Name Resolution ، در هر نوع شبکه داراي اهميت و جايگاهي خاص است. کامپيوترها براي آدرس دهي يکديگر علاقه مند به استفاده از آدرس هاي IP مي باشند ولي ما ، با اسامي معني دار بهتر کار مي کنيم ( مثلا" ServerA ) . سرويس name Resolution ، اين امکان را در اختيار کاربران قرار خواهد داد که همچنان از اسامي معني دار براي سرويس دهندگان و ساير منابع شبکه استفاده نمايند. در چنين مواردي مي بايست از امکاناتي بمنظور ترجمه (Resolve ) اسامي به آدرس هاي IP استفاده تا در ادامه زمينه ارتباطات در شبکه فراهم گردد . ويندوز در اين رابطه دو سرويس را ارائه نموده است :
DNS)Domain Name System) و WINS)Windows Internet Naming Service) .

DNS
سرويس DNS ، توسط کامپيوترهائي که بر روي آنان يک سرويس دهنده DNS اجراء شده است ، ارائه مي گردد. سيستم هاي عامل ويندوز تقريبا" با هر نوع سرويس دهنده DNS ، استاندارد سازگار مي باشند . ( مثلا" سرويس دهندگاني که بر روي سيستم عامل يونيکس اجراء مي گردند) . ويندوز داراي نسخه اختصاصي خود در رابطه با سرويس دهنده DNS بوده که مي توان آن را بر روي هر نوع سيستم عامل ويندوز ( 2000 و يا دات نت ) ، نصب نمود.
تفاوت بين DNS و WINS چيست ؟ WINS ، بمنظور ترجمه اسامي کامپيوترها به آدرس هاي IP ، استفاده مي گردد.اسامي استفاده شده ، نوع خاصي از نام هاي مبتني بر ويندوز مي باشند. DNS ، بمراتب متداول تر بوده و از آن بمنظور ترجمه اسامي ميزبان استفاده مي شود . در محيط ويندوز ، تفاوت زيادي بين دو نوع نام ( اسامي خاص مبتني بر ويندوز و اسامي ميزبان ) وجود نداشته و هر دو نوع ، معادل مي باشند. از نسخه ويندوز 2000 به بعد ، تاکيد مضاعف بر استفاده از DNS در دستور کار قرار گرفته و ماکروسافت ، استفاده محدود و کم رنگ WINS در ويندوز را بعنوان يک سياست محوري در ويندوز دنبال مي نمايد.
بمنظور پيکربندي IP هريک از کامپيوترهاي موجود درشبکه ، مي بايست آدرس IP و حداقل يک سرويس دهنده DNS را مشخص کرد. در اين رابطه نمي توان از نام سرويس دهنده DNS در مقابل آدرس IP ، استفاده نمود.(روشي بمنظور ترجمه اسامي به آدرس IP بدون يک سرويس دهنده DNS وجود ندارد). پس از پيکربندي آدرس IP سرويس دهنده DNS ، ويندوز 2000 و نسخه هاي بعد از آن ، قادر به استفاده از سرويس دهنده DNS بمنظورترجمه نام به آدرس IP معادل ، خواهند بود.
سيستم DNS اينترنت ، بصورت سلسله مراتبي است . در بالاترين سطح ، domain هاي سطح بالا و يا TLDs)Top-level Domains) ، قرار دارند. استفاده کنندگان متعددي از سرويس دهندگان DNS مربوط به TLD اينترنت استفاده مي نمايند . اين سرويس دهندگان شامل مرجع کاملي در ارتباط با ساير سرويس دهندگان در ساختار سلسله مراتبي، مي باشند. فرض کنيد که شما قصد ارتباط با http://www.test.com را داشته باشيد و سرويس دهنده DNS سازمان شما ، داراي يک entry براي http://www.test.com نمي باشد . در اين حالت با يک سرويس دهنده DNS تائيد شده ديگر درTLD ، ارتباط برقرار مي گردد.سرويس دهده TLD ، از آدرس سرويس دهنده معتبري که شامل آدرس Test.com ، آگاهي داشته و سرويس دهنده قادر به ارائه يک آدرس براي کامپيوتري با نام http://www ، خواهد بود . فرآيند فوق ، داراي انعطاف و کارآئي بالا در رابطه با يافتن آدرس IP مربوط به domain name ، است .
ويندوز از يک ويژگي خاص DNS با نام Dynamic DNS)DDNS) ، استفاده مي نمايد. زمانيکه يک کامپيوتر مبتني برويندوز 2000 ( و يا نسخه هاي بعد از آن ) فعاليت خود را آغاز مي نمايد ، با سرويس دهنده DNS مربوطه ، مرتبط و نام کامپيوتر و آدرس IP موجود خود را در اختيار آن قرار خواهد داد .سرويس دهنده DNS ، بانک اطلاعاتي خود را بهنگام تا متاثر ازآخرين تغييرات گردد. DDNS ، امکان بهنگام سازي پوياي سرويس دهنده DNS را براي کامپيوترها فراهم مي نمايد. بدين ترتيب ، بانک اطلاعاتي DNS شامل آخرين اطلاعات مرتبط با آدرس هاي IP شده و سرويس دهنده DNS ، قادر به ارائه سرويس خود بصورت پويا و متاثر از آخرين تغييرات انجام شده در شبکه ، خواهد بود .
بمنظور کاهش حجم عمليات مربوط به name resolution در يک محيط عملياتي بزرگ ، مي توان از يک سرويس دهنده ثانويه و يا سرويس دهندگان Caching ، استفاده کرد. سرويس دهنده ثانويه ، داراي بانک اطلاعاتي اختصاصي خود نبوده و از بانک اطلاعاتي DNS موجود بر روي يک سرويس دهنده DNS اوليه ، استفاده مي نمايد. سرويس دهندگان ثانويه ، گزينه اي مناسب براي ارائه خدمات مربوط به name resolution بوده ولي قادر به بهنگام سازي پوياي DNS نخواهند بود. ( برخي از انواع سرويس دهندگان ثانويه قادر به دريافت اطلاعات بهنگام شده و ارسال آنان براي سرويس دهنده اوليه ، مي باشند ) . سرويس دهندگان Caching DNS ، زمانيکه يک درخواست name resolution را دريافت مي نمايند ، با يک سرويس دهده DNS بمنظور اتمام عمليات خود ، ارتباط برقرار خواهد کرد. سرويس دهنده Caching ، درادامه آدرس IP را استفاده و آن را بمنظور پاسخ به درخواستي مشابه ، ذخيره مي نمايد.
نرم افزار سرويس دهنده DNS ويندوز، امکان ذخيره داده هاي DNS را در يک فايل متن و يا در اکتيو دايرکتوري ، فراهم مي نمايد. با انتخاب اکتيو دايرکتوري ، داراي گزينه اي مبني بر نصب DNS بر روي هر domain controller خواهيم بود. در چنين مواردي در صورت بروز اشکال دراکتيو دايرکتوري ، امکان بازيابي سريع اطلاعات وجود خواهد داشت ( مي توان DNS را بر روي يک domain controller ديگر نصب تا زمينه استفاده از اطلاعات DNS موجود در اکتيو دايرکتوري ، فراهم گردد.) .

WINS
سرويس WINS ، داراي عملکردي نسبتا" مشابه DNS با تفاوت هائي اندک است . قبل از ويندوز 2000 ، کامپيوترهاي موجود در شبکه از پروتکلي با نام NetBIOS استفاده مي کردند. در چنين حالتي ، هر کامپيوتر داراي يک نام منحصر بفرد بوده و سرويس دهنده WINS ، مسئول ارائه سرويس name resolution بمنظور ترجمه اسامي NetBIOS ، به آدرس هاي IP معادل است. DNS ، نيز نيازمند يک نام منحصر بفرد است ( صرفا" در يک domain خاص). مثلا" DNS ، امکان تعريف نام Client1 را براي يک کامپيوتر موجود در حوزه Test.com و Microsoft.com ، فراهم مي نمايد.WINS ، از يک سيستم نامگذاري مسطح تبعيت نموده و مي بايست تمامي کامپيوترهاي موجود در شبکه داراي اسامي منحصر بفردي باشند .بدين ترتيب نبايد انتظار داشته باشيم که از سرويس WINS ، در شبکه اينترنت ، استفاده گردد ( در اينترنت از سرويس DNS ، استفاده مي گردد) . استفاده ازسرويس WINS درصورت لزوم فقط براي شبکه هاي محلي خصوصي، پيشنهاد مي گردد.
ويندوز 2000 و نسخه هاي بعد از آن ، همچنان از اسامي NetBIOS بمنظور سازگاري با نسخه هاي قبل از خود استفاده مي نمايند . در ويندوز 2000 و ويندوز دات نت ، سرويس دهنده WINS ، نيز ارائه گرديده تا زمينه حمايت و سازگاري براي سرويس گيرندگان قديمي که همچنان مرتبط با WINS ، مي باشند ، فراهم گردد. ماکروسافت بتدريج استفاده از NetBIOS را حذف و از DNS براي ترجمه نام به آدرس ، در مقابل سرويس WINS استفاده مي نمايد.
يکي از ويژگي هاي منحصربفرد سرويس WINS ، قابليت تکرارپذيري( Replicate ) آن بين سرويس دهندگان متعدد WINS در يک شبکه است .بدين ترتيب ، مي توان از چندين سرويس دهنده WINS بر روي شبکه بهمراه يک بانک اطلاعاتي مشترک بين آنها ، استفاده گردد. سرويس دهنده WINS ، قادر به ارتباط با ساير سرويس دهندگان بمنظور مبادله اطلاعات جديد و آدرس هاي بهنگام شده IP ، خواهد بود.

پيکربندي IP
بر روي يک شبکه کوچک ، پيکربندي آدرس هاي IP ، Subnet mask , default gatway ,DNS و WINS براي هريک از کامپيوترهاي موجود درشبکه کار مشکلي نخواهد بود . در شبکه هاي بزرگ که شامل صدها و يا هزاران کامپيوتر مي باشند ، پيکربندي دستي مصيبتي است بس بزرگ ! و زمان زيادي را بخود اختصاص خواهد داد. پروتکل TCP/IP شامل پروتکلي با نام DHCP)Dynamic Host Configuration Protocol) بوده که مي توان از آن بمنظور درخواست پوياي پيکربندي IP ، از يک سرويس دهنده DHCP ،استفاده نمود. پيکربندي سرويس دهنده DHCP ، مي تواند بگونه اي صورت پذيرد که شامل اطلاعات ضروري مرتبط با پيکربندي IP ، باشد . سرويس دهنده فوق ، وضعيت آدرس هاي IP تخصيص يافته را ثبت تا اين اطمينان بوجود آيد که هرگز از دو آدرس مشابه درشبکه استفاده نخواهد شد. سرويس دهنده DHCP ، همچنين قادر به ارائه آدرس سرويس دهندگان DNS، WINS و gateway پيش فرض مرتبط با سگمنت مربوطه، خواهد بود.

سرويس روتينگ و دستيابي از راه دور ( RRAS)
ويندوز ، شامل سرويس RRAS)Routing and Remote Access Service) است. سرويس فوق ، اين امکان را براي يک سرويس دهنده ويندوز فراهم مي نمايد که بعنوان يک روتر نرم افزاري ، يک سرويس دهنده VPN)Virtual private network) و يک سرويس دهنده Dial-up مطرح گردد. نرم افزار RRAS ، بصورت پيش فرض برروي ويندوز نصب مي گردد ولي بمنظور انجام عمليات خاصي ، پيکربندي نشده است. اکثر مديران شبکه از RRAS بعنوان يک سرويس دهنده VPN استفاده و از آن بمنظور ارتباط دو شبکه موجود در ادارات يک سازمان از طريق اتصال اينترنت استفاده مي نمايند. مديران شبکه مي توانند ، پيکربندي لازم در خصوص استفاده از سرويس RRAS بمنظور دستيابي از طريق تلفن به شبکه را براي پرسنل سازمان خود، فراهم نمايند.

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

سيستم فايل NTFS ، پتانسيل هاي لازم بمنظور اختصاص مجوزهاي دستيابي لازم را براي کاربران و يا گروه ها ، فراهم مي نمايد .

ويندوز، پروتکل IPSec را حمايت مي نمايد . IPSec ، پروتکلي است که امنيت را در سطح پروتکل هاي حمل شبکه ، اعمال مي نمايد . IPSec مي تواند بمنظور رمزنمودن نوع خاصي از ترافيک ، رمزنگاري ترافيک بين کامپيوترهائي خاص و ساير موارد مشابه استفاده گردد. مثلا" اگر سازماني داراي يک سرويس دهنده فايل حاوي اطلاعات محرمانه است ، مي توان IPSec را بر روي سرويس دهنده فوق ، پيکربندي نمود. بدين ترتيب، سرويس دهنده صرفا" ارتباطاتي را از سرويس گيرندگاني مي پذيرد که قادر به حمايـت از يک ارتباط رمز شده ، باشند .

کامپيوترهاي مبتني بر سيستم عامل ويندوز را مي توان بمنظور استفاده از رمزهاي عبور پيچيده و طولاني در ارتباط با account هاي مربوط به کاربران ، پيکربندي کرد. تشخيص و حدس چنين رمزهاي عبوري ، کار مشکلي خواهد بود. با استفاده از ساير سياست هاي امنييتي رمز عبور، مي توان کاربران را ملزم به تغيير رمز عبور در محدوده هاي زماني مشخص ، استفاده از رمز عبور منحصر بفرد و متفاوت با دفعات قبل و قفل نمودن يک account در موارديکه افرادي قصد تشخيص آن را بصورت سعي و خطاء دارند ، نمود.

کامپيوترهاي ويندوز 2000 و بعد از آن ، بصورت ذاتي از پروتکل تائيد Kerberos ، استفاده مي نمايند. بدين ترتيب سرويس دهنده تضمين لازم در خصوص شناسائي و تائيد کاربر را انجام و کاربران نيز اطمينان لازم در خصوص ارتباط با يک سرويس دهنده مطمئن را بدست خواهند آورد.

ويندوز داراي يک API)Appliaction Programming Interface) لازم، بمنظور رمزنگاري داده ها با نام CryptoAPI است . اينترفيس فوق ، تسهيلات لازم در خصوص ايجاد نرم افزارهائي که نيازمند استفاده از روش هاي رمزنگاري بمنظور حفاظت از اطلاعات مي باشند را فراهم مي نمايد.

سيستم فايل NTFS ، امکانات حمايتي لازم در خصوص Encrypted File System)EFS) را ارائه مي نمايد . بدين ترتيب ، کاربران قادر به رمز نمودن فايل ها بوده و در ادامه مي توانند براحتي به فايل هاي رمز شده دستيابي نمايند ( نظير فايل هائي که رمز شده نيستند ) . ساير کاربران قادر به دستيابي به فايل هاي رمز شده نخواهند بود. بمنظور حفاظت از اطلاعات در يک سازمان، EFS ، پتانسيل هاي لازم در خصوص بازيافت داده ها را براي مديران تائيد شده که نيازمند داده هاي رمز شده مي باشند، فراهم مي نمايد.

پيکربندي پيش فرض، سيستم عامل ويندوز نسبتا" غير ايمن است .ظاهرا" هدف ماکروسافت دراين رابطه تسهيل در نصب و مديريت سيستم عامل بوده است . همين موضوع مي تواند منشاء برخي از تهاجمات اطلاعاتي در رابطه با سيستم هائي باشد که پذيراي حکومت سيستم عامل ويندوز شده اند. ماکروسافت در نسخه هاي ويندوز دات نت ، از سياست فوق ، عدول و سعي نموده است امکانات گسترده اي را بمنظور ايمن سازي پيکربندي پيش فرض، ارائه نمايد. بمنظور انتخاب تعداد زيادي از ويژگي هاي Windows .NET Server 2003 ، مي بايست پيکربندي و نصب اضافه اي انجام شود. بسياري از ويژگي هاي اختياري ( نظير IIS ) بصورت پيش فرض غير فعال مي باشند. (يشگيري اوليه در رابطه با حفاظت اطلاعات).

کيفيت مقاله :
عالی خوب متوسط ضعيف


معماري برنامه هاي مبتني بر داده ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۴۶ مراجعه امروز
۴۹۶۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
معماري برنامه هاي مبتني بر داده
نويسنده : شرکت سخا روش
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۱۰/۱۳۸۲ اين مقاله ۴۳۴ بار مطالعه شده است
۴ نفر تا به حال به اين مقاله رای داده اند.

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

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

غير ساختيافته . در اين روش، داده ها داراي هيچگونه ساختاري نمي باشند ( نظير Memo هاي ساده )

ساختيافته - غير رابطه اي . داده ها بصورت واحدهاي مجزاء قرار مي گيرند. سازماندهي واحدها عموما" با توجه به اولويت استقرار آنها تعيين مي گردد . فايل هاي CSV)Comma Separated value) و يا فايل هائي که محتويات آنان توسط Tab از يکديگر جدا مي شوند، فايل هاي صفحات گسترده نظير Excel ، فايل هاي سرويس دهنده Exchange ، فايل هاي Active Directory ، فايل هاي ISAM(Indexd sequential access method )، نمونه هائي در اين زمينه مي باشند .

سلسله مراتبي . در اين روش، داده ها بصورت يک ساختار درختي سازماندهي مي گردند. هر درخت داراي مجموعه اي از گره بوده که هر گره خود مي تواند شامل چندين گره ديگر باشد .سندهاي داده XML ، نمونه اي از اين مورد است .

بانک هاي اطلاعاتي رابطه اي . در روش فوق، داده ها در جداولي سازماندهي مي گردند . ستون ها در جدول شامل يک نوع خاص داده بوده و سطرها شامل رکورد خاصي از اطلاعات مي باشند . جداول مي توانند از طريق ستون هاي خاصي بيکديگر مرتبط تا امکان استفاده از داده هاي مشترک ( يکسان ) بين آنها فراهم گردد. سرويس دهنده SQL ، بانک اطلاعاتي Access و بانک اطلاعاتي Oracle نمونه هائي در اين زمينه مي باشد .

بانک اطلاعاتي شي گراء . در اين روش، داده ها بصورت مجموعه اي از اشياء سازماندهي مي شوند . نظير Objectivity/DB

محيط هاي متصل (Connected)
در گذشته بمنظور دستيابي به داده ها همواره از يک محيط متصل ، استفاده مي گرديد . يک محيط متصل، محيطي است که کاربر و يا برنامه مورد نظر، مي بايست بصورت پيوسته به يک منبع داده متصل باشند . روش فوق داراي مزاياي زير است :

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

مي بايست يک اتصال پيوسته با شبکه وجود داشته باشد .
توسعه سيستم، داراي چالش هاي خاص خود است .
مثال :

کارخانه اي که نيازمند يک اتصال دائم و هميشگي با سرويس دهنده مربوطه بمنظور مديريت و آگاهي از آخرين وضعيت محصولات ورودي و خروجي به انبار مربوطه است.
يک بنگاه تجاري که نيازمند يک اتصال دائم بمنظور آگاهي از آخرين وضعيت اطلاعاتي در رابطه با تعداد و قيمت سهام است .
محيط هاي غيرمتصل (Disconnected )
همزمان با پيدايش اينترنت، سناريوي عمليات غير متصل به امري عادي تبديل شده است . بموازات افزايش استفاده از دستگاههاي handheld ، رويکرد فوق ، بسيار متداول و مورد توجه قرار گرفته است .Laptop ,Notebook و ساير کامپيوترهاي قابل حمل، اين امکان را بدست آورده اند که از برنامه ها حتي در موارديکه ارتباطي با سرويس دهنده و يا بانک اطلاعاتي وجود ندارد ، بتوان استفاده نمود. در اغلب حالات، افراد بصورت کامل در يک محيط متصل و يا غير متصل کار نمي کنند، بلکه محيط استفاده شده تلفيقي از دو رويکرد فوق است . يک محيط غير متصل ،محيطي است که بر اساس آن کاربر و يا يک برنامه بصورت پيوسته به يک منبع داده مرتبط و متصل نخواهد بود. کاربران موبايل که با Laptop کار مي کنند، اولين کاربران در محيط هاي غير متصل مي باشند . کاربران مي توانند زير مجموعه اي از داده ها را دريافت و در يک کامپيوتر غير متصل مستقر و پس از اعمال تغييرات لازم مجددا" آنان را به محل مرکزي ذخيره سازي داده ها ، ارسال نمايند .

مزايا :

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

داده ها همواره بهنگام نخواهند بود .
تغييرات اعمال شده مي تواند باعث بروز تناقص اطلاعاتي شده و مي بايست اقدامات لازم در اين خصوص ، پيش بيني گردد .
مثال :

در يک سيستم مالياتي ، ضرائب مالياتي ممکن است طي يک سال و يا حتي چندين سا ل يک مرتبه تغيير نمايند ، بنابراين اصلاح جداول در بانک اطلاعاتي مربوطه ، مي تواند بصورت غيرمتصل و در زمان مورد نياز انجام پذيرد.

مدل هاي متفاوت برنامه ها براي دستيابي به داده ها
مدل هاي دستيابي به داده ، همزمان با تکامل تدريجي کامپيوتر نيز متحول و دگرگون شده است ( از بشدت محلي بودن تا بشدت توزيع شده ) . همزمان با افزايش کاربران و حجم اطلاعات ، مدل دستيابي به داده از يک کاربر در رابطه با يک برنامه به چندين کاربر از طريق اينترنت، گسترش پيدا کرده است . آخرين تحول در اين راستا به مدل مبتني بر سرويس هاي وب XML ، بر مي گردد .
تعريف Tire : در يک مدل دستيابي به داده ، Tire ( رديف - طبقه ) ، يک سطح منطقي و يا لايه اي است که عناصر منطقي مربوط به يک برنامه بر روي آن مستقر مي گردند( نه يک tire فيزيکي). . طبقات ( لايه ها ) ، مي تواند بر روي يک و يا چندين کامپيوتر و يا حتي Tire فيزيکي، مستقر گردند . تعداد Tire ها به تعداد سطوح بر مي گردد( نه تعداد کامپيوترهاي فيزيکي که سرويس ها را تقسيم نموده اند) . اين سطوح عموما" داراي موارد زير است :

Client-tire . لايه فوق ، با نام Presentation و يا User Service نيز ناميده شده و شامل بخش رابط کاربر است .

Bussiness Logic Tire . شامل منطقي است که با منابع داده مرتبط مي گردد . اين Tire مياني (Middle) ، شامل بخشي از برنامه است که با داده ها مرتبط مي گردد ( مثلا" ايجاد يک ارتباط با منبع داده). لايه فوق، اغلب بصورت فيزيکي و در تمام لايه ها پياده سازي مي گردد . مثلا" بعنوان يک Stored Procedure در کنار منبع داده، يک کلاس همراه يک سرويس دهنده برنامه و يا حتي کدهاي همراه برنامه سرويس گيرنده .

Data Service Tire . لايه فوق ، شامل داده هائي است که Bussiness Logic از آنان در برنامه ها استفاده مي نمايد .

Interoperability . شامل منطقي است که امکان ارتباط بين برنامه هاي متعدد بر روي سيستم هاي عامل متفاوت و يا انواع متفاوت داده ها را فراهم مي نمايد. مثلا" سرويس هاي وب XML مي توانند توسط هر نوع سيستم عامل، ميزبان و استفاده گردند .

مزاياي Tires
مهمترين مزيت افزودن Tire ، قابليت گسترش و توسعه يک برنامه است . هر Tire اضافه، امکان افزودن کاربران بيشتر و ايزوله نمودن يک سطح از منطق برنامه را فراهم مي نمايد . ايزوله نمودن منطق، اين امکان را فراهم مي نمايد که تغييرات لازم در يک برنامه بدون نياز به اعمال تغييرات در ساير Tier ها ، صورت پذيرد. مثلا" در يک برنامه One-tire ، اعمال تغيير در هر سطح از منطق برنامه، مستلزم ترجمه مجدد برنامه و توزيع آن خواهد بود .

تکامل مدل هاي دستيابي
مدل هاي متفاوت دستيابي به داده به مرور زمان دچار تحول شده است .

One -Tire . مدل فوق، عموما" شامل يک کاربر بوده و تمامي سه لايه در يک کامپيوتر مستقر ( لايه بندي ) مي شوند . مثلا" يک بانک اطلاعاتي شامل يک کاربر
مزايا : چون هر چيز در يک محل قرار مي گيرد تمام عناصر بسادگي قابل دستيابي خواهند بود.
معايب : بهنگام سازي برنامه ها مستلزم کدهاي اوليه برنامه بوده و پس از اعمال تغييرات و ترجمه مجدد ، مي بايست برنامه براي هر يک از کاربران ارسال مجدد گردد. در اين مدل قابليت واقعي براي گسترش وجود ندارد .

Two-Tire . لايه User و Business Logic در يک Tire قرار گرفته و Data Service در لايه دوم قرار خواهد گرفت . مدل فوق، عموما" شامل دو و يا بيش از دو کامپيوتر است . مثلا" يک بانک اطلاعاتي که Businesses Logic بين دو Tire تقسيم مي گردد . بخشي از منطق در برنامه سرويس گيرنده و بخشي ديگر بعنوان Stored procedure در Data Tire ذخيره مي گردد.
مزايا : برخي از جداسازي ها را ارائه مي نمايد .
معايب : توسعه مشکل خواهد بود، چراکه سرويس گيرندگان بصورت يک Fat Client مطرح و شامل لايه هاي Presentation و Business Logic مي باشند. توزيع و پشتباني نرم افزار يکي ديگر از مشکلات موجود در اين مدل است .

Three-Tire . هر سرويس در يک لايه مجزا قرار مي گيرد. Bussiness Logic در يک Middle Tire جديد مستقر مي گردد.
مزايا : نوع مطلوبي از جدا سازي را ايجاد نموده و حجم سرويس گيرنده نازک( لاغر!) مي شود . در اين مدل سرويس گيرنده بصورت thin client بوده که صرفا" شامل منطق و يا لايه Presentation است.
معايب : مديريت آن بمراتب پيچيده تر بوده و از لحاظ امنيتي انعطاف و توسعه پذيري مدل N - Tier را ندارد .

N - Tire . يک بانک اطلاعاتي گسترده که داراي سرويس گيرندگان متعدد از طريق يک سرويس دهنده برنامه مي باشد . Tier هاي جديد مي تواند با توجه به ضرورت هاي منطقي مورد نياز، اضافه گردد .
مزايا : امکان اجراي برنامه هاي متعدد بر روي سيستم هاي عامل گوناگون بمنظور ارتباط با کاربر و داده فراهم مي گردد .
معايب : مسايل مربوط به امنيت داراي چالش هاي خاص خود است . RPC)Remote Procedure Call) نمي تواند از طريق فايروال ها ،عبور داده شوند .

N-Tire with web Interface . سرويس ها بين اينترنت و اينترانت از طريق Tier اضافه سرويس دهندگان اختصاصي اضافه در شبکه، توزيع مي گردد .
مزايا : هزينه بکارگيري نرم افزار بر روي سرويس گيرنده بسمت صفر ميل مي کند . بهنگام سازي صرفا" بر روي سرويس دهندگان WEB و Application انجام خواهد شد . پروتکل HTTP امکان عبور از طريق فايروال را خواهند داشت .
معايب : داراي چالش هاي امنيتي خاص خود است .

در پايان لازم است به اين نکته اشاره گردد که با افزايش Tier ها ، از يکطرف امکان گسترش برنامه بيشتر شده و از طرف ديگر، پيچيدگي مدل دستيابي به داده ها ، افزايش مي يابد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


ارتباط به منابع داده در ADO.NET ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۴۱۰ مراجعه امروز
۵۲۲۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ارتباط به منابع داده در ADO.NET ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : ADO [image] نسخه قابل چاپ
تاريخ نشر : ۱۰/۱۰/۱۳۸۲ اين مقاله ۱۹۲۵ بار مطالعه شده است
۲۱ نفر تا به حال به اين مقاله رای داده اند.

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

NET Data Provider . چيست؟
NET Data Provider .، يک Component کليدي ارائه شده بهمراه معماري ADO.NET بوده که امکان ارتباط بين يک منبع داده و يک Component ، يک سرويس وب XML و يا يک برنامه را فراهم مي نمايد. يک NET Data Provider .، امکان اتصال به منبع داده ، بازيابي داده ها ، انجام عمليات بر روي داده ها و بهنگام سازي منبع داده را فراهم مي نمايد. بهمراه فريمورک دات نت ، Provider هاي زير ارائه شده است :

SQL Server .NET Data Provider

OLE DB .NET Data Provider

در آينده براي ساير منابع داده ، NET Data Provider . مربوطه ايجاد و در دسترس عموم برنامه نويسان قرار خواهد گرفت. هر Provider ، مسئوليت پياده سازي کلاس هاي عمومي ADO.NET را برعهده خواهد داشت . دستاورد رويکرد فوق ، ارتباط با منابع داده متفاوت با استفاده از يک روش يکسان از طريق محيط هاي برنامه نويسي خواهد بود .

کلاس هاي NET Data Provider .
ADO.NET ، از NET Data Provider . ، بمنظور ارتباط به منبع داده ، بازيابي ، عمليات برروي داده ها و بهنگام سازي منبع داده استفاده مي نمايد . هر Provider ، بگونه اي طراحي مي گردد که داراي حجم اندکي بوده و يک لايه حداقل بين کد هاي نوشته شده و منبع داده را ايجاد نمايند . ( افزايش کارائي بدون قرباني نمودن پتانسيل ها !)

فريمورک دات نت ، داراي دو Data Provider است :

SQL Server .NET . امکان دستيابي بهينه به SQL Server 2000 و بانک هاي اطلاعاتي SQL Server 7.0 را فراهم مي نمايد. بدين منظور مي بايست از namespace با نام System.Data.Sqlclient بهمراه برنامه ها، استفاده گردد . Provider فوق، نسبت به OLE DB .NET Data Provider ، داراي کارآئي بمراتب بيشتري است (براي ارتباط با منبع داده از لايه هاي اضافه ديگر نظير: OLE DB و يا ODBC استفاده نمي گردد ).

OLE DB .NET . امکان دستيابي به SQL Server 6.5 و يا نسخه هاي قبل از آن ، بانک هاي اطلاعاتي نظير اوراکل ، Sybase ، DB2/400 و اکسس ماکروسافت را فراهم مي نمايد . بمنظور استفاده از Provider فوق ، مي بايست از namespace با نام System.Data.OleDb بهمراه برنامه ها ، استفاده گردد .

علاوه بر موارد فوق ، ماکروسافت در صدد ارائه يک ODBC .NET Data Provider براي دستيابي به ساير منابع داده است .
ADO.NET ، از يک مدل شي گراء در رابطه با NET Data Providers . استفاده مي نمايد . در SQL Server .NET Data Provider ، اسامي کلاس ها با پيشوند Sql آغاز مي گردد . مثلا" کلاس Connection ، SqlConnection ناميده مي شود. در OLE DB .NET Data Provider ، اسامي کلاس ها با پيشوند OleDb ، آغاز مي گردد . مثلا" کلاس Connection داراي نام OleDbConnection ، مي باشد. چهار کلاس اساسي زير، سهم عمده اي در شکل دهي يک NET Data Provider . را برعهده دارند .

XxxConnection . کلاس فوق ، بمنظور ايجاد يک Connection به يک منبع داده خاص استفاده مي گردد . مثلا" کلاس SqlConnection ، باعث اتصال به منابع داده SQL Server ، مي گردد .

XxxCommand . کلاس فوق ، بمنظور اجراي يک دستور از طريق يک منبع داده ، استفاده مي گردد . مثلا" کلاس SqlCommand ، امکان اجراي Stored Procedure و عبارات SQL در رابطه با يک منبع داده SQL Server ، را فراهم مي نمايد .

XxxDataReader . از کلاس فوق ، بمنظور خواندن اطلاعات از يک منبع داده بصورت فقط خواندني و Forward-only ، استفاده مي گردد . مثلا" کلاس SqlDataReader ، امکان خواندن سطرهائي از جداول در رابطه با يک منبع داده SQL Server را فراهم مي نمايد . کلاس فوق، بعنوان خروجي متد ExecuteReader از کلاس XxxCommand ، برگردانده مي شود. ( اغلب بعنوان ماحصل اجراي يک عبارت SELECT SQL )

XxxDataAdapter . کلاس فوق ، از اشياء XxxCommand استفاده تا يک DataSet را حاوي داده هاي مورد نظر نمايد. در اين راستا ، امکان بهنگام سازي اطلاعات نيز فراهم مي گردد . مثلا" کلاس SqlDataAdapter ، امکان مديريت ارتباط بين يک Dataset و داده هاي ذيربط در يک منبع داده SQL Server را فراهم مي نمايد.

نحوه انتخاب يک Data Provider
انتخاب يک NET Data Provider . مناسب براي يک برنامه، بستگي به نوع منبع داده ئي دارد که قصد ارتباط با آن وجود دارد.

نحوه مراجعه به يک NET Data Provider .
با استفاده از Solution Explorer در ويژوال استوديو دات نت ، مي توان مديريت مراجعات به اسمبلي هائي که مسئوليت NET Data Provider . را بر عهده دارند ، انجام داد . اسمبلي System.Data.dll ( بصورت فيزيکي يک فايل DLL است ) مسئوليت پياده سازي SQL Server .NET Data Provider و OLE DB .NET Data Provider را از طريق Namespace هاي System.Data.SqlClient و System.Data.OleDb ، بر عهده داشته و اسمبلي System.Data.Odbc.dll چنين رسالتي را در رابطه با ODBC .NET Data Provider ، انجام خواهد داد . اسمبلي فوق ، در زمان نصب ويژوال استوديو دات نت ، نصب نخواهد شد . براي دريافت اسمبلي فوق ، مي توان از طريق آدرس : http://msdn.microsoft.com/download ، اقدام و پس از کليک نمودن بر روي NET Framework .، گزينه ODBC .NET Data Provider را انتخاب کرد . بدين ترتيب، زمينه دريافت فايل فوق فراهم مي گردد . پس از دريافت اسمبلي فوق ، مي توان بصورت دستي (Manaually) در يک پروژه به آن مراجعه و از ODBC .NET Data Provider فوق ، استفاده کرد .

SQL Server .NET Data Provider
Provider فوق ، لايه اي نازک بين يک برنامه و SQL Server ايجاد مي نمايد. با توجه به اينکه اين Provider ، از پروتکل اختصاصي خود ( TDS: Tabular Data Stream ) بمنظور ارتباط با يک سرويس دهنده SQL استفاده مي نمايد ، حجم آن اندک و دستيابي به سرويس دهنده SQL مستقيما" و بدون استفاده از لايه هاي اضافه ديگر ، انجام مي گيرد . بدين ترتيب کارائي و قابليت توسعه سيستم ، بهبود پيدا خواهد کرد .

OLE DB .NET Data Provider
Provider فوق ، بمنظور اتصال به يک منبع داده از OLE DB و COM بصورت ذاتي استفاده مي نمايد . بنابراين مي بايست از يک OLE DB Provider استفاده گردد که خود از OLE DB .NET Data Provider استفاده مي نمايد . بمنظور استفاده از OLE DB .NET Data Provider ، مي بايست نوع Provider بصورت يک رشته ، مشخص گردد . واژه Provider در رشته فوق بيانگر نوع OLE DB منبع داده ئي است که به آن متصل مي گرديم .
مثلا" "Provider = MSDAORA" ، شما را به يک بانک اطلاعاتي اوراکل متصل مي نمايد . در زمانيکه از SQL Server .NET Data Provider ، استفاده مي شود ، نيازي به استفاده از واژه Provider نخواهد بود ( فرض مي شود که SQL Server 7.0 و يا قبل از آن باشد) . جدول زير نمونه هائي در اين زمينه را نشان مي دهد :

مثال
منبع داده

Provider = SQLOLEDB;Data Source = Tehran ;Initial
Catalog = pubs;User ID = sa ; Password = 999; SQL Server 6.5

Provider = MSDAORA ; Data Source = ORACLE817 ; User
ID = OLEDB ; Password = OLEDB ; Oracle server

Provider = Microsoft.Jet.OLEDB.4.0;
Data Source = C:\Mydb\Firstdb.mdb ;
Microsoft Access database

ODBC .NET Data Provider
Provider فوق ، بمنظور اتصال به يک منبع داده از توابع API مربوط به ODBC بصورت ذاتي استفاده مي نمايد. اين Provider ، بصورت يک اسمبلي مجزاء و با نام System.Data.Odbc.dll ، پياده سازي شده و بصورت پيش فرض در تمپليت هاي پروژه در ويژوال استوديو دات نت ، انتخاب نشده و مي بايست بصورت دستي به آن مراجعه گردد .

مثال
Provider/Driver
منبع داده

Driver ={Microsoft ODBC for Oracle };
Server = ORACLE817;UID=OLEDB;
PWD = OLEDB; ORA ODBC Oracle Server

Driver = {Microsoft Access Driver (*.mdb)};
DBQ = C:\Mydb\Firstdb.mdb ; Jet ODBC Microsoft Access database

خلاصه
براي انتخاب يک NET Data Provider . ، موارد زير پيشنهاد مي گردد :

اگر منبع داده از نوع SQL Server 7.0 و يا SQL Sever 2000 مي باشد ، SQL Server .NET Data Provider انتخاب گردد .
اگر منبع داده از نوع SQL Server 6.5 و قبل از آن باشد ، OLE DB .NET Data Provider انتخاب گردد .
اگر منبع داده شامل هر نوع منبع داده نامتجانس باشد که امکان دستيابي به آن از طريق OLE DB Provider ، وجود داشته باشد ،
از OLE DB .NET Data Provider استفاده گردد .

اگر منبع داده شامل هر نوع منبع داده نامتجانس باشد که امکان دستيابي به آن از طريق ODBC driver ، وجود داشته باشد ،
از ODBC .NET Data Provider استفاده گردد .

در بخش دوم اين مقاله به بررسي نحوه تعريف يک Connection خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


امنيت برنامه هاي وب ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۲۰ مراجعه امروز
۴۸۳۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
امنيت برنامه هاي وب ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۱۰/۱۳۸۲ اين مقاله ۶۰۲ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

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

Windows Authentication

Forms Authentication

Passport Authentication

در مجموعه مقالاتي که ارائه خواهد شد به بررسي هر يک از روش هاي فوق در جهت پياده سازي امنيت در برنامه هاي وب خواهيم پرداخت . در بخش اول اين مقاله ، به بررسي نحوه برخورد ASP.NET با کاربران ناشناس ( Anonymous ) ، روش هاي متفاوت شناسائي کاربران و پارامترهاي لازم در خصوص انتخاب يک استراتژي به منظور شناسائي کاربران با توجه به نوع برنامه ها ، خواهيم پرداخت .

شناسائي و تائيد کاربران
Authentication ، فرآيندي است که بر اساس آن کاربران شناسائي مي گردند . Authorization ، فرآيند اعطاي دستيابي به کاربران با توجه به هويت آنان مي باشد . با تلفيق Authentication و Authorization، امکان ايمن سازي برنامه هاي وب در مقابل افراد مزاحم و غير مجاز ، فراهم مي گردد .

دستيابي از طريق کاربران ناشناس ( Anonymous )
اغلب سايت هاي وب از روش دستيابي "Anonymous" ، استفاده مي نمايند . در چنين مواردي ، اطلاعات موجود بر روي سايت جنبه عمومي داشته و امکان دستيابي تمامي کاربران به اطلاعات وجود خواهد داشت . اين نوع سايت ها ، ضرورتي به بررسي مجاز بودن کاربران براي استفاده از منابع موجود ، نخواهند داشت . برنامه هاي وب ASP.NET ، امکان دستيابي Anonymous را به منابع موجود بر روي سرويس دهنده توسط Impersonation ارائه مي نمايند . Impersonation ، فرآيند نسبت دهي يک Account به يک کاربر ناشناس است . Account دستيابي Anonymous بصورت پيش فرض ، IUSER_computername ، مي باشد. با استفاده از Account فوق ، امکان کنترل کاربران ناشناس که به منابع موجود بر سرويس دهنده دستيابي دارند ، وجود خواهد داشت . به منظور مشاهده و تغيير مجوزهاي دستيابي در نظر گرفته شده براي Account فوق از برنامه Computer Management استفاده مي گردد :

ورود به شبکه ( Logon ) به عنوان مديريت شبکه

اجراي Computer Management ( از طريق : Start | Programs | Administrator Tools )

انتخاب فولدر Users به منظور نمايش ليست کاربران

مشاهده گروههائي که Account فوق به عنوان عضوي از آنان مي باشد( کليک بر روي Member of ) . کاربران Anonymous ، بصورت پيش فرض ، عضوي از گروه Guests بوده که داراي مجوزهاي اندکي مي باشد. ASP.NET از ASP.NET Account ( با توجه به تنظيمات پيش فرض) ، به منظور اجراي برنامه وب استفاده مي نمايد . بدين ترتيب ، در صورتيکه برنامه اي سعي در انجام عملياتي نمايد که در ليست مجوزهاي ASP.NET Account وجود نداشته باشد ، يک مورد خاص امنيتي بوجود آمده و امکان دستيابي آن تائيد نخواهد شد.

به منظور اعمال محدوديت در دستيابي کاربران ناشناس مي توان از تنظيمات مربوط به مجوزهاي فايل ويندوز استفاده نمود . براي ايمن سازي ، سرويس دهنده مي بايست داراي سيستم فايل NTFS باشد . سيستم هاي فايل FAT و يا FAT32 ، ايمن سازي در سطح فايل را ارائه نمي نمايند .

دستيابي از طريق کاربران تائيد شده
دستيابي Anonymous ، گزينه اي مناسب براي دستيابي به اطلاعات عمومي و عام است . در صورتيکه برنامه هاي وب شامل اطلاعاتي خاص و خصوصي باشند ، مي بايست در ابتدا کاربران شناسائي و در ادامه با توجه به مجوزهاي تعريف شده ، امکان دستيابي فراهم گردد. در برنامه هاي وب ASP.NET از سه روش عمده به منظور Authentication و Authorization کاربران استفاده مي گردد :

Windows integrated authentication : در روش فوق ، شناسائي و تائيد کاربران بر اساس ليست کاربران تعريف شده بر روي سرويس دهنده انجام خواهد شد. در ادامه با توجه به مجوزها و امتيازات نسبت داده شده به هر Account ، امکان دستيابي و يا عدم دستيابي به منابع موجود بر روي سرويس دهنده ، فراهم مي گردد.

Forms authentication : در روش فوق ، کاربران به يک فرم وب Logon ، هدايت مي گردند . در ادامه ، اطلاعات مربوط به نام و رمز عبور آنان اخذ و فرآيند شناسائي و تائيد بر اساس يک لسيت کاربران و يا از طريق يک بانک اطلاعاتي که برنامه حمايت مي نمايد ، انجام خواهد شد.

Passport authentication : در روش فوق ، کاربران جديد به يک سايت که توسط مايکروسافت ميزبان شده است ، هدايت مي گردند .پس از ريجستر شدن کاربران ، امکان دستيابي آنان به چندين سايت ، فراهم خواهد شد( تمرکز در شناسائي کاربران و استفاده از سايت هاي متعدد با توجه به تائيد بعمل آمده ) .

هر يک از رويکردهاي فوق ، به همراه روش دستيابي Anonymous ، داراي مزاياي مختص به خود بوده و براي نوع خاصي از برنامه هاي وب ، مناسب مي باشند :

نوع برنامه : برنامه وب عمومي اينترنت
روش تائيد کاربران : Anonymous
توضيحات : روش عمومي دستيابي براي اغلب سايت هاي وب ، مي باشد. در اين روش ، ضرورتي به Logon وجود نداشته و با استفاده از مجوزهاي سيستم فايل NTFS ، مي توان ايمن سازي منابعي را که قصد اعمال محدوديت در رابطه با دستيابي به آنان وجود دارد را انجام داد .

نوع برنامه : برنامه وب اينترانت
روش تائيد کاربران : Windows integrated
توضيحات : در روش فوق ، سيستم معتبر سازي ويندوز ، کاربران شبکه را از طريق کنترل کننده Domain ، تائيد مي نمايد. امکان دستيابي به منابع برنامه هاي وب بر اساس مجوزهاي تعريف شده بر روي سرويس دهنده ، براي هر يک از کاربران فراهم مي گردد .

نوع برنامه : برنامه هاي وب تجاري
روش تائيد کاربران : Forms
توضيحات : برنامه هائي که نيازمند دريافت اطلاعات مالي مي باشند ، مي بايست از روش فوق به منظور اخذ و ذخيره سازي اطلاعات ، استفاده نمايند .

نوع برنامه : برنامه هاي متعدد تجاري
روش تائيد کاربران : Passport
توضيحات : در روش فوق ، کاربران يک مرتبه Sign in نموده ( از طريق يک مرکز تائيد کاربران ) و امکان دستيابي و استفاده آنان از تمامي برنامه هائي که از Passport SDK استفاده مي نمايند ، وجود خواهد داشت . اطلاعات کاربران در يک Passport profile نگهداري خواهدشد ( در مقابل استفاده از يک بانک اطلاعاتي محلي ) .

استفاده از Authentication در فايل هاي HTM و يا HTML
سه روش تائيد کاربران که توسط ASP.NET ارائه شده است ، صرفا" در رابطه با فايل هائي که به عنوان بخشي از برنامه وب مي باشند ، بکار گرفته مي شود .فرم هاي وب ( فايل هائي با انشعاب aspx . ) ، ماژول ها ( فايل هائي با انشعاب asax . ) ، نمونه هائي در اين زمينه مي باشند. فرآيند فوق ، صفحات HTML ( فايل هائي با انشعاب HTM و يا HTML ) را شامل نمي گردد و مسئوليت آن بصورت پيش فرض به IIS ( در مقابل ASP.NET ) واگذار شده است. در صورتيکه فصد تائيد کاربراني ( استفاده از يکي از روش هاي Windows,Forms و Passport ) را داشته باشيم که به صفحات HTML از طريق برنامه وب دستيابي دارند ، مي بايست اين نوع فايل ها به ASP.NET executable ، مپ گردند .به منظور مپ نمودن فايل هاي html به ASP.NET executable ، پس از اجراي IIS مراحل زير را دنبال مي نمائيم :

انتخاب فولدر شامل برنامه وب و Properties از طريق Action Menu . در ادامه برنامه IIS ، جعبه محاوره اي Properties را نمايش خواهد داد .

بر روي Directory Tab کليک نموده و در ادامه گزينه Configuration را انتخاب مي نمائيم . IIS در ادامه جعبه محاوره اي Application Configuration را نمايش خواهد داد :

بر روي دکمه Add کليک نموده و در ادامه IIS جعبه محاوره اي Add/Edit Application Extension Mapping را نمايش خواهد داد .

بر دکمه Browse کليک نموده و فايل aspnet_isapi.dll را انتخاب مي نمائيم .فايل فوق در دايرکتوري Windows Microsoft .Net Framework قرار داشته و مسير آن مشابه زير است :

Path for aspnet_isapi.dll

C:\windows\Microsoft.NET\Framework\versionnumber\aspnet_isapi.dll

htm. را در فيلد File Extension تايپ مي نمائيم .

مراحل فوق ، براي فايل هاي با انشعاب html ، تکرار مي گردد.

در بخش دوم اين مقاله به بررسي Windows Authentication خواهيم پرداخت .

کيفيت مقاله :
عالی خوب متوسط ضعيف


امنيت برنامه هاي وب ( بخش دوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۲۳ مراجعه امروز
۴۸۳۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
امنيت برنامه هاي وب ( بخش دوم )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۱۰/۱۳۸۲ اين مقاله ۴۷۶ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.

در بخش اول اين مقاله ، به نحوه برخورد ASP.NET با کاربران ناشناس ( Anonymous ) ، روش هاي متفاوت شناسائي کاربران و پارامترهاي لازم در خصوص انتخاب يک استراتژي به منظور شناسائي کاربران با توجه به نوع برنامه ها ، اشاره گرديد.در بخش دوم اين مقاله به بررسي Windows Authentication خواهيم پرداخت .
همانگونه که در بخش اول اين مقاله اشاره گرديد ، برنامه هاي وب ASP.NET از سه روش عمده به منظور تائيد کاربران استفاده مي نمايند :

Windows Authentication

Forms Authentication

Passport Authentication

در Windows Authentication ، برنامه هاي وب مسئوليتي را در ارتباط با تائيد کاربران برعهده نگرفته و اين وظيفه تماما" به سيستم عامل ويندوز ، واگذار مي گردد. فرآيند تائيد کاربران در روش فوق، بصورت زير است :

کاربر درخواستي مبني بر دريافت يک صفحه وب ايمن را از برنامه وب ، مي نمايد .

پس از دريافت درخواست توسط سرويس دهنده وب ، IIS عمليات بررسي صلاحيت کاربر را انجام خواهد داد . در اين راستا ، اطلاعات ارائه شده توسط کاربر در زمان logon ( نام و رمز عبور) ، با اطلاعات موجود بر روي سرويس دهنده وب و يا Domain ، مقايسه مي گردد .

در صورتيکه پس از بررسي مدارک ارائه شده توسط کاربر ( نام و رمز عبور ) ، وي به عنوان کاربر غير مجاز تشخيص داده شود ، درخواست وي ناديده گرفته خواهد شد .

کامپيوتر سرويس گيرنده ، يک جعبه محاوره اي Logon را توليد و از کاربر درخواست درج اطلاعات مورد نياز ( نام و رمز عبور ) ، مي گردد . پس از درج اطلاعات درخواستي توسط کاربر و ارسال آنان براي سرويس دهنده ، مجددا" IIS بررسي لازم در خصوص صحت آنان را انجام خواهد داد . در صورتيکه صحت اطلاعات ارسالي کاربر ( نام و رمز عبور ) تائيد گردد ، IIS درخواست اوليه کاربر را به سمت برنامه وب هدايت مي نمايد .

در آخرين مرحله و پس از بررسي و تائيد صلاحيت کاربر ، صفحه وب درخواستي براي کاربر ارسال مي گردد .

مهمترين مزيت روش Windows Authentication ، استفاده مشترک از يک مدل امنيتي به منظور دستيابي به منابع موجود در شبکه و برنامه هاي وب است . پس از تعريف و اعطاي مجوزهاي لازم به کاربر ، امکان دستيابي وي به منابع موجود در شبکه و برنامه هاي وب بر اساس يک سيستم امنيتي مشابه و يکسان ، فراهم مي گردد .
در زمان ايجاد يک پروژه جديد برنامه وب توسط ويژوال استوديو دات نت ، از روش Windows Authentication بصورت پيش فرض به منظور تائيد کاربران استفاده مي گردد .پس از ايجاد يک پروژه جديد برنامه وب در ويژوال استوديو دات نت ، فايل Web.Config بصورت اتوماتيک ايجاد مي گردد . ( يک فايل XML که اطلاعات متفاوتي را در ارتباط با پيکربندي رنامه وب در خود ذخيره مي نمايد ) . محتوي پيش فرض اين فايل بصورت زير است ( صرفا" بخشي که با موضوع اين مقاله ارتباط دارد ، منعکس مي گردد ) :

Web.Config default setting

<authentication mode="Windows" />
<authorization>
<allow users="*" /> <!-- تمامي کاربران -->
</authorization>

در بخش مربوط به عنصر authentication ، سياست تائيد کاربران برنامه هاي وب مخشص مي گردد . براي مشخص نمودن سياست فوق از خصلت mode مربوط به عنصر authentication ، استفاده شده که مي تواند يکي از مقادير : Windows , Forms ,Passport و يا None را دارا باشد . در بخش authorization ، سياست هاي مربوط به کاربران مجاز برنامه وب مشخص مي گردد . در اين رابطه مي توان ، امکان دستيابي و يا عدم دستيابي به برنامه هاي وب را با مشخص نمودن کاربران و يا با توجه به وظايف آنان ، فراهم نمود. ( استفاده از کاراکتر " * " ، به معني همه کاربران بوده و کاراکتر "؟" به منزله کاربران ناشناس و غيرمجاز است) . براي آشنائي با عملکرد روش Windows Authentication ، مراحل زير را دنبال مي نمائيم :

بخش authorization در فايل Web.Config را بصورت زير تغيير مي نمائيم :

Authorization element

<authorization>
<deny users="?" />
</authorization>

تگ هاي زير را که يک جدول HTML را تعريف مي نمايند ، در فرم وب شروع برنامه وب ، قرار مي دهيم :

HTML Table in Startup web form

<TABLE id="tblUser">
<tr>
<TD><STRONG>آيا کاربر تائيد شده است ؟</STRONG></TD>
<TD><Span runat="server" id="spnAuthenticated"></Span></TD>
</tr>
<tr>
<TD><STRONG>نام کاربر </STRONG></TD>
<TD><Span runat="server" id="spnUserName"></Span></TD>
</tr>
<tr>
<TD><STRONG>نوع تائيد کاربر</STRONG></TD>
<TD><Span runat="server" id="spnAuthenticationtype"></Span></TD>
</tr>
</TABLE>

به حالت Design view سوئيچ نموده و کد زير را در فايل Code Behind فرم وب شروع برنامه ، قرار مي دهيم :

Web form's code-behind file

Private Sub Page_Load( ByVal sender As System.Object,ByVal e As System.EventArgs ) Handles Mybase.Load
spnAuthenticated.InnerText = User.Identity.IsAuthenticated
spnUserName .InnerText = User.Identity.Name
spnAuthenticationType.InnerText = User.Identity.AuthenticationType
End Sub

پس از اجراي پروژه بصورت محلي ، ASP.NET تائيد کاربر را بر اساس نام و رمز عبوري که براي ورود به ويندوز استفاده شده است ، انجام خواهد د اد .

پس از اجراي پروژه از راه دور ( مثلا" دستيابي از طريق اينترنت ) ، ASP.NET يک جعبه محاوره اي رادر مرورگر نمايش داده تا از طريق آن نام و رمز عبور کاربر دريافت گردد .

در صورتيکه نام و رمز عبور درج شده توسط کاربر با تعاريف انجام شده در Domain شبکه ، مطابقت نمايد ، ASP.NET کاربر را تائيد و مجوز لازم به منظور استفاده از برنامه وب صادر خواهد شد . در اين رابطه ASP.NET ، يک authorization certificate را به شکل يک کوکي صادر که در حين Session کاربر ، نگهداري و از آن استفاده مي گردد. Session کاربر، پس از اتمام زمان Time out و يا بستن مرورگر ، خاتمه مي يابد . برنامه وب اجراي خود را متناسب با مجوزهاي تعريف شده در ارتباط با Account آغاز مي نمايد .
روش Windows integrated authentication در يک شبکه مبتني بر Domain بهتر کار خواهد کرد . شبکه هائي که از Workgroup استفاده مي نمايند ( در مقابل استفاده از Domain ) داراي محدوديت هاي خاص خود به منظور استفاده از ويژگي هاي امنيتي ، مي باشند. شبکه هاي مبتني بر Domain ، از يک کنترل کننده Domain به منظور تائيد و معتبرسازي کاربران شبکه ، استفاده مي نمايد .
با استفاده از امکانات ارائه شده در فايل Web.Config مي توان يک لايه امنيتي مضاعف را ايجاد نمود . دراين راستا ، مي توان تنظيمات لازم به منظور دستيابي و يا عدم دستيابي کاربران و يا گروه هاي خاصي از کاربران را نيز انجام داد .

اعمال محدوديت براي کاربران خاص ( دستيابي و يا عدم دستيابي )
در موارديکه از روش Windows integrated authentication استفاده مي گردد ، ASP.NET ، ليست تائيد موجود در فايل Web.Config را به منظور آگاهي از صلاحيت کاربران شبکه براي استفاده ازبرنامه وب ، بررسي مي نمايد. کاراکترهاي "*" و "؟" داراي معاني خاصي در ليست تائيد مي باشند : کاراکتر "* " ، نشاندهنده تمامي کاربران و کاراکتر "؟"، نشاندهنده کاربران غير مجاز( ناشناس) مي باشد . مثلا" ليست تائيد زير در Web.Config ، امکان دسـتيابي تمامي کاربران ناشناس به برنامه وب را حذف و مي بايست تمامي کاربران به منظور استفاده از برنامه وب ،تائيد گردند .

Authorization element

<authorization>
<deny users="?" />
</authorization>

به منظور اعمال محدوديت در دستيابي کاربراني خاص ،مي توان از عنصر <allow> استفاده و اسامي تمامي کاربران مجاز را با صراحت مشخص نمود (اسامي توسط ويرگول از يکديگر تفکيک مي گردند) . پس از معرفي کاربران مجاز با استفاده از عنصر <allow> ، مي بايست با بکارگيري عنصر <deny> ، امکان دستيابي به برنامه توسط کاربران غير مجاز، سلب مي گردد .

Authorization element

<authorization>
<allow users="Ali Reaz , Reza Ali " />
<deny users="*" />
</authorization>

ليست مجاز فوق ، امکان دستيابي دو کاربر که اسامي آنان با صراحت مشخص شده است را به برنامه وب خواهد داد. ساير کاربران ، امکان دستيابي به برنامه وب را دارا نخواهند بود ( نقش عنصر deny در مثال فوق ) علاوه بر ليست مجاز فوق که اسامي دو کاربر را مشخص و آنان را براي استفاده از برنامه وب مجاز مي نمايد ، دو کاربر فوق ، مي بايست داراي Account لازم در Domain شبکه نيز باشند .

تائيد کاربران بر اساس نوع وظيفه
براي تائيد کاربران به منظور استفاده از يک برنامه مي توان ، مجوزهاي لازم را بر اساس وظيفه آنان در سازمان ، صادر و امکان دستيابي و يا عدم دستيابي را براي آنان فراهم نمود. در ويندوز NT و XP ، وظايف به اسامي مپ شده تا از اين طريق امکان شناسائي گروه هاي کاربران ، فراهم گردد. ويندوز، چندين گروه را بصورت اتوماتيک از قبل ايجاد مي نمايد : Administrators ,Users و Guests . در اين رابطه مي توان از عنصر <roles> در ليست استفاده کنندگان مجاز برنامه وب در فايل Web.Config استفاده و امکان دستيابي به يک برنامه را با توجه به وظايف کاربر ، فراهم نمود. مثلا" ليست زير، امکان دستيابي به برنامه وب را صرفا" براي کاربراني که به عنوان Administrator به شبکه وارد مي شوند ، فراهم مي نمايد.

Authorization element

<authorization>
<allow roles ="Administrators" />
<deny users="*" />
</authorization>

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

Web form's code-behind file

Private Sub Page_Load( ByVal sender As System.Object,ByVal e As System.EventArgs ) Handles Mybase.Load
spnAuthenticated.InnerText = User.Identity.IsAuthenticated
spnUserName .InnerText = User.Identity.Name
spnAuthenticationType.InnerText = User.Identity.AuthenticationType
End Sub

به منظور آگاهي و انجام عمليات لازم با توجه به نوع وظيفه کاربر که از برنامه وب استفاده مي نمايد ، مي توان از متد IsInRole شي User ، استفاده نمود .

IsInRole method

If User.IsInRole("Administrators") Then
'انجام عمليات دلخواه
End If

استفاده از تنظيمات IIS به همراه Windows Authentication
تنظيمات Authorization در فايل Web.Config با تنظيمات انجام شده در IIS با يکديگر Overlap مي شوند . در صورتيکه Authorization هم در فايل Web.Config و هم توسط IIS تنظيم شده باشد ، در ابتدا تنظيمات IIS بررسي و در ادامه تنظيمات موجود در فايل Web.Config ، مورد توجه قرار خواهند گرفت. به منظور مشاهده تنظيمات authorization در IIS مراحل زير را دنبال مي نمائيم :

در IIS بر روي فولدر برنامه وب کليک سمت راست نموده و در ادامه گزينه Properties را انتخاب مي نمائيم . برنامه IIS در ادامه جعبه محاوره اي Properties مربوط به فولدر را نمايش خواهد داد .

بر روي Directory Security Tab کليک و در ادامه دکمه Edit را در گروه Anonymous Access And Authentication Control کليک مي نمائيم . IIS ، جعبه محاوره اي Authentication Methods را نمايش خواهد داد .

اولين گروه از تنظيمات در جعبه محاوره اي ، کنترل دستيابي Anonymous را انجام مي دهد ( همه کاربران ). غير فعال نمودن گزينه فوق ، معادل <"?" = deny User > در فايل Web.config است.

Check Box هاي موجود در قسمت دوم جعبه محاوره اي ، مجاز بودن برنامه به منظور استفاده از Basic و يا Digest Authentication را علاوه بر Windows Authentication ، مشخص مي نمايد. روش هاي فوق ، ايمني بمراتب کمتري را نسبت به Windows Integrated ارائه مي نمايند .مي توان چندين روش authentication را در IIS فعال نمود . در صورتيکه چندين روش فعال شده باشد ، مي توان با استفاده از متد AuthenticationType مربوط به شي Identity ، از روش استفاده شده به منظور تائيد کاربر ، آگاهي يافت .

AuthenticationType method

Response.Write(User.Identity.AuthenticationType)

در بخش سوم اين مقاله به بررسي روش Forms Authentication ، خواهيم پرداخت

کيفيت مقاله :
عالی خوب متوسط ضعيف


امنيت برنامه های وب ( بخش سوم ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۲۶ مراجعه امروز
۴۸۴۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
امنيت برنامه های وب ( بخش سوم )
نويسنده : شرکت سخا روش
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۱۰/۱۳۸۲ اين مقاله ۴۷۰ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.
در بخش سوم اين مقاله به بررسي Forms Authentication خواهيم پرداخت .
همانگونه که در بخش اول اين مقاله اشاره گرديد ، برنامه هاي وب ASP.NET از سه روش عمده به منظور تائيد کاربران استفاده مي نمايند :

Windows Authentication

Forms Authentication

Passport Authentication

در Forms Authentication ، برنامه IIS مسئوليتي را در ارتباط با تائيد کاربران برعهده نگرفته و تنظيمات امنيتي IIS در رابطه با برنامه وب ، دستيابي Anonymous مي باشد . فرآيند تائيد کاربران در روش فوق، بصورت زير است :

زمانيکه سرويس گيرنده درخواست يک صفحه ايمن را مي نمايد ، IIS کاربر را به عنوان Anonymous، تائيد و در ادامه درخواست وي را براي ASP.NET ارسال مي نمايد .

ASP.NET ، بررسي لازم در خصوص وجود يک کوکي خاص بر روي کامپيوتر سرويس گيرنده را انجام خواهد داد .

در صورتيکه کوکي ، موجود نبوده و يا غيرمعتبر باشد ، ASP.NET درخواست کاربر را ناديده گرفته و براي وي يک صفحه Logon را ارسال مي نمايد ( مثلا" Login.aspx ).

کاربر اطلاعات لازم ( نام و رمز عبور ) را در صفحه Logon.aspx ( به عنوان نمونه ) درج و در ادامه دکمه Submit موجود بر روي فرم را به منظور ارسال اطلاعات براي سرويس دهنده ، فعال مي نمايد.

IIS ، مجددا" کاربر را به عنوان Anonymous، تائيد و درخواست وي را براي ASP.NET ارسال مي نمايد .

ASP.NET ، تائيد کاربر را بر اساس اطلاعات ارسالي ( نام و رمز عبور ) انجام و يک کوکي را ايجاد مي نمايد .

در نهايت ، صفحه وب ايمن درخواست شده به همراه کوکي جديد براي سرويس گيرنده ارسال مي گردد. ماداميکه کوکي معتبر باشد ، کاربر قادر به درخواست و مشاهده ساير صفحات وب مي باشد.

فرآيند فوق را مي توان به دو حالت متفاوت تعميم و مورد توجه قرار داد :

حالت اول : درخواست يک صفحه ايمن از سرويس دهنده ، توسط يک کاربر غيرمجاز و تائيد نشده
مرحله اول : پس از درخواست يک سرويس گيرنده براي دستيابي به يک صفحه ايمن ، درخواست ارسالي وي در ابتدا توسط IIS بررسي و با توجه به اينکه تنظيمات IIS بصورت Anonymous پيکربندي شده تا امکان استفاده از Forms Authentication فراهم گردد ، درخواست کاربر ، مستقيما" براي ماژول ASP.NET Forms Authentication ارسال مي گردد .
مرحله دوم : ASP.NET ، بررسي لازم در خصوص وجود ( داشتن ) يک کوکي Authentication را انجام خواهد داد . با توجه به اينکه کاربر اولين مرتبه است که درخواست اطلاعاتي را نموده و داراي يک کوکي نمي باشد ، سرويس گيرنده به صفحه Logon ، هدايت مي گردد .
مرحله سوم : کاربراطلاعات ضروري ( نام و رمز عبور ) خود را در صفحه Logon درج و پس ازارسال آنان ،فرآيند بررسي اطلاعات ارسالي آغاز مي گردد. در يک برنامه بزرگ ، بررسي اطلاعات کاربر از طريق يک بانک اطلاعاتي شامل مشخصات کاربران انجام مي شود .
مرحله چهارم : در صورتيکه اطلاعات ارسالي کاربر ( نام و رمز عبور ) ، پس از بررسي توسط برنامه وب ، معتبر شناخته نگردند ، مجوز دستيابي براي کاربر صادر نشده و امکان دستيابي وي سلب مي گردد .
مرحله پنجم : در صورتيکه پس از بررسي اطلاعات ارسالي، اعتبار وصحت آنان تائيد گردد ، يک کوکي تائيد ايجاد و در ادامه به کاربر مجوز لازم به منظور دستيابي به صفحه ، اعطاء مي گردد .(هدايت کاربر به صفحه درخواست اوليه ) .

حالت دوم : درخواست يک صفحه ايمن از سرويس دهنده ، توسط يک کاربر مجاز و تائيد شده
مرحله اول : پس از درخواست يک صفحه ايمن توسط سرويس گيرنده ، کوکي Authentication بهمراه درخواست وي براي سرويس دهنده ، ارسال مي گردد.
مرحله دوم :درخواست ارسالي توسط سرويس گيرنده در ابتدا توسط IIS دريافت و با توجه به تنظيمات انجام شده ( دسيتابي Anonymous ) ، درخواست وي مستقيما" براي ASP.NET Forms Authentication ارسال مي گردد .
مرحله سوم : ماژول ASP.NET Forms Authentication ، بررسي لازم در خصوص کوکي را انجام و در صورتيکه کوکي معتبر باشد ، سرويس گيرنده تائيد و امکان دستيابي و مشاهده صفحه وب درخواستي براي وي ، فراهم مي گردد .

در روش Forms Authentication ، بصورت اتوماتيک يک فرم وب طراحي شده به منظور اخذ اطلاعات مربوط به نام و رمز عبور کاربران ، نمايش داده مي شود . کد مرتبط با فرم وب ، عمليات تائيد و معتبرسازي کاربر را بر اساس ليست ذخيره شده در فايل Web.Config برنامه و يا از طريق يک بانک اطلاعاتي جداگانه ، انجام مي دهد. مزيت مهم Forms Authentication ، عدم ضرورت عضويت کاربران در Domain شبکه به منظور دستيابي به برنامه وب ، مي باشد .

فعال نمودن Forms Authentication
به منظور استفاده از روش فوق ، مي بايست مراحل زير را دنبال نمود :

مقداردهي Authentication mode در فايل Web.config به Forms

ايجاد يک فرم وب به منظور اخذ اطلاعات کاربران ( Logon Page )

ايجاد يک فايل و يا بانک اطلاعاتي به منظور ذخيره نام و رمز عبور کاربران

نوشتن کد لازم به منظور افزودن کاربر جديد به فايل و يا بانک اطلاعاتي کاربران

نوشتن کد لازم به منظور تائيد کاربران با استناد به فايل و يا بانک اطلاعاتي کاربران

Forms Authentication ، از کلاس هاي موجود در namespace با نام System.Web.Security استفاده مي نمايد . به منظور استفاده از کلاس هاي فوق، مي بايست در ويژوال بيسک دات نت از عبارت Imports و در ويژوال سي شارپ از Using استفاده گردد ( در ابتداي هر ماژول که عمليات تائيد را انجام خواهد داد : Imports System.Web.Security ) .

مقداردهي Authentication mode
نوع تائيد کاربران در يک برنامه وب ، مي بايست با استفاده از عنصر <authentication> در فايل Web.config مشخص گردد. به منظور تنظيم برنامه مورد نظر خود براي استفاده از Forms Authentication ، تغييرات زير را در فايل Web.Config ، اعمال مي نمائيم :

Web.Config setting for Forms Authentication

<authentication mode="Forms">
<forms loginUrl = Login.aspx" >
<credentials passwordFormat = "Clear" >
<user name = "Ali" Password ="110" />
<user name = "Kaveh" Password ="111" />
</credentials>
</forms>
</authentication>

کد فوق، يک نوع ساده از تائيد کاربران به روش Forms را نشان مي دهد . در اين رابطه ، اغلب از تعاريف و تنظيمات پيش فرض و يک ليست کاربران مجاز، استفاده شده است. از عناصر متفاوتي در ارتباط با Forms Authentication در فايل Web.Config استفاده مي گردد.هر يک از عناصر داراي خصلت هاي خاص خود مي باشند :

عنصر <authentication>
خصلت Mode ، با استفاده از خصلت فوق ، روش تائيد و شناسائي کاربران مشخص مي گردد. با مقدار دهي خصلت فوق به Forms ، روش Forms Authentication انتخاب خواهد شد.

عنصر <forms>
خصلت name . از خصلت فوق به منظور مشخص نمودن نام کوکي که اطلاعات مربوط به نام و رمز عبور را ذخيره مي نمايد ، استفاده مي شود . مقدار پيش فرض ، authaspx . مي باشد . در صورتيکه بيش از يک برنامه بر روي سرويس دهنده از روش Forms Authentication استفاده مي نمايند ، مي بايست براي هر يک از آنان نام منحصربفردي در نظر گرفته شود .
خصلت loginUrl .از خصلت فوق به منظور مشخص نمودن نام فرم وب Login براي کاربران تائيد نشده ، استفاده مي گردد . مقدار پيش فرض خصلت فوق، Default.aspx است .
خصلت protection . با استفاده از خصلت فوق روش حفاظت کوکي Authentication که بر روي کامپيوتر سرويس گيرنده ذخيره مي گردد ، مشخص خواهد شد. مقدار پيش فرض خصلت فوق ، All بوده که عمليات رمزنگاري و بررسي اعتبار و صحت داده در رابطه با آن اعمال مي گردد. ساير گزينه هاي موجود در اين راستا ، Encryption,Validation و None مي باشد .
خصلت timeout . با استفاده از خصلت فوق ، مدت زمان نگهداري کوکي Authentication بر روي ماشين کاربر مشخص مي گردد . مقدار پيش فرض 30 دقيقه است . ASP.NET ، پس از دريافت يک درخواست جديد توسط کاربر و مشروط به گذشت بيش از نصف زمان تعريف شده ، کوکي را تجديد ( Renew ) خواهد کرد .
خصلت path . با استفاده از خصلت فوق ، مسير مورد نظر به منظور ذخيره سازي کوکي بر روي ماشين کاربر مشخص مي گردد . مقدار پيش فرض ، "\" است .

عنصر <credentials>
خصلت passwordFormat ، با استفاده از خصلت فوق ، الگوريتم لازم به منظور رمزنگاري رمز عبور کاربر ، مشخص مي گردد . مقدار پيش فرض ، SHA1 مي باشد . ساير گزينه هاي موجود در اين رابطه ، MD5 و Clear ( بدون رمزنگاري ) مي باشد .

عنصر <users>
خصلت name ، با استفاده از خصلت فوق ، نام کاربر مشخص مي گردد.
خصلت password ، با استفاده از خصلت فوق ، رمز عبور کاربر مشخص مي گردد.

عنصر <credentilas> ، امکان ذخيره سازي ليست کاربران را در Web.Config فراهم مي نمايد . رويکرد فوق ، روشي ساده به منظور تعريف کاربران مجاز يک برنامه وب مي باشد . در چنين مواردي ، مديريت سيستم مي تواند بسادگي و در صورت لزوم نام و رمز عبور کاربران ديگري را به ليست مجاز کاربران ، اضافه نمايد . مکانيزم فوق ، در مواردي که قصد داشته باشيم ، امکان تعريف نام و رمز عبور را در اختيار کاربران قرار دهيم ، گزينه مناسبي نبوده و مي بايست از يک فايل و يا بانک اطلاعاتي به منظور ذخيره سازي اطلاعات کاربران ، استفاده گردد.

در بخش چهارم اين مقاله با نحوه ايجاد بانک اطلاعاتي ، درج مشخصات کاربران و تائيد آنان با استناد به اطلاعات مندرج در بانک اطلاعاتي ، خواهيم پرداخت

کيفيت مقاله :
عالی خوب متوسط ضعيف


نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده وب ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۰۳ مراجعه امروز
۵۳۱۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده وب
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۱۰/۱۳۸۲ اين مقاله ۱۴۸۶ بار مطالعه شده است
۸ نفر تا به حال به اين مقاله رای داده اند.

برنامه هاي وب از معماري سرويس گيرنده - سرويس دهنده تبعيت نموده و بر روي سرويس دهنده وب مستقر و مسئوليت پاسخگوئي به درخواست هاي ارسالي توسط سرويس گيرندگان را برعهده خواهند داشت .در سمت سرويس گيرنده ، مرورگر و در سمت سرويس دهنده ، سرويس دهنده وب داراي جايگاهي خاص مي باشند . مرورگر ، ميزبان برنامه وب بوده و مهمترين وظيفه آن ارائه بخش رابط کاربر يک برنامه وب است . در اين راستا ، مرورگر داراي پتانسيل لازم به منظور تفسير و نمايش تگ هاي HTML مي باشد .در سمت سرويس دهنده ، برنامه هاي وب با نظارت و مديريت يک سرويس دهنده وب ( مثلا" IIS ) اجراء مي گردند . سرويس دهنده وب ، مسئوليت مديريت برنامه ، پردازش درخواست هاي ارسالي توسط سرويس گيرندگان و ارائه پاسخ لازم به سرويس گيرندگان را بر عهده دارد .به منظور قانونمند کردن ارسال درخواست سرويس گيرندگان و ارائه پاسخ سرويس دهنده ، مي بايست از يک پروتکل ارتباطي خاص استفاده گردد. پروتکل ، مجموعه اي از قوانين لازم بمنظور تشريح نحوه ارتباط دو و يا چندين آيتم از طريق يک محيط انتقال ( زير ساخت انتقال داده ) نظير اينترنت است . در برنامه هاي وب ( ارسال درخواست توسط سرويس گيرنده و پاسخ به درخواست توسط سرويس دهنده ) از پروتکل ارتباطي HTTP)Hypertext Transport Protocol) ، استفاده مي گردد.
ASP.NET پلات فرم مايکروسافت براي طراحي و پياده سازي برنامه هاي وب در دات نت مي باشد . پس از درخواست يک صفحه ASP.NET توسط مرورگر سرويس گيرنده ، پردازش هاي متعددي بر روي سرويس دهنده وب به منظور ارائه پاسخ لازم ، انجام خواهد شد.شايد تاکنون سوالات مختلفي در رابطه با نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده ، براي شما مطرح شده باشد :

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

مرحله اول : ايجاد يک درخواست HTTP براي يک صفحه ASP.NET توسط مرورگر
پردازش با درخواست يک صفحه ASP.NET که توسط مرورگر ايجاد مي شود ، آغاز مي گردد .مثلا" يک کاربر ممکن است در بخش آدرس مرورگر کامپيوتر خود آدرس www.srco.ir//Articles/DocView.asp?ID=210 را به منظور دريافت اين مقاله وارد نمايد . مرورگر در ادامه يک درخواست HTTP را از سرويس دهنده وب محل استقرار سايت Srco.ir ايجاد و درخواست فايل حاوي مقاله را مي نمايد .

مرحله دوم : دريافت درخواست HTTP ، توسط سرويس دهنده وب
مهمترين وظيفه سرويس دهنده وب ، دريافت درخواست ارسالي HTTP و ارائه منبع درخواست شده درقالب يک پاسخ HTTP است . سرويس دهنده وب ( مثلا" IIS ) ، پس از دريافت درخواست ارسال شده توسط سرويس گيرنده ، تصميم لازم در رابطه با نحوه برخورد با آن را اتخاذ مي نمايد. محور تصميم گيري فوق بر پايه نوع انشعاب فايل درخواستي استوار مي باشد. مثلا" در صورتيکه فايل درخواستي داراي انشعاب asp. ، باشد ، IIS درخواست را به سمت asp.dll هدايت تا عمليات مرتبط با آن انجام شود . انشعابات فايل متعددي به موتور ASP.NET ، مپ مي گردند . برخي از آنان شامل موارد زير مي باشد :

انشعاب aspx . ، براي صفحات وب ASP.NET
انشعاب asmx . ، براي سرويس هاي وب ASP.NET
انشعاب config . ، براي فايل هاي پيکربندي ASP.NET
انشعاب ashx . ، براي هندلرهاي سفارشي ASP.NET HTTP
انشعاب rem . ، براي منابع راه دور
و ساير انشعابات ديگر

پس از دريافت درخواست ارسالي توسط سرويس گيرنده ، سرويس دهنده وب آن را در اختيار مسئول مربوطه قرار خواهد داد . مثلا" در صورتيکه درخواست دريافتي مربوط به يک صفحه ASP کلاسيک باشد ، درخواست در اخـتيار asp.dll گذاشته شده و يا در صورتيکه درخواست در ارتباط با يک صفحه ASP.NET باشد ، درخواست در اختيار موتور ASP.NET قرار داده مي شود . همانگونه که اشاره گرديد ، معيار اصلي در اين تصميم گيري ، نوع انشعاب فايل درخواست شده توسط سرويس گيرنده مي باشد . شکل زير مراحل اول و دوم اشاره شده را نشان مي دهد .

منبع : http://www.4guysfromrolla.com

مرحله سوم : عملکرد موتور ASP.NET
پس از درخواست يک صفحه ASP.NET توسط سرويس گيرنده و دريافت آن توسط سرويس دهنده وب ، درخواست دريافتي در اختيار موتور ASP.NET قرار داده مي شود . از موتور ASP.NET ، اغلب با نام ASP.NET HTTP pipeline ياد مي گردد. علت نامگذاري فوق ، بدين دليل است که درخواست دريافتي از بين تعداد متغيري از HTTP modules در بين مسير خود براي رسيدن به يک HTTP handler عبور مي نمايد . HTTP modules ، کلاس هائي مي باشند که امکان دستيابي به درخواست دريافتي را دارا مي باشند. اين ماژول ها قادر به بازبيني و بررسي درخواست دريافتي و اتخاد تصميماتي مي باشند که مستقيما" بر نحوه گردش داخلي ( روند برخورد با درخواست ) تاثير خواهد گذاشت . درخواست دريافتي پس از عبور از ماژول هاي مسخص شده HTTP ، به يک HTTP Handler خواهد رسيد . HTTP Handler مسئوليت ايجاد خروجي لازم به منظور ارسال براي مرورگر متقاصي ( ارسال کننده درخواست ) را برعهده دارد. شکل زير ، pipline يک درخواست ASP.NET را نشان مي دهد .

منبع : http://www.4guysfromrolla.com

تعداد زيادي از ماژول هاي HTTP از قبل ايجاد شده، بصورت پيش فرض در HTTP pipline وجود دارد:

OutputCache ، مسئوليت برگرداندن و Caching خروجي صفحات HTML در صورت نياز ، برعهده دارد .

Session ، ماژول فوق ، مسئوليت لود Session state را بر اساس درخواست دريافتي کاربر و روش Session که در فايل Web.config مشخص شده است ، برعهده دارد .

FormsAuthentication ، ماژول فوق ، مسئوليت تائيد کاربران بر اساس مدل تعريف شده Forms Authentication را در صورت ضرورت برعهده دارد .

و موارد ديگر

به منظورآشنائي با ماژول هاي پيش فرض، مي توان مقادير نسبت داده شده به عنصر <httpModules> در فايل machine.config را مشاهده نمود. جدول زير مقدار پيش فرض عنصر <httpModules> را نشان مي دهد .

machine.Config: httpModules Section
Path : $WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG

<httpModules>
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/>
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/>
<add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/>
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/>
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule"/>
<add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</httpModules>

هندلرهاي HTTP ، نقطه پايان در ASP.NET HTTP pipeline مي باشند . مسئوليت HTTP handler ، توليد خروجي براي منبع درخواست شده است . براي صفحات ASP.NET ، اين به معني Rendering ، کنترل هاي وب به HTML و برگرداندن HTML مي باشد. براي يک سرويس وب ، مسئوليت فوق ، شامل اجراي متد مشخص شده و Wrapping مقاير برگردانده شده به يک پاسخ مناسب و با فرمت SOAP مي باشد . منابع متفاوت ASP.NET از هندلرهاي متفاوت HTTP استفاده مي نمايند.هندلرهاي پيش فرص استفاده شده ، توسط بخش <httpHandlers> فايل machine.config مشخص شده اند. بخش فوق، شامل کلاس هائي است که يا خود HTTP handler بوده و يا HTTP handler factories ، مي باشند. يک HTTP handler factory ، صرفا" يک نمونه از يک HTTP handler را پس از فراخواني ، برمي گرداند . جدول زير ، اطلاعات عنصر <httpHandlers> در فايل machine.config را نشان مي دهد .

machine.Config: httpHandlers Section
Path : $WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG

<httpHandlers>
<add verb="*" path="trace.axd" type="System.Web.Handlers.TraceHandler"/>
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>
<add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory"/>
. ...
<add verb="*" path="*.resources" type="System.Web.HttpForbiddenHandler"/>
<add verb="GET,HEAD" path="*" type="System.Web.StaticFileHandler"/>
<add verb="*" path="*" type="System.Web.HttpMethodNotAllowedHandler"/>
</httpHandlers>

لازم است به اين نکته اشاره گردد که امکان ايجاد HTTP modules و HTTP handler اختصاصي ، توسط طراحان وپياده کنندگان برنامه هاي وب ASP.NET نيز وجود دارد . پس از ايجاد ماژول ها و هندلرهاي HTTP ، مي توان آنان را به pipeline ملحق تا براي تمامي سايت هاي وب موجود بر سرويس دهنده وب ، قابل استفاده گردند. بدين منظور، مي توان تغييرات لازم را در فايل machine.config اعمال تا زمينه استفاده از آنان توسط تمامي برنامه هاي وب فراهم گردد . در اين رابطه مي توان تغييرات را در فايل Web.config نيز اعمال نمود، در چنين مواردي امکان استفاده از ماژول ها و هندلرهاي HTTP ايجاد شده ، صرفا" براي يک برنامه وب وجود خواهد داشت .

مرحله چهارم : توليد خروجي
آخرين مرحله درارتباط با پردازش يک صفحه ASP.NET بر روي سرويس دهنده وب ، شامل ايجاد خروجي مناسب است . خروجي فوق ، در ادامه از طريق ماژول هاي HTTP عبور داده شده تا مجددا" به IIS برسد . در نهايت IIS ، خروجي توليد شده را براي سرويس گيرنده متقاصي ارسال مي نمايد .مراحل لازم به منظور توليد خروجي با توجه به HTTP handler متفاوت بوده و در ادامه صرفا" يک حالت خاص آن را بررسي مي نمائيم ( هندلر HTTP که از آن به منظور rendering صفحات ASP.NET استفاده مي گردد).
سرويس دهنده وب (IIS) پس از دريافت درخواستي براي يک صفحه ASP.NET ( انشعاب فايل aspx.) ، آن را در اختيار موتور ASP.NET ، قرار خواهد داد. درخواست دريافتي در ادامه از بين ماژول ها عبور داده شده تا به PageHandlerFactory برسد ( در بخش <httpHandlers> فايل machin.config که قبلا" mapping آن انجام شده است ) .

machine.Config: httpHandlers Section :PageHandlerFactory
Path : $WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG

<httpHandlers>
...
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>
. ...
</httpHandlers>

کلاس PageHandlerFactory ، يک HTTP handler factory است که وظيفه آن ارائه نمونه اي از يک HTTP handlerبوده که قادر به برخورد مناسب با درخواست ارسالي است.مهمترين رسالت PageHandlerFactory ، يافتن کلاس ترجمه شده اي است که نشاندهنده صفحه ASP.NET درخواستي مي باشد. در صورتيکه از ويژوال استوديو دات نت به منظور ايجاد صفحات ASP.NET استفاده مي گردد ، صفحات وب از دو فايل جداگانه ( يک فايل با انشعاب aspx . ، شامل صرفا" کنترل هاي وب و تگ هاي HTML و يک فايل aspx.vb و يا aspx.cs شامل کلاس code-behind ( کد سمت سرويس دهنده ) ) ، تشکيل مي گردند. در صورتيکه از ويژوال استوديو دات نت استفاده نمي گردد ، مي توان از يک بلاک سمت سرويس دهنده <Script> استفاده تا کد سمت سرويس دهنده را درخود نگهداري نمايد . صرفنظر از اينکه از کدام رويکرد استفاده مي گردد ، زمانيکه صفحه ASP.NET اولين مرتبه و پس از ايجاد تغيير در تگ هاي HTML و يا محتوي کنترل وب ، مشاهده مي گردد ، موتور ASP.NET يک کلاس که مشتق شده از کلاس System.Web.UI.Page مي باشد را ايجاد مي نمايد . کلاس فوق بصورت اتوماتيک ايجاد و کمپايل مي گردد .
Page Class ، عمليات پياده سازي IhttpHandler را انجام خواهد داد. PageHandlerFactory ، در ادامه بررسي لازم در خصوص وجود يک نسخه کمپايل شده از صفحه ASP.NET درخواستي را انجام خواهد داد. در صورتيکه صفحه ترجمه شده وجود نداشته باشد ، PageHandlerFactory آن را بصورت پويا ايجاد و ترجمه خواهد کرد . کلاس فوق ، در ادامه متد خاصي را به منظور توليد HTML ، فرا مي خواند . اطلاعات توليد شده به فرمت HTML ، در نهايـت براي سرويس گيرنده ارسال مي گردد.وجود تاخير در مشاهده صفحات ASP.NET که بر روي آنان تغييراتي اعمال شده است ( HTML و يا محتوي کنترل وب) ، بدين دليل است که موتور ASP.NET نيازمند ايجاد و ترجمه مجدد کلاس مرتبط با صفحه ASP.NET مي باشد.

منبع : http://www.4guysfromrolla.com

پس از ايجاد و ترجمه کلاس توسط PageHandlerFactory ، امکان فراخواني کلاس ايجاد شده به منظور توليد HTML ، فراهم مي گردد . فرآيند Rendering که شامل بدست آوردن HTML لازم براي صفحه ASP.NET درخواست شده مي باشد از حوصله اين مقاله خارج بوده و مي توان در اين رابطه از مقاله The ASP.NET Page Object Model استفاده نمود .
منبع : http://www.4guysfromrolla.com

کيفيت مقاله :
عالی خوب متوسط ضعيف


فن آوري اطلاعات و ارتباطات چيست ؟ ( بخش اول ) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۴۹ مراجعه امروز
۴۹۶۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
فن آوري اطلاعات و ارتباطات چيست ؟ ( بخش اول )
نويسنده : شرکت سخا روش
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۲/۱/۱۳۸۳ اين مقاله ۳۸۰ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.

در پنجاه سال گذشته بروز تحولات گسترده در زمينه کامپيوتر و ارتباطات ، تغييرات عمده اي را در عرصه هاي متفاوت حيات بشري به دنبال داشته است . انسان همواره از فن آوري استفاده نموده و کارنامه حيات بشريت مملو از ابداع فن آوري هاي متعددي است که جملگي در جهت تسهيل زندگي انسان مطرح شده اند. در ساليان اخير ، فن آوري هاي اطلاعات و ارتباطات که از آنان به عنوان فن آوري هاي جديد و يا عالي ، ياد مي شود ، بيشترين تاثير را در حيات بشريت داشته اند . دنياي ارتباطات و توليد اطلاعات به سرعت در حال تغيير بوده و ما امروزه شاهد همگرائي آنان بيش از گذشته با يکديگر بوده ، بگونه اي که داده و اطلاعات به سرعت و در زماني غيرقابل تصور به اقصي نقاط جهان منتقل و در دسترس استفاده کنندگان قرار مي گيرد . بدون شک مهمترين و در عين حال بزرگترين پيشرفت در زمينه فن آوري اطلاعات و ارتباطات به ابداع "وب" توسط " تيم . برنرزلي " در اواخر سال 1980 در CERN ، برمي گردد . به منظور آشنائي با جايگاه واقعي "وب " ، کافي است به ضريب نفوذ آن پس از ابداع توجه گردد. پس از ابداع هر فن آوري ، مدت زماني بطول مي انجامد تا فن آوري مورد نظر در مقياس عمومي مورد استفاده قرار گيرد( ضريب نفوذ) . مثلا" تلفن پس از 74 سال ، راديو پس از 38 سال ، کامپيوترهاي شخصي پس از 16 سال ، تلويزيون پس از 13 سال و "وب " پس از 4 سال ، موفق به جذب پنجاه ميليون استفاده کننده شده اند .
فن آوري اطلاعات و ارتباطات ، بدون شک تحولات گسترده اي را در تمامي عرصه هاي اجتماعي و اقتصادي بشريت به دنبال داشته و تاثير آن بر جوامع بشري بگونه اي است که جهان امروز به سرعت در حال تبديل به يک جامعه اطلاعاتي است . جامعه اي که در آن دانائي و ميزان دسترسي و استفاده مفيد از دانش ، داراي نقشي محوري و تعيين کننده است .
شايد تاکنون سوالات متعددي در رابطه با فن آوري اطلاعات و ارتباطات براي شما مطرح شده باشد:

فن آوري اطلاعات و ارتباطات چيست ؟
تفاوت فن آوري اطلاعات با فن آوري اطلاعات و ارتباطات چيست ؟
آيا انباشت سخت افزار و يا نرم افزار ، دستيابي به اينترنت و تعداد تلفن هاي سلولي ، نشان دهنده استفاده از فن آوري اطلاعات و ارتباطات مي باشد؟

ضريب نفوذ اطلاعات و دانش در يک جامعه به چه ميزان است و جايگاه فن آوري اطلاعات و ارتباطات در اين زمينه چيست ؟
جايگاه ابزارها ، اهداف ، زيرساخت ها و عوامل انساني در فن آوري اطلاعات و ارتباطات چيست ؟ آيا مي شود يک ابزار را به عنوان يک هدف مطرح و آن را به عنوان يکي از شاخص هاي استفاده از فن آوري اطلاعات و ارتباطات مورد توجه قرار داد ؟

چرا با اين که سال هاي زيادي است که از سخت افزار و يا نرم افزار استفاده مي شود ، از چنين واژه اي تاکنون استفاده نمي گرديد، به عبارت ديگر استفاده از واژه "فن آوري اطلاعات و ارتباطات " در عصر حاضر نشاندهنده چه واقعيتي است ؟

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

اطلاعات و دانش
تعاريف متفاوت اطلاعات ( Information ) از زواياي مختلف :

تعريف اطلاعات از لحاظ نظري : اطلاعات ( Information ) به هر نوع داده جمع آوري شده با استفاده از روش هاي مختلفي نظير : مطالعه ، مشاهده ، شايعه و ساير موارد ديگر اطلاق مي گردد. در واژه "اطلاعات" ، بار معنائي از قبل تعريف شده اي در رابطه با کيفيت ، معتبر بودن و يا صحت داده وجود نداشته و امکان برخورد با اطلاعات معتبر ، غيرمعتبر ، واقعي ، نادرست ، صحيح و گمراه کننده ، وجود خواهد داشت .

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

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

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

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

کيفيت مقاله :
عالی خوب متوسط ضعيف


کارت شناسائي بيومتريک ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۵۲ مراجعه امروز
۴۹۶۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
کارت شناسائي بيومتريک
نويسنده : شرکت سخا روش
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۲/۱/۱۳۸۳ اين مقاله ۳۱۸ بار مطالعه شده است
۰ نفر تا به حال به اين مقاله رای داده اند.

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

مزاياي کارت هاي شناسائي بيومتريک

اطلاعات بر روي کارت هاي شناسائي بصورت ديجيتال و با استفاده از مدل رمزنگاري کليد عمومي RSA ، رمز و در يک کد ميله اي ( Bar code ) ، ذخيره مي گردد. در زمان بررسي کارت شناسائي ، پيوستگي و صحت اطلاعات موجود بر روي کارت بر اساس محتوي کدميله اي بررسي خواهد شد .

کارت هاي شناسائي بيومتريک مي توانند بر روي رسانه هاي فيزيکي نظير کاغذ معمولي و يا پلاستيک ، چاپ گردند. در اين راستا به ويژگي و يا پتناسيل هاي اضافه اي نياز نبوده و قيمت آنان مقرون به صرفه خواهد بود.

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

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

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

کارت هاي شناسائي بيومتريک چگونه کار مي کنند ؟
سيستم کارت شناسائي بيومتريک ارائه شده توسط مايکروسافت داراي دو فرآيند مختلف براي ايجاد و بررسي ، مي باشد. در ادامه به بررسي هر يک از فرآيندهاي فوق ، خواهيم پرداخت .

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

عکس صاحب کارت شناسائي

اطلاعات متني ( Texttual ) در رابطه با دارنده کارت که نوع آنان بستگي به نوع کارت شناسائي دارد . مثلا" در يک گواهينامه رانندگي ، اطلاعاتي نظير نام ، نام خانوادگي ، تاريخ تولد ، ويژگي هاي فيزيکي دارنده کارت نظير قد ، رنگ مو و چشم ، ذخيره مي گردد .

برخي اطلاعات متني در رابطه با مرکز صادر کننده کارت شناسائي که داراي مجوز انجام اين کار مي باشد .

پس از تغذيه اطلاعات فوق به سيستم ، نرم افزار ايجاد کارت شناسائي بيومتريک عمليات زير را انجام خواهد داد :

ايجاد يک مقدار Hash رمزنگاري شده از اطلاعات متني با استفاده از الگوريتم هاي استانداردي نظير SHA1

فشرده سازي ويژگي هاي تصوير با توجه به عکس موجود بر روي کارت ( پارامترهائي که بر اساس آن منحصربفرد بودن عکس تضمين گردد )

تائيد ديجيتالي Hash و ويژگي هاي فشرده شده مربوط به تصوير با استفاده از کليد خصوصي مرکز صادرکننده کارت شناسائي

ايجاد يک کد ميله اي که شامل اطلاعات مرحله قبل است .

چاپ تصوير ، اطلاعات متني و کد ميله اي بر روي کارت شناسائي

شکل زير مراحل ايجاد يک کارت شناسائي بيومتريک را نشان مي دهد :

بررسي صحت کارت شناسائي بيومتريک
براي بررسي کارت شناسائي بيومتريک ، کارت از طريق اسکنر متصل شده به کامپيوتر که بر روي آن نرم افزار کارت شناسائي بيومتريک مايکروسافت نصب شده است ، اسکن ودر ادامه نرم افزار مربوطه مراحل زير را به منظور تائيد کارت شناسائي انجام خواهد داد :

پويش ( اسکن ) ، سه عنصر تصوير ، متن و کد ميله اي موجود بر روي کارت شناسائي

ايجاد مقدار Hash بر اساس اطلاعات متني موجود بر روي کارت

بررسي امضاي ديجيتال در کد ميله اي با استفاده از کليد عمومي صادر کننده کارت شناسائي

شکل زير مراحل بررسي يک کارت شناسائي بيومتريک را نشان مي دهد :

کيفيت مقاله :
عالی خوب متوسط ضعيف


ذخيره و بازيابي داده توسط ADO.NET (بخش اول) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۰۶ مراجعه امروز
۵۳۲۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
ذخيره و بازيابي داده توسط ADO.NET (بخش اول)
نويسنده : شرکت سخا روش
موضوع : .NET [image] نسخه قابل چاپ
تاريخ نشر : ۲۲/۱/۱۳۸۳ اين مقاله ۱۷۰۷ بار مطالعه شده است
۱۵ نفر تا به حال به اين مقاله رای داده اند.

با استفاده از ADO.NET ، امکان اتصال به منابع داده متفاوت ، بازيابي ، پردازش و بهنگام سازي داده ، فراهم مي گردد . ADO.NET از XML به منظور انتقال داده بين برنامه ها و منابع داده استفاده مي نمايد .ويژوال استوديو دات نت داراي امکانات متعددي به منظور دستيابي به بانک هاي اطلاعاتي (برخاسته از ADO.NET ) ، مي باشد. پس از اتصال به يک بانک اطلاعاتي مي توان با استفاده از مجموعه اي از اشياء ، خصلت ها و متدها ، صرفنظر از نوع بانک اطلاعاتي ، عمليات مورد نظر خود در ارتباط با يک بانک اطلاعاتي را انجام داد. در اين مقاله به بررسي امکانات ويژوال استوديو دات نت به منظور اتصال به يک بانک اطلاعاتي و انجام عمليات متفاوتي همچون خواندن ، تغيير و حذف رکوردهاي موجود در يک بانک اطلاعاتي ، خواهيم پرداخت .

مباني اوليه ADO.NET
به منظور دستيابي به داده در ADO.NET ، سه لايه وجود دارد :

محل فيزيکي ذخيره سازي داده : لايه فوق مي تواند يک بانک اطلاعاتي OLE ، يک بانک اطلاعاتي SQL و يا يک فايل XML باشد .

ارائه دهنده داده : لايه فوق ، شامل شي Connection و اشياء Command بوده و تصويري از داده ها را در حافظه ايجاد مي نمايد.

Data set : لايه فوق ، رکوردهاي بازيابي شده از يک منبع داده را در خود نگهداري مي نمايد. يک Data Set شامل رکوردهائي از يک و يا چندين جدول مي باشد .

لايه ارائه دهنده داده ، واسطه بين محل ذخيره سازي داده و Data Set ، مي باشد .Data Set مستقل از منبع داده است .

در ADO.NET از دو نوع Connection به منظور اتصال به يک بانک اطلاعاتي ( با توجه به نوع بانک اطلاعاتي ) استفاده مي گردد :

شي OleDbConnection که از آن به منظور ارتباط به يک بانک اطلاعاتي محلي استفاده مي گردد. اين نوع ارتباطات از شي OleDbDataAdapter به منظور اجراي دستورات و برگرداندن داده استفاده مي نمايند .

شي SqlDbConnection که از آن به منظورارتباط به يک بانک اطلاعاتي سرويس دهنده ، استفاده مي گردد.اين نوع ارتباطات از شي SqlDbDataAdapter به منظور اجراي دستورات و برگرداندن داده استفاده مي نمايند .

علاوه بر موارد فوق ، امکان دستيابي مستقيم به فايل هاي XML با استفاده از متدهاي ReadXML و WriteXML مربوط به شي DataSet ، نيز وجود دارد.
اشياء ، خصلت ها و متدهاي حمايت شده توسط ADO.NET توسط سه namespace ارائه مي گردد :

System.Data : در اين namespace کلاس ها ، نوع ها و سرويس هاي لازم به منظور ايجاد و دستيابي به data set و اشياء زير مجموعه آن وجود دارد .

System.Data.SqlClient : در اين namespace کلاس ها و نوع هاي لازم به منظور دستيابي به بانک هاي اطلاعاتي SQL Server ، وجود دارد.

System.Data.OleDb : در اين namespace کلاس ها و نوع هاي لازم به منظور دستيابي به بانک هاي اطلاعاتي OLE ، وجود دارد .

در زمان دستيابي و استفاده از بانک هاي اطلاعاتي ( از طريق کد نوشته شده ) ، مي بايست از عبارت Imports در ابتداي ماژول استفاده گردد .

VB.NET

Imports System.Data
Imports System.Data.SqlClient 'For SQL database Connection
Imports System.Data.OleDb 'For OLE DB database Connection

به منظور دستيابي داده از طريق ADO.NET ، مراحل زير را دنبال مي نمائيم :

ايجاد ارتباط با بانک اطلاعاتي توسط يک شي Connection

فراخواني يک command به منظور ايجاد يک Dataset با استفاده از يک شي adapter

استفاده از شي DataSet (در کد نوشته شده ) ، به منظورنمايش داده و يا تغيير آيتم هاي موجود در بانک اطلاعاتي

فراخواني يک Command به منظور بهنگام سازي بانک اطلاعاتي از طريق DataSet با استفاده از يک شي adapter

غير فعال نمودن ( Close ) ارتباط ايجاد شده با بانک اطلاعاتي در صورتيکه ارتباط با بانک اطلاعاتي توسط متد Open فعال شده باشد .

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

ارتباط با بانک اطلاعاتي
با استفاده از Server Explorer در ويژوال استوديو دات نت ، امکان ايجاد يک ارتباط با بانک اطلاعاتي فراهم مي گردد. در اين رابطه مراحل زير را دنبال مي نمائيم (در حالت Design ) :

فعال نمودن Server Explorer ( از طريق View|Server Explorer )

در Server Explorer ، گزينه Connect To Database را انتخاب مي نمائيم .در ادامه جعبه محاوره اي DataLink Properties نمايش داده مي شود.

از طريق Provider Tab ، نوع بانک اطلاعاتي را مشخص مي نمائيم . به صورت پيش فرض ، OLE DB Provider for SQL Server انتخاب شده است . در صورتيکه بانک اطلاعاتي تحت SQL Server اجراء مي گردد ، انتخاب پيش فرض درست مي باشد . به منظور دستيابي به يک نوع ديگر بانک اطلاعاتي ، مي بايست Provider مربوطه را انتخاب نمود. مثلا" براي دستيابي به يک بانک اطلاعاتي اکسس ، Micosoft Jet 4.0 OLE DB انتخاب مي گردد .

از طريق Connection Tab ، بانک اطلاعاتي مورد نظري که قصد برقراري ارتباط با آن وجود دارد را انتخاب مي نمائيم

پس از اعمال تنظيمات لازم با کليک نمودن بر روي دکمه Test Connection ، مي توان از صحت تنظيمات انجام شده ، اطمينان حاصل نمود .پس از تست موفقيت آميز ارتباط ايجاد شده با بانک اطلاعاتي ، ويژوال استوديو دات نت ، ارتباط ايجاد شده را به Server Explorer اضافه مي نمايد .

با کليک نمودن بر روي علامت "+" ، آيتم هاي مربوط به بانک اطلاعاتي نمايش داده خواهند شد . براي مشاهده جداول ، مي توان آيتم هاي مربوطه را تحت Data Connection فعال و در ادامه از طريق Table و فعال نمودن آن ، جداول مربوط به بانک اطلاعاتي را مشاهده نمود.

براي افزودن يک آيتم به برنامه ، از طريق Sever Explorer آن را انتخاب و بر روي فرم وب قرار مي دهيم . در مواردي که يک جدول بر روي فرم وب مستقر مي گردد ، ويژوال استوديو دات نت ، اشياء Connection و adapter را به همراه تنظيمات مناسب ، ايجاد مي نمايد.

ايجاد يک Data Set
با استفاده از اشياء Connection و Adapter ( ايجاد شده در بخش قبل )، مي توان يک Data set را ايجاد نمود. براي ايجاد يک Data set پس از استقرار در حالت Design ، مراحل زير را دنبال مي نمائيم .

بر روي شي adapter کليک سمت راست نموده و گزينه Generate Dataset را انتخاب مي نمائيم . ويژوال استوديو در ادامه ، جعبه محاوره اي Generate Dataset را نمايش خواهد داد .

جداول مورد نظر را براي اضافه نمودن به Data set انتخاب کرده و در ادامه بر روي دکمه Ok کليک مي نمائيم . ويژوال استوديو يک Data set جديد راايجاد و آن را به فرم وب اضافه مي نمايد .

براي مشاهده داده موجود در Data set ، ( در حالت Desgin ) برروي شي DataSet کليک سمت راست نموده و گزينه View Schema را انتخاب مي نمائيم . در ادامه Data Set در پنجره XML Designer نمايش داده مي شود .

نمايش يک Data set
براي نمايش يک Data Set بر روي يک فرم وب و در زمان اجراء ، مراحل زير را دنبال مي نمائيم :

افزودن يک کنترل بر روي فرم وب به منظور نمايش داده . مثلا" مي توان يک کنترل DataGrid را به فرم وب اضافه نمود .

انتخاب Data set به عنوان منبع داده براي کنترل . مثلا" براي کنترل DataGrid ، گزينه Property Builder را از طريق پنجره Properties انتخاب و DataSource آن را به شي Dataset نسبت داده و خصلت DataMember را به يک جدول در Data Set نسبت مي دهيم .

ستون هاي مورد نظر براي نمايش در کنترل را مشخص مي نمائيم . براي کنترل DataGrid ، برروي آيتم Columns کليک نموده ( از طريق جعبه محاوره اي Properties ) و گزينه Create Columns Automaticlly At Run Time را غير فعال نموده ( Deselect ) و در ادامه ستون هاي مورد نظر براي نمايش را از طريق Available Columns list ، اضافه مي نمائيم .( در اين مثال ، ستون هاي نام و آدرس پست الکترونيکي اضافه شده اند ) .

اضافه نمودن کد لازم در روتين مربوط به رويداد Page_Load به منظور پر نمودن Data set از طريق Data Adapter و نسبت دهي داده از طريق شي DataSet براي کنترل . مثلا" کد زير باعث نمايش داده در کنترل DataGrid ( ايجاد شده در مرحله قبل ) مي نمايد .

VB.NET

Private Sub Page_Load (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Mybase.Load
SqlDataAdapter1.Fill ( SrcoDataSet11)
DataGrid1.DataBind ( )
End Sub

پس از اجراي برنامه و لود شدن صفحه ، Dataset نمايش داده مي شود .

با توجه به اين که پر نمودن Data set و نسبت دهي داده به کنترل DataGrid از طريق رويداد Page_Load انجام مي شود ، ضرورتي به نگهداري اطلاعات وضعيت براي کنترل DataGrid وجود نخواهد داشت . با مقداردهي خصلت EnableViewState به False ، کارائي برنامه بهبود مي يابد.

تغيير رکوردها در يک بانک اطلاعاتي
DataSet يک شي اصلي و مهم در ADO.NET بوده و هرگونه تغييرات شامل افزودن ، حذف و يا تغيير رکوردهاي موجود در يک بانک اطلاعاتي عموما" از طريق شي فوق، انجام مي شود . براي تغيير رکوردها از طريق يک DataSet مراحل زير را دنبال مي نمائيم .

دستيابي به شي Dataset ( مشابه روشي که به آن اشاره گرديد)

تغيير DataSet

بهنگام سازي بانک اطلاعاتي از طريق DataSet توسط فراخواني متد Update مربوط به شي Adapter

از مجموعه هاي Tables,Rows و Columns براي دستيابي به داده موجود در يک DataSet استفاده مي گردد . در بخش دوم اين مقاله با نحوه استفاده از مجموعه هاي فوق به منظور ويرايش يک بانک اطلاعاتي ، آشنا خواهيم شد.

کيفيت مقاله :
عالی خوب متوسط ضعيف


با کرم Mydoom بيشتر آشنا شويم ! ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۵۵ مراجعه امروز
۴۹۷۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
با کرم Mydoom بيشتر آشنا شويم !
نويسنده : شرکت سخا روش
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۲/۱/۱۳۸۳ اين مقاله ۳۰۲ بار مطالعه شده است
۳ نفر تا به حال به اين مقاله رای داده اند.

در ساعت نه روز چهارشنبه 28 ژانويه 2004 مطابق با هشتم بهمن 1382 ، شرکت مايکروسافت بررسي لازم در خصوص گزارشات دريافتي مبني بر شيوع يک کرم جديد با نام Mydoom و يا Novarg شناخته شده با نام Mydoom.B را آغاز نمود. بر اساس گزارشات دريافتي ، کرم فوق امکان دستيابي به برخي وب سايت ها نظير تعدادي از وب سايت هاي مايکروسافت را سلب مي نمايد . کرم فوق ، تلاش مي نمايد که گيرندگان نامه هاي الکترونيکي را گمراه و آنان را تشويق به باز نمودن پيامي نمايد که داراي يک فايل ضميمه است . در صورت فعال شدن فايل ضميمه ، کرم Mydoom.B ، کدهاي مخرب را بر روي کامپيوتر کاربر نصب و نسخه اي از خود را براي تمامي افراد موجود در ليست دفترچه آدرس کاربر ، ارسال مي نمايد . محصولاتي که متاثر از کرم فوق مي باشند ، عبارتند از :

Microsoft Outlook

Microsoft Outlook Express

Web-based e-mail programs

نحوه حفاظت در مقابل کرم MyDoom
در صورتيکه براي شما يک نامه الکترونيکي ارسال شده است که داراي فايلي ضميمه مي باشد ( خصوصا" اگر داراي انشعاب Zip . باشد ) ، فايل ضميمه را فعال ننمائيد . در صورت عدم اطمينان از ايمن بودن فايل ضميمه ( عدم دريافت تائيديه لازم از ارسال کننده نامه الکترونيکي ) ، بلافاصله پيام را حذف نمائيد . به منظور بلاک نمودن ضمائم مضر در نامه هاي الکترونيکي ، آخرين نسخه هاي بهنگام شده Outlook و Outlook Express را دريافت و بر روي سيستم خود نصب نمائيد :

در صورتيکه از Outlook 2003 استفاده مي نمائيد ، با نوع ضمائمي که در OutLook 2003 بلاک شده اند ، آشنا شويد .

در صورتيکه از Outlook 2002 استفاده مي نمائيد ، آخرين Office service packs را دريافت و با نوع ضمائمي که در OutLook 2002 بلاک شده اند ، آشنا شويد .

در صورتيکه از Outlook 2000 استفاده مي نمائيد ، آخرين Office service packs را دريافت و نصب نمائيد .

در صورتيکه از Outlook Express 6 استفاده مي نمائيد ، با امکانات موجود به منظور حفاظت در مقابل ويروس ها آشنا شويد .

درصورتيکه از نسخه هاي قديمي Outlook Express استفاده مي نمائيد ، آخرين نسخه IE که شامل آخرين نسخه Outlook Express نيز مي باشد را دريافت وبر روي سيستم خود نصب نمائيد .

در صورتيکه براي دستيابي به نامه هاي الکترونيکي خود از يک صفحه وب نظير Hotmail استفاده مي نمائيد ، يک فايروال را بر روي سيستم خود نصب نموده و مراحل سه گانه ارائه شده به منظور حفاظت کامپيوتر را دنبال نمائيد.

نحوه تشخيص آلودگي سيستم

در صورتيکه از Windows XP استفاده مي نمانيد :

گزينه Search را از طريق منوي Start انتخاب نمائيد .

در بخش ? What do you want to search for ، گزينه All files and folders را انتخاب نمائيد ( کليک ) .

در بخش All or part of the file name ، عبارت ctfmon.dll را تايپ نمائيد . در صورتيکه فايل بر روي کامپيوتر موجود باشد ، کاميپوتر آلوده به کرم Mydoom.B بوده و مي بايست مراحل لازم به منظور برخورد با آن دنبال گردد. در صورتيکه فايل فوق موجود نباشد ، سيستم آلوده به کرم Mydoom.B نمي باشد .

در صورتيکه از ويندوز NT 4.0 و يا ويندوز 2000 استفاده مي نمائيد :

گزينه Run را از طريق منوي Start انتخاب نمائيد .

دستور Cmd را تايپ نمائيد .

پس از نمايش پنجره Command Prompt ، دستور dir ctfmon.dll/a/s را تايپ و کليد Enter را فعال نمائيد .

در صورتيکه پس از اجراي دستور فوق ، اعلام شود که File Not Found ، کامپيوتر آلوده به کرم Mydoom.B نمي باشد . در صورتيکه فايل فوق پيدا شده و اندازه آن نمايش داده شود ، کامپيوتر آلوده به کرم Mydoom.B بوده و مي بايست مراحل لازم به منظور برخورد با آن دنبال گردد.

در صورتيکه از ويندوز 95 و يا 98 استفاده مي نمائيد :

گزينه Run را از طريق منوي Start انتخاب نمائيد .

دستور Command را تايپ نمائيد .

پس از نمايش پنجره Command Prompt ، دستور dir ctfmon.dll/a/s را تايپ و کليد Enter را فعال نمائيد .

در صورتيکه پس از اجراي دستور فوق ، اعلام شود که File Not Found ، کامپيوتر آلوده به کرم Mydoom.B نمي باشد . در صورتيکه فايل پيدا شده و اندازه آن نمايش داده شود ، کامپيوتر آلوده به کرم Mydoom.B بوده و مي بايست مراحل لازم به منظور برخورد با آن دنبال گردد.

شکل زير ماحصل اجراي دستور dir ctfmon.dll/a/s را بر روي يک سيستم آلوده به کرم Mydoom نشان مي دهد .

نحوه برخورد در صورت آلودگي سيستم
در صورتيکه کامپيوتر آلوده به کرم Mydoom.B است، در ابتدا سعي نمائيد از وب سايت هاي عرضه کنندگان نرم افزارهاي آنتي ويروس ، آخرين Update مربوطه را دريافت و بر روي سيستم نصب نمائيد. در صورتيکه امکان فوق وجود نداشته باشد ، مي توان مراحل زير را به منظور حذف کرم Mydoom.B ، دنبال نمود :

گزينه Run را از طريق منوي Start انتخاب نمائيد .

دستور Cmd را تايپ نمائيد .

پس از نمايش پنجره Command Prompt ، دستورات زير را به ترتيب تايپ نمائيد :

del /F %systemroot%\system32\drivers\etc\hosts

ENTER

echo # Temporary HOSTS file >%systemroot%\system32\drivers\etc\hosts

ENTER

attrib +R %systemroot%\system32\drivers\etc\hosts

ENTER

پس از تايپ دستورات فوق ، يکي از مراحل زير با توجه به نسخه ويندوز نصب شده بر روي سيستم ، انجام دهيد :
در صورتيکه از ويندوز NT 4.0 استفاده مي نمائيد ، سيستم را restart نمائيد.
در صورتيکه از ويندوز XP و يا 2000 استفاده مي نمائيد ، سيستم restart نگردد و در مقابل دستور Ipconfig/flushdns را تايپ و اجراء نمايد .

براي کسب اطلاعات بيشتر و دريافت آخرين نسخه برنامه هاي ويروس ياب ، از آدرس هاي زير استفاده نمائيد :

McAfee
Trend Micro
Symantec
Computer Associates

کيفيت مقاله :
عالی خوب متوسط ضعيف


كامل ترين مرجع خطاهاي مودم(1) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۵۸ مراجعه امروز
۴۹۷۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كامل ترين مرجع خطاهاي مودم(1)
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۲/۱۳۸۳ اين مقاله ۹۶۲ بار مطالعه شده است
۱۴ نفر تا به حال به اين مقاله رای داده اند.
600 . اگر سيستم در حال شماره گيري باشد و دوباره شماره گيري نماييد اين خطا نمايش داده مي شود .

601 . راه انداز Port بي اعتبار مي باشد .

602 . Port هم اكنون باز مي باشد براي بسته شدن آن بايد كامپيوتر را مجددا راه اندازي نمود.

603 . بافر شماره گيري بيش از حد كوچك است .

604 . اطلاعات نادرستي مشخص شده است .

605 . نمي تواند اطلاعات Port را تعيين كند .

606 . Port شناسايي نمي شود .

607 . ثبت وقايع مربوط به مودم بي اعتبار مي باشد .

608 . راه انداز مودم نصب نشده است .

609 . نوع راه انداز مودم شناسايي نشده است .

610 . بافر ندارد .

611 . اطلاعات مسير يابي غير قابل دسترس مي باشد .

612 . مسير درست را نمي تواند پيدا نمايد .

613 . فشرده سازي بي اعتباري انتخاب شده است .

614 . سرريزي بافر .

615 . Port پيدا نشده است .

616 . يك درخواست ناهمزمان در جريان مي باشد .

617 .Port يا دستگاه هم اكنون قطع مي باشد .

618 . Port باز نمي شود. ( وقتي رخ مي دهد كه يك برنامه از Port استفاده كند ).

619 . Port قطع مي باشد (وقتي رخ مي دهد كه يك برنامه از Port استفاده كند).

620 . هيچ نقطه پاياني وجود ندارد .

621 . نمي تواند فايل دفتر راهنماي تلفن را باز نمايد .

622 . فايل دفتر تلفن را نمي تواند بارگذاري نمايد .

623 . نمي تواند ورودي دفتر راهنماي تلفن را بيابد .

624 . نمي توان روي فايل دفتر راهنماي تلفن نوشت .

625 . اطلاعات بي اساسي در دفتر راهنماي تلفن مشاهده مي شود .

626 . رشته را نمي تواند بارگذاري كند .

627 . كليد را نمي تواند بيابد .

628 . Port قطع شد .

629 . Port بوسيله دستگاه راه دور قطع مي شود. (درست نبودن راه انداز مودم با برنامه ارتباطي).

630 . Port به دليل از كارافتادگي سخت افزار قطع مي شود .

631 . Port توسط كاربر قطع شد .

632 . اندازه ساختار داده اشتباه مي باشد .

633 . Port هم اكنون مورد استفاده مي باشد و براي Remote Access Dial-up پيكر بندي نشده است (راه انداز درستي بر روي مودم شناخته نشده است) .

634 . نمي تواند كامپيوتر شما را روي شبكه راه دور ثبت نمايد .

635 . خطا مشخص نشده است .

636 . دستگاه اشتباهي به Port بسته شده است .

637 . رشته ( string ) نمي تواند تغيير يابد .

638 . زمان درخواست به پايان رسيده است .

639 . شبكه ناهمزمان قابل دسترس نيست .

640 . خطاي NetBIOS رخ داده است .

641 . سرور نمي تواند منابع NetBIOS مورد نياز براي پشتيباني سرويس گيرنده را بدهد .

642 . يكي از اسامي NetBIOS شما هم اكنون روي شبكه راه دور ثبت مي گردد ، ( دو كامپيوتر مي خواهند با يك اسم وارد شوند ) .

643 .Dial-up adaptor در قسمت network ويندوز وجود ندارد .

644 . شما popus پيغام شبكه را دريافت نخواهيد كرد .

645 . Authentication داخلي اشكال پيدا كرده است.

646 . حساب در اين موقع روز امكان log on وجود ندارد .

647 . حساب قطع مي باشد .

648 . اعتبار password تمام شده است .

649 . حساب اجازه Remote Access را ( دستيابي راه دور ) را ندارد . ( به نام و كلمه عبور اجازه dial-up داده نشده است ) .

650 . سرور Remote Access ( دستيابي راه دور ) پاسخ نمي دهد .

651 . مودم شما ( يا ساير دستگاههاي اتصال دهنده ) خطايي را گزارش كرده است . ( خطا از طرف مودم بوده است ) .

652 . پاسخ نا مشخصي از دستگاه دريافت مي گردد .

653 . Macro (دستورالعمل كلان). ماكرو خواسته شده توسط راه انداز در ليست فايل .INF موجود نمي باشد .

654 . يك فرمان يا يك پاسخ در قسمت .INF دستگاه به يك ماكرو نامشخص اشاره مي نمايد .

655 . دستور العمل (پيغام) در قسمت فايل .INF دستگاه مشاهده نمي شود .

656 . دستورالعمل (ماكرو) (default off) در فايل .INF دستگاه شامل يك دستور العمل نامشخص مي باشد .

657 . فايل .INF دستگاه نمي تواند باز شود .

658 . اسم دستگاه در فايل .INF دستگاه يا در فايل .INI رسانه بيش از حد طولاني مي باشد .

659 . فايل .INI رسانه به نام ناشناخته يك دستگاه اشاره مي نمايد .

660 . فايل .INI رسانه براي اين فرمان پاسخي را ندارد .

661 . فايل .INF دستگاه فرمان را از دست داده است .

662 . تلاش براي قرار دادن يك ماكرو ليست نشده در قسمت فايل .INF صورت نگرفته است.

663 . فايل .INI رسانه به نوع ناشناخته يك دستگاه اشاره مي نمايد .

664 . نمي تواند به حافظه اختصاص دهد .

665 . Port براي Remote Access (دستيابي راه دور) پيكر بندي نشده است.

666 . مودم شما (ياساير دستگاههاي اتصال دهنده) در حال حاضر كار نمي كنند .

667 . فايل .INI رسانه را نمي تواند بخواند .

668 . اتصال از بين رفته است .

669 . پارامتر به كار برده شده در فايل .INI رسانه بي اعتبار مي باشد .

670 . نمي تواند نام بخش را از روي فايل .INI رسانه بخواند .

671 . نمي تواند نوع دستگاه را از روي فايل .INI رسانه بخواند .

672 . نمي تواند نام دستگاه را از روي فايل .INI رسانه بخواند .

673 . نمي تواند كاربر را از روي فايل .INI رسانه بخواند .

674 . نمي تواند بيشترين حد اتصال BPS را از روي فايل .INI رسانه بخواند .

675 . نمي تواند بيشترين حد BPS حامل را از روي فايل .INI رسانه بخواند .

676 . خط اشغال مي باشد .

677 . شخص به جاي مودم پاسخ مي دهد .

678 . پاسخي وجود ندارد .

679 . نمي تواند عامل را پيدا نمايد .

680 . خط تلفن وصل نيست .

681 . يك خطاي كلي توسط دستگاه گزارش مي شود .

682 . Writing section name دچار مشكل مي باشد .

683 . Writing device type با مشكل روبرو شده است .

684writing device name .684 با مشكل روبرو مي باشد .

685 . Writing maxconnectbps مشكل دارد .

686 . Writing maxcarrierBPS دچار مشكل مي باشد .

687 . Writing usage با مشكل مواجه است .

688 . Writing default off دچار مشكل مي باشد .

689 . Reading default off با مشكل مواجه است .

690 . فايل INI خالي ست .

691 . دسترسي صورت نمي پذيرد زيرا نام و كلمه عبور روي دامين بي اعتبار مي باشد

692 . سخت افزار در درگاه يا دستگاه متصل شده از كار افتاده است .

693 . Binary macro با مشكل مواجه مي باشد .

694 . خطاي DCB يافت نشد .

695 . ماشين هاي گفتگو آماده نيستند .

696 . راه اندازي ماشين هاي گفتگو با مشكل روبرو مي باشد .

697 . Partial response looping با مشكل روبرو مي باشد .

698 . پاسخ نام كليدي در فايل INF . دستگاه ، در فرمت مورد نظر نمي باشد .

699 . پاسخ دستگاه باعث سر ريزي بافر شده است .

700 . فرمان متصل به فايل INF . دستگاه بيش از حد طولاني مي باشد .

701 . دستگاه به يك ميزان BPS پشتيباني نشده توسط گرداننده com تغيير مي يابد .

702 . پاسخ دستگاه دريافت مي گردد زماني كه هيچكس انتظار ندارد .

703 . در فعاليت كنوني مشكلي ايجاد شده است .

704 . شماره اشتباه callback .

705 . مشكل invalid auth state .

706 . Invalid auth state دچار مشكل مي باشد .

707 . علامت خطاياب . x. 25

708 . اعتبار حساب تمام شده است .

709 . تغيير پسورد روي دامين با مشكل روبرو مي باشد .

710 . در زمان ارتباط با مودم شما خطاهاي سري يش از حد اشباع شده مشاهده مي گردد.

711 . Rasman initialization صورت نمي گيرد گزارش عملكرد را چك كنيد

712 . درگاه Biplex در حال اجرا مي باشد . چند ثانيه منتظر شويد و مجددا شماره بگيريد .

713 . مسيرهاي ISDN فعال در خط اصلي قطع مي باشد .

714 . كانال هاي ISDN كافي براي ايجاد تماس تلفني در دسترس نمي باشند .

715 . به دليل كيفيت ضعيف خط تلفن خطاهاي فراواني رخ مي دهد .

716 . پيكر بندي remote access IP غير قابل استفاده مي باشد .

717 . آدرسهاي IP در static pool remote access IP وجود ندارد .

718 . مهلت بر قراري تماس PPP پايان پذيرفته است .

719 . PPP توسط دستگاه راه دور پايان مي يابد .

720 . پروتكل هاي كنترلppp پيكر بندي نشده اند .

721 . همتاي PPP پاسخ نمي دهد .

722 . بسته PPPبي اعتبار مي باشد .

723 . شماره تلفن از جمله پيشوند و پسوند بيش از حد طولا ني مي باشد .

724 . پروتكل IPXنمي تواند بر روي درگاه dial –out نمايد زيرا كامپيوتر يك مسير گردان IPX مي باشد .

725 . IPX نمي تواند روي port (درگاه) dial – in شود زيرا مسير گردان IPX نصب نشده است .

726 . پروتكل IPX نمي تواند براي dial – out ، روي بيش از يك درگاه در يك زمان استفاده شود .

727 . نمي توان به فايل TCPCFG . DLL دست يافت .

728 . نمي تواند آداپتور IP متصل به remote access را پيدا كند .

729 . SLIP استفاده نمي شود مگر اينكه پروتكل IP نصب شود .

730 . ثبت كامپيوتر كامل نمي باشد .

hooronline

کيفيت مقاله :
عالی خوب متوسط ضعيف


كامل ترين مرجع خطاهاي مودم(2) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۶۱ مراجعه امروز
۴۹۷۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كامل ترين مرجع خطاهاي مودم(2)
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۲/۱۳۸۳ اين مقاله ۷۳۸ بار مطالعه شده است
۵ نفر تا به حال به اين مقاله رای داده اند.
731 . پروتكل پيكر بندي نمي شود .

732 . توافق بين PPP صورت نگرفته است .

733 . پروتكل كنترل PPP براي پروتكل اين شبكه ، در سرور موجود نمي باشد .

734 . پروتكل كنترل لينك PPP خاتمه يافته است .

735 . آدرس مورد نياز توسط سرور رد مي شود .

736 . كامپيوتر راه دور پروتكل كنترل را متوقف مي نمايد .

737 . نقطه برگشت ( LOOPBACK DETECTED ) شناسايي شد .

738 . سرور آدرس را مشخص نمي كند .

739 . سرور راه دور نمي تواند از پسورد ENCRYPTED ويندوز NT استفاده نمايد.

740 . دستگاه هاي TAPI كه براي remote access پيكر بندي مي گردند به طور صحيح نصب و آماده نشده اند .

741 . كامپيوتر محلي از encryption پشتيباني نمي نمايد .

742 . سرور راه دور از encryption پشتيباني نمي نمايد .

743 . سرور راه دور به encryption نياز دارد .

744 . نمي تواند شماره شبكه IPX را استفاده نمايد كه توسط سرور راه دور در نظر گرفته شده است گزارش وقايع را باز بيني نماييد .

745 . يك فايل مهم و ضروري آسيب ديده است . Dial – up networking را مجددا نصب نماييد .

751 . شماره callback شامل يك كاراكتر بي اعتبار مي باشد . كاراكترهاي زير فقط مجاز دانسته مي شوند : Space, T, P, W, (,), - , @. 0تا9 .

752 . در زمان پر دازش script يك خطاي نحوي صورت مي گيرد .

753 . اتصال نمي تواند قطع شود زيرا توسط مسير گردان چند پروتكلي ايجاد شده است .

754 . سيستم قادر به يافتن bundle چند انصالي نمي باشد .

755 . سيستم قادر به اجراي شماره گيري خودكار نمي باشد زيرا اين ورودي يك شماره گير عادي را دارد .

756 . اين اتصال هم اكنون در شماره گيري مي باشد .

757 . خدمات دستيابي راه دور خود به خود آغاز نمي شوند اطلا عات بيشتري در گزارش وقايع در اختيار شما قرار مي گيرد .

758 . اشتراك اتصال اينترنت هم اكنون روي اين اتصال ميسر مي گردد .

760 . در زمان فراهم آوري امكانات مسير يابي ، اين خطا رخ مي دهد .

761 . در زمان فراهم شدن اشتراك اتصال اينترنت براي اين اتصال اين خطا ايجاد مي گردد.

763 . اشتراك اتصال اينترنت فعال نمي باشد . دو اتصال LAN و يا بيشتر به علاوه اتصالي كه با اين LANها مشترك شده است وجود دارد .

764 . دستگاه كارت خوان smartcard نصب نيست .

765 . اشتراك اتصال اينترنت ميسر نمي باشد . اتصال LAN با آدرس IP در حال حاضر پيكر بندي مي شود كه براي آدرس گذاري اتوماتيك IP مورد نياز مي باشد .

766 . سيستم نمي تواند هيچ گواهي اي را بيابد .

767 . اشتراك اتصال اينترنت ميسر نمي گردد اتصال LAN بر روي شبكه شخصي انتخاب مي گردد كه بيش از يك آدرس IP را پيكر بندي كرده است . اتصال LANرا با يك آدرسIP مجزا ، مجددا پيكر بندي نماييد قبل از اينكه اشتراك اتصال اينترنت صورت گيرد .

768 . به دليل رمز دار نكردن داده ها اتصال صورت نمي پذيرد .

769 . مقصد مشخصي قابل دست يابي نمي باشد .

770 . دستگاه راه دور تلا ش براي ايجاد اتصال را نمي پذيرد .

771 . اقدامات اتصال صورت نمي گيرد زيرا شبكه اشغال مي باشد .

772 . سخت افزار شبكه كامپيوتر راه دور با نوع تلفن مورد نياز سازگاري ندارد .

773 . امكان ايجاد اتصال موثر نمي باشد زيرا شماره مقصد تغيير كرده است .

774 . به دليل از كار افتارگي موقت ، اتصال صورت نمي گيرد .

775 . مكالمه تلفني توسط كامپيوتر راه دور متوقف شد .

776 .مكالمه تلفني نمي تواند وصل گردد زيرا مقصد خواسته است كه ويژگي را حفظ نمايد .

777 . اتصال صورت نمي گيرد زيرا مودم ( يا ساير وسايل ارتباط دهنده ) روي كامپيوتر راه دور دچار مشكل مي باشند .

778 . تاييد هويت سرور غير ممكن مي باشد .

779 . براي بر قراري dial – out اين اتصال بايد از smartcard استفاده نماييد .

780 . عمل انجام شده براي اين اتصال بي اعتبار مي باشد .

781 . تلاش براي رمز گذاري (encryption) صورت نمي گيرد زيرا گواهي معتبري يافت نمي گردد .

782 . ترجمه آدرس شبكه (NAT) در حال حاضر به عنوان يك پروتكل مسير يابي نصب مي گردد و بايد قبل از اينكه اشتراك اتصال اينترنت فراهم گردد حذف شود .

783 . اشتراك اتصال اينترنت ميسر نمي باشد . اتصال LAN كه به عنوان شبكه شخصي انتخاب مي گردد يا فراهم نمي شود و يا از شبكه قطع مي باشد . لطفا قبل از فراهم شدن اشتراك اتصال اينترنت از اتصال آداپتور LAN مطمئن شويد .

784 . در حالي كه اين اتصال را در زمان log on استفاده مي كنيد شما نمي توانيد شماره بگيريد زيرا اين اتصال براي استفاده از نام كاربري پيكر بندي شده است كه متفاوت از نام كاربر روي smartcard مي باشد . چنانچه بخواهيد آنرا در زمان log on استفاده نماييد بايد براي استفاده از (username) روي كارت smart آنرا پيكربندي كنيد .

785 . در صورت استفاده از اين اتصال در زمان log on شما نمي توانيد شماره گيري نماييد زيرا براي استفاده از يك smartcard پيكر بندي نشده است . چنانچه بخواهيد آنرا در زمان log on به كار ببريد بايد امكانات اين اتصال را تصحيح و آماده نماييد به طوري كه smartcard استفاده نمايد .

786 . مبادرت به اتصال L2TP صورت نمي پذيرد زيرا هيچ گواهينامه معتبري براي تصديق (authentication) امنيت روي كامپيوتر شما وجود ندارد .

787 . اتصال L2TP غير ممكن است زيرا لايه امنيتي نمي تواند كامپيوتر راه دور را authentication نمايد .

788 . تلاش براي ايجاد اتصال L2TP بي نتيجه مي باشد زيرا لايه امنيتي نمي تواند پارامترهاي سازگار با كامپيوتر راه دور را فراهم نمايد .

789 . تلاش براي اتصال L2TP فراهم نمي گردد زيرا لايه امنيتي با يك خطاي پردازشي در طول سازگاري با كامپيوتر راه دور مواجه است .

790 . تلاش براي اتصال L2TP صورت نمي گيرد زيرا تاييد گواهينامه بر روي كامپيوتر راه دور ميسر نمي باشد .

791 . اتصال L2TP ميسر نمي باشد زيرا خط مشي امنيتي (security policy) براي اتصال يافت نمي شود .

792 . اتصال L2TP صورت نمي گيرد زيرا زمان توافق امنيتي به پايان رسيده است .

793 . اتصال L2TP ميسر نمي گردد زيرا اين خطا رخ مي دهد در حالي كه در مورد امنيت به توافق مي رسند .

794 . ويژگي RADIUS ا ين كاربر PPP نمي باشد .

795 . ويژگي RADIUS نوع تونلي براي اين كاربر ، نادرست مي باشد .

796 . ويژگي RADIUS نوع خدمات براي اين كار نه قالب بندي مي شود و نه callback قالب بندي مي شود .

797 . مودم پيدا نشد .

798 . گواهينامه اي شناسايي نمي شود كه بتواند پروتكل قابل ارائه استفاده شود .

799 . اشتراك اتصال اينترنت ميسر نمي گردد زيرا دو IP شبيه به هم در شبكه وجود دارد . IC ها به ميزباني نيازمند مي باشند كه براي استفاده از 192 ، 168 ، 0 ، 1 پيكر بندي شده است . مطمئن شويد كه هيچ سرويس گيرنده ديگري براي استفاده از 192 ، 168 ، 0 ، 1 پيكر بندي نشده است .

800 . قادر به ايجاد اتصال VPN نمي باشد . سرويس دهنده VPN در دسترس نمي باشد و يا ممكن است پارامترهاي امنيتي براي اتصال به درستي پيكربندي نشده باشند .

hooronline

کيفيت مقاله :
عالی خوب متوسط ضعيف


كامل ترين مرجع خطاهاي مودم(3) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۶۴ مراجعه امروز
۴۹۸۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كامل ترين مرجع خطاهاي مودم(3)
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۲/۱۳۸۳ اين مقاله ۶۹۵ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.
خطاي DUNS 629 :
پورت بوسيله دستگاه راه دور قطع مي شود ( درست نبودن راه انداز مودم يا برنامه ارتباطي ) اين خطا توسط برخي از مشكلات ديگر ايجاد مي گردد .
در مورد كليه نسخه هاي ويندوز : مطمئن باشيد كه نام و كلمه عبوري را كه براي اتصال سيستم شماره گيري DUNS وارد كرديد درست است . همچنين از درست بودن شماره تلفن مطمئن شويد . فراموش نكنيد كه پسوردها از اهميت خاصي برخوردارند و از اين پس چيزي كه شما وارد مي كنيد بصورت ستاره ظاهر مي گردد . وارد كردن پسورد غلط ، راحت و آسان مي باشد . نياز به مرورگر ( browser ) ، پست ( mail ) و ساير كاربردها و امكانات شبكه اي شما و اتصال شبكه dial-up مي تواند توسط برنامه هاي مختلفي به اجرا در آيد كه برخي از آنها ممكن است براي چيزي كه اتصال شماره گيري ( DUNS connection ) استفاده مي نمايد نظير نام كاربر و پسورد ، تنظيمات خاص خود را دارا باشد . ( بويژه ، جستجو گر اينترنت مايكروسافت Microsoft's Internet Explorer ) و ويزارد اتصال اينترنت ( Internet Connection Wizard ) ، Outlook , outlook Express و غيره همگي از امكاناتي براي راه اندازي يك اتصال DUNS برخوردار مي باشند . چنانچه اين خطا باقي ماند با برنامه HyperTerminal مستقيما متصل به مودم با سرور تماس بگيريد ( Using HyperTerminal را ببينيد . پس از اتصال به برقراري ارتباط براي نام كاربر شما و سپس پسورد ، كليه سرورها پاسخ خواهند داد . اين مورد به شما اجازه خواهد داد تا پاسخ هر خطا را از سرور مشاهده نماييد . چنانچه سرور نام و كلمه عبور شما را بپذيرد بايد يك جلسه PPP راه اندازي نمايد . براي كسب بيشتر آن نمي توانيد برنامه HyperTerminal را استفاده نماييد . شما ممكن است كاراكترهاي زايدي را ببيند .

چنانچه اين مورد رخ دهد تلفيق نام كاربر و پسورد بايد توسط (dial-up networking systems) DUNS عملي باشد .اگر با خطايي مواجه شديد با سرويس دهنده خدمات خود تماس بگيريد و به آنها اجازه دهيد تا به اطلاعات حساب شما وارد شوند و آن را امتحان نمايند .

در مورد ويندوز NT 4.0 : چنانچه كليه وروديها براي سرويس شماره گيري ( DUNS ) درست نيست شما ممكن است اين خطا را دريافت نماييد . اين مورد تنظيمات غلطي را براي نوارگردانهاي Basic ، Server ، Script ، Security ، X.25 و DUNS connectoid در بر دارد . تنظيمات براي صحت (authentication) و رمز گذاري ( encryption ) روي نوار امنيتي بايد با نيازهاي ISP شما برابري نمايد . تنظيمات روي حساب سرور يك PPP ، نوع سرور اينترنت را مشخص خواهد نمود . نوع سرور اينترنت ، پروتكل TCP يا IP و فشرده سازي نرم افزار را با ISP خود بررسي نماييد . علاوه بر اين تنظيمات ، در تنظيمات شماره گيري مطمئن شويد . توجه نماييد كه شما نيازي به ذخيره پسورد خود از روي نوار امنيتي نداريد .

در مورد دامين edition ويندوز 98 : چنانچه يك جلسه encryption 128 بيتي را تحت شرايط خاص ايجاد مي نماييد مقاله MS KB Q237419 را مشاهده نماييد .

در مورد ويندوز NT و 2000 : زماني كه در صدد ايجاد يك جلسه PPTP مي باشيد به محض اتصال به ISP خود اين خط ممكن است رخ دهد . مقاله MS KB Q169843 را ببينيد .

در مورد ويندوز 95 و DUNS 1.2b : چنانچه حساب جديد و تغيير پسورد ( change password ) فعال باشد . مقاله MS KB Q191122 را مشاهده كنيد .

در مورد هر نسخه ويندوز : چنانچه با خدمات دستيابي راه دور و مسير يابي ( Routing and Remote Access Service ) با سرور ويندوز NT تماس مي گيريد با مقاله MS KB Q172290 و مقاله KB Q220954 را مشاهده كنيد و يا چنانچه براي encryption 128 بيت با سرور NT تماس مي گيرد زماني كه encryption 128 بيت را نصب نكرده ايد مطلب KB Q172215 را ببينيد .

در مورد ويندوز 95/ 98 : بوسيله نرم افزار يا مودم ايجاد مي گردد كه به درستي پيكر بندي نشده و يا خراب مي باشد همچنين به دليل ID اشتباه كاربر يا پسورد اشتباه ايجاد مي گردد .

در مورد يك proE2 يا Motorola BitSurfPro : مقاله مايكروسافت Q199241 را مشاهده نماييد .

در مورد MSN 2.52-2.6 : مقاله مايكروسافت Q199543 را ببينيد .

در مورد ويندوز NT يا 2000 : اگر سرعت درگاه مودم كمتر از 200/19 مي باشد ، اين خط نمايش داده مي شود . ورودي دفترچه تلفن و يا تنظيمات مودم را از روي control panel/modems درست كنيد . مقاله مايكروسافت KB Q241513 را مشاهده كنيد .

در مورد ويندوز NT : چنانچه خدمات دستيابي راه دور و مسير يابي پيكر بندي نشده اند تا پيغام هايي نظير RAS سرور را دريافت نمايند . Dial-up نمي تواند اتصال به سرور را تكميل نمايد. پيكربندي خود را بررسي نماييد و اتصال را مجددا امتحان نماييد . مقاله مايكروسافت KB 170977 را مشاهده نماييد .

ويندوز NT : همچنين قسمت گره گشايي مشكلات log in را در مقاله MS KB Q161986 ببينيد .

در مورد ويندوز XP : مشكلات ايجاد شده توسط تنظيمات نادرست connectoid مي باشد . همچنين قسمت MS KB Q314445 را مشاهده نماييد .

خطاي DUNS 6XX
Dial-up Networking Systemخطاي 600 ، 601 ، 603 ، 606 ، 607 ، 610 ، 613 ، 614 ، 616 ، 618 ، 626 ، 632 ، 637 و 638 :
يك خطاي داخلي ( سيستم عامل ويندوز ) اتفاق افتاده است . مايكروسافت پيشنهاد مي كند كه كامپيوتر را خاموش يا مجددا راه اندازي نماييد تا مطمئن شويد كه كليه تغييرات جديد پيكر بندي ، تاثير را پذيرفته اند .

چنانچه اين مورد نتواند مشكل را حل نمايد شما بايد قسمت هايي از ويندوز را حذف يا مجددا نصب نماييد و يا مي توانيد ويندوز را مجددا نصب نماييد .

خطاي DUNS 718 :
مهلت برقراري تماس PPP پايان پذيرفته است .

اين خطا نشان مي دهد كه گفتگوي PPP شروع شد اما به پايان رسيد زيرا سرور راه دور ، در يك زمان مناسب پاسخ نداد

اين حالت به دليل كيفيت ضعيف خط يا مشكل سرور (ISP) ايجاد مي گردد . زماني كه مودم شما به ISP متصل مي باشد و نام و كلمه عبور را فرستاده است اين خطا نمايش داده مي شود اما هيچ پاسخي از سوي سرور دريافت نمي گردد .

گاهي اوقات ، ‌شماره گيري مجدد ، موفقيت آميز خواهد بود .

اگر اعتبار حساب ISP شما تمام شود و يا چنانچه نام وكلمه عبوري كه شما به كار مي بريد ، بي اعتبار باشد ، اين خطا رخ ميدهد .

در مورد ويندوز NT و Motorola ISDN Bitsurfr pro E2 مقاله MS KB را مشاهده نماييد .

زماني كه با ويندوز NT 4.0 يا سرور SP2 تماس مي گيريد اين مقاله را ببينيد .

اگر PPTP و ويندوز NT را به كار مي بريد اين مقاله را مشاهده كنيد .

اگر مسير يابي MS و ارتقاي سرور دستيابي راه دور را براي ويندوز NT 4.0 راه اندازي كرده ايد مقاله MS KB را مشاهده نماييد .

در مورد سرور Exchange 5.5 مايكروسافت مقاله MS KB را ببينيد .

خطاي DUNS 711 :
به اجرا در آمدن RasMan (initialization) صورت نمي گيرد . گزارش وقايع را بررسي نماييد .

چنانچه سرويس plug and play صورت نپذيرد اين خطا در مورد ويندوز NT 4.0 رخ مي دهد . اين خطا باعث باز نشدن مودم (modems) از روي controlpanel و همچنين مانع شناسايي مودم براي خدمات دستيابي راه دور خواهد شد .

براي حل اين مشكل سرويس plug and play را از روي control panel/services فعال كنيد .

خطاي DUNS 692 :
سخت افزار در پورت يا دستگاه متصل شده از كار افتاده است .

چنانچه مودم شما بطور كامل وصل نباشد و يا برق مودم بدلايلي قطع باشد اين خطا نمايش داده مي شود . درستي نصب مودم را از طريق controlpanel/modems/driver و خطاياب (diagnostic) بررسي نماييد . اين خطا همچنين مي تواند بدليل سيم سري شل يا اشتباه در مورد مودم هاي بيروني بوجود آيد. چنانچه از سرويسي برخورداريد كه يك dial-tone غير استاندارد ، نظير پست صوتي Telco-provided را فراهم مي كند اين خطا رخ مي دهد .

اين خطا با اضافه كردن كاما (adding cammas) قبل از شماره گرفته شده ، برطرف مي گردد .

اگر برنامه HyperTerminal هم اكنون از پورت استفاده نمايد ، اين خطا در مورد ويندوز NT 4.0 رخ مي دهد .

در مورد ويندوز 2000 يا XP چنانچه برنامه Quicken 2000 را نصب كرده ايد :‌

اين خطا بوسيله برنامه Quicken Download Manager ايجاد مي گردد . مودم را برداريد و آن را مجددا نصب نماييد ، اين كار ، به راه اندازي مودم براي يك جلسه مجزا ، منجر مي گردد . بر داشتن برنامه Quicken 2000 يا غير فعال نمودن برنامه Quicken Download Manager ، راه حل هميشگي اين خطا مي باشد . مقاله Intuit ، چگونگي قطع برنامه Quicken Download Manager را توضيح مي دهد . اين مشكل همچنين در راه حل هاي Dell مقاله KB مورد بحث قرار گرفته است .

همچنين پيغام اين Dell talk را مشاهده نماييد .

Dell Solution KB Article

در مورد ويندوز 2000 و كامپيوسرو يا UUNET : اين مقاله را ( MS KB ) را ببينيد .

در مورد ويندوز NT يا 2000 يا مودم 3Com Impact ISDN : شما به ارتقاي فايل .INF نياز داريد . مقاله MS KB را مشاهده نماييد .

در مورد ويندوز NT و مودم USR Sportster ISDN : شما به ارتقاي گرداننده ( driver ) نياز داريد . مقاله MS KB را مشاهده نماييد .

در مورد ويندوز NT و مودم IBM Mwave :‌ زماني كه از طريق ارتقاي گرداننده IBM ، log on مي نمايد و يا در حالي كه اولين بار يك حساب محلي را log on مي كنيد ، اين مشكل ممكن است حل گردد . مقاله MS KB را ببينيد .

در مورد كامپيوترهاي IBM Value Point 466DX2 : Blos به ارتقاء نياز دارد . مقاله MS KB را مشاهده كنيد .

در مورد ويندوز XP : MS KB 314846 را ببينيد (عملكرد بر مودم ، كابل و پورت اشتباه و مشكلات انتخاب دست دهي) handshaking option problems .

خطاي DUNS 650 ، 651 و 652 :
650 سرور Remote Access پاسخ نمي دهد .650 MSN مودم پاسخ نمي دهد .كليه نسخه هاي ويندوز : چنانچه به سرور ويندوز NT بوسيله PPTP متصل مي باشيد قسمت MS 162847 KB را مشاهده نماييد . اگر مودم يا دستگاه سرور ISP به طور صحيح پيكر بندي نشود خطاي 650 رخ مي دهد .

اگر اين خطا ادامه يافت با برنامه HyperTerminal مستقيما متصل به مودم با سرور تماس بگيريد . تقريبا كليه سرور ها پس از اتصال به برقراري ارتباط به خاطر نام كاربر و سپس پسورد پاسخ خواهند داد . اين مورد به شما اجازه خواهد داد تا پاسخ هر خطا را از سرور مشاهده نماييد . چنانچه سرور ، نام و كلمه عبور شما را بپذيرد سرور بايد يك جلسه PPP را آغاز نمايد . براي كسب بيشتر آن نمي توانيد از برنامه HyperTerminal استفاده نماييد . شما ممكن است كاراكترهاي زايدي را مشاهده نماييد . اگر اين حالت اتفاق افتاد ، تلفيق نام كاربر و پسورد بايد با كمك DUNS عملي باشد . چنانچه با خطايي مواجه شويد با سرويس دهنده خدمات خود تماس بگيريد و به آنها اجازه دهيد تا به اطلاعات حساب شما وارد شوند و آن را امتحان نمايند .

نمونه بارز آن و ساير ISP ها : برخي ازISP ها به سرويس گيرنده اي براي شبكه هاي نصب شده مايكروسافت نيازمند مي باشند كه بعنوان log on شبكه اصلي شما انتخاب مي شوند . ( ويندوز control panel/Networking )

AOL روي سيستم شما: چنانچه روي سيستم خود يك AOL نصب كرده ايد اما آن را استفاده نمي كنيد ، نرم افزار AOL ممكن است با دستيابي به هر ISP ديگر اختلال ايجاد كند.

( ويندوزcontrol panel/Add/Remove programs اضافه كردن و حذف برنامه ها .)

MSN 2.52-2.6 كه اتفاق مي افتد DUNS مي باشد كه بعد از MSN 2.52 نصب مي شود. مقاله MS KB Q192420 را ببينيد . (Dial-up networking system)

خطاي DUNS 651 :
مودم شما ( يا ساير وسايل اتصال دهنده ) خطايي را گزارش كرده است ( خطا ، از طرف مودم بوده است ) .

كليه نسخه هاي ويندوز : چنانچه خطايي در فايل .INF باشد كه براي نصب مودم در ويندوز به كار مي رود و يا چنانچه مودم با فايل اشتباه .INF نصب شده باشد اين خطا ممكن است رخ دهد . اگر اين مورد صورت گرفت ، مودم را با فايل .INF درستي مجددا نصب نماييد همچنين :

Data Race Red Modem Error–MS KB Q122901 Evercom 24E+Error MS KBQ122414 را مشاهده كنيد .

شما همچنين مي توانيد logging شدن را توسط برنامه HyperTerminal آزمايش نماييد . ( به قسمت بالا نگاه كنيد ) .

همانطور كه در قسمت بالا شرح داده شد برنامه HyperTerminal مستقل از فايل .INF مودم عمل مي نمايد

خطاي DUNS 652 :
پاسخ نامشخصي از دستگاه دريافت مي گردد .

كليه نسخه هاي ويندوز : چنانچه خطايي در فايل .INF وجود داشته باشد كه براي نصب مودم در ويندوز به كار مي رود و يا چنانچه مودم با فايل اشتباه .INF نصب شده است ، اين خطا نمايش داده مي شود . اگر چنين موردي صورت گرفت مودم را با كمك فايل .INF صحيح مجددا نصب نماييد .

شما مي توانيد همچنين logging شدن را همراه برنامه HyperTerminal امتحان نماييد . همانطور كه در قسمت بالا توضيح داده شده برنامه HyperTerminal مستقل از فايل .INF مودم عمل مي نمايد .

ويندوز NT 3.5/3.51 : در مورد مودم هاي مگا هرتز خاص ، MS KB Q136034 را ببينيد .

ويندوز براي workgroups 3.11 : در مورد مودم MS KB Q 129426 , Multi Tech MT2834 را مشاهده نماييد .

خطاي DUNS 645 :
Authentication داخلي اشكال پيدا كرده است.

ويندوز 98 / 95 : چنانچه گزينش يا انتخاب پسورد رمز گذاري شده مورد نياز (Require encrypted password) روي جدول Server Types در جزئيات اتصال فراهم شود و يا نام و كلمه عبور اشتباه وارد شود ، اين خطا رخ مي دهد . مقاله MS KB Q199780 را ببينيد .

MSN 2.5 : در صورت استفاده از MSN 2.5 ، اگر آداپتور dial-up يا قطعات از كار بيفتد اين خطا نمايش داده مي شود. مقاله MS KB Q173644 را مشاهده نماييد ( برخي از كاربرها اين موقعيت به كار برده شده را گزارش مي كنند حتي اگر آنها هرگز MSN را به كار نبرده باشند) .

ويندوز 98/95 : چنانچه ميز كار pc( desktop ) به يك pc دستي تحت شرايط خاص متصل شود اين خطا نمايش داده مي شود . مقاله MS KB Q184227 را مشاهده نماييد .

ويندوز 98/95 : اگر در صدد ايجاد يك اتصال VPN ( شبكه خصوصي مجازي ) مي باشيد و VPN به طور صحيح نصب نشده است اين خطا رخ مي دهد . مقاله MS KB Q188141 را ببينيد .

كليه نسخه هاي ويندوز : چنانچه در صدد اتصال به دامين ويندوز 2000 مي باشيد كه از يك log on سرورRRAS (Routing and Remote Access Services) بدون امتيازات اجرايي برخوردار است اين خطا رخ مي دهد . مقاله MS KB 227747 را مشاهده نماييد.

چنانچه از يك مودم انتخاب شده در DUNS connectoid برخورداريد كه به مدت طولاني در كامپيوتر نصب نشده است اين خطا ممكن است نمايش داده شود . مطمئن شويد كه مودم درستي در Connectoid انتخاب مي شود .

خطاي DUNS 680 :
خط تلفن وصل نيست .

كليه نسخه هاي ويندوز : وصل نبودن خط تلفن ، دلايل بسياري براي اين نوع خطا وجود دارد .

ابتدا ، براي پي بردن به اتصال خط و وصل شدن خط تلفن ، با استفاده از برنامه HyperTerminal به كمك شيوه اتصال پورت Com ، قابليت مودم را بررسي نماييد . Using HyperTerminal را مشاهده نماييد. چنانچه به مودم خود ، فرمان AT & FX1 و بعد از آن فرمان dial را داريد تشخيص اتصال خط غير ممكن خواهد بود . اگر هنوز به خط تلفن وصل نشده ايد مودم ممكن است به طور صحيح نصب نشده باشد ( بويژه چنانچه آن مودم يك PCI يا يك soft-modem باشد ) يا سيم از مودم به خط تلفن اشتباه وصل شده است و يا به اتصال دهنده اشتباهي روي مودم نصب مي باشد . سيم خط ديگري را امتحان نماييد و از اتصال LINE-not phone-jack روي مودم مطمئن شويد . يك تلفن عادي را به سيم تلفن روي مودم وصل كنيد و از وصل بودن آن مطمئن شويد . مودم همچنين ممكن است خراب باشد . بسياري از مودم هاي جديد به جاي رله ( تقويت كننده ) الكترومكانيكي قديمي براي استفاده نكردن از وقفه واقعي مودم (off – hook) با يك مدار الكترونيكي عرضه مي شوند . برخي از طرح ها ، اعتبار كمتري را نشان داده اند و بيشتر اوقات آنها در يك حالت وقفه اي (off – hook) قرار خواهند گرفت بنابر اين وصل نبودن و وصل بودن سيم تلفن ممكن است خط را وصل نمايد . در صورت وقوع اين وضعيت ، مودم نياز به تعمير و تعويض دارد . اگر چه مودم ، شماره گيري (X1) را دچار اشكال مي نمايد اما به غير از اين وصل شدن خط را نيز شناسايي نمي كند . احتمالا مشكل در انتخاب و گزينش درست كشور در windows / control panel / telephony يا در نصب نادرست مودم يا فقدان پشتيباني براي كشور شما در گرداننده (driver) مورد استفاده تان مي باشد . بررسي نماييد تا ببينيد كه driver هايي ، براي ارتقاء (update) وجود دارند .

چنانچه مودم با يافتن (X3) در برنامه HyperTerminal به طور صحيح شماره گيري نمايد اما زماني كه DUNS را استفاده مي نمايد صداي شماره گيري را نمي يابد . مشكل مي تواند DUNS ( براي ارتقاء يا نصب مجدد ، بررسي نمايد ) يا پيكر بندي درست و انتخاب مودم براي DUNS connectoid باشد

کيفيت مقاله :
عالی خوب متوسط ضعيف


كامل ترين مرجع خطاهاي مودم(4) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۶۷ مراجعه امروز
۴۹۸۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
كامل ترين مرجع خطاهاي مودم(4)
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۲/۱۳۸۳ اين مقاله ۳۸۰ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
خطاي DUNS 678 و 679 :

678 پاسخي وجود ندارد . 679 . نمي تواند حامل (carrier) را بيابد .

كليه نسخه هاي ويندوز :

اين خطا رخ مي دهد چنانچه : 1 . شماره اشتباهي بگيريد 2 . مشكلي در ISP يا شبكه تلفن شما وجود دارد 3 . قبل از زمان مورد نظر مودم شما قادر به دست دهي (handshake) با مودم راه انداز نمي باشد .4 . براي شنيدن صداي اتصال ، speaker مودم را استفاده نماييد . مطمئن شويد كه شماره گيري مي نمايد و صداي پاسخ مودم راه دور را مي شنويد . 5 . با كمك تلفن عادي ، شماره را بگيريد و مطمئن شويد كه صداي پاسخ مودم راه دور را مي شنويد .6 . مطمئن شويد كه # تلفن با كمك DUNS شماره گيري مي شود ، modem log را بررسي نماييد . ( چنانچه شماره گيري # صورت نپذيرفت E1 را به تنظيمات ديگر اضافه نماييد اين كار مي تواند به شما كمك نمايد . همچنين به اين نكته توجه كنيد كه شما ممكن است تنظيمات تلفني خود را داشته باشيد آن چنان كه رقم فاصله راه دور به طور غير ارادي به شماره تلفن شما اضافه مي گردد) .

اگر دست دهي (handshake) مودم خود را نمي شنويد و خطاي 678 در همان زمان پايان صداي دست دهي ظاهر مي شود ، شما ممكن است نياز به از كاراندازي 56k يا افزايش زمان " cancel call if not connected " در گزينه control panel/modems/properties/connection داشته باشيد .

خطاي DUNS 630 :

پورت بدليل از كار افتادگي سخت افزار قطع مي شود .

خطاي 630 : كامپيوتر هيچ پاسخي را از مودم دريافت نكرده است ، نصب بودن مودم را بررسي نماييد و در صورت لزوم ، مودم را برداريد و سپس آن را به حالت اول باز گردانيد .

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

چنانچه مودم شما با فرماني كه آن را پشتيباني نمي كند يك رشته تنظيمات نادرست را نشان دهد اين خطا ممكن است رخ دهد . تنظيمات اضافي ( init string ) ديگر را حذف نماييد . از نصب مودم مطمئن شويد و فايل درست .INF را استفاده نماييد . Modem log را بررسي نماييد تا مشاهده كنيد كه پاسخي از سوي مودم وجود دارد.

ويندوز 98 / 95 / NT : چنانچه مخابرات خاصي را داريد كه ويژگي هايي را نظير dial-tone مشخص را فراهم مي كند از جمله dial-tone منقطع . در زمان مخابره پست صوتي و غيره اين خطا نمايش داده مي شود . براي درست كردن و تصحيح اين مورد ، چند شيوه به كار مي رود نظير استفاده از كاما در شماره گرفته شده يا تغيير انتظار ( wait ) براي زمان dial-tone . مقاله KB Q184086 مايكروسافت را ببينيد .

ويندوز 98 : اگر گزينش دسترسي " support Serial Key Devices " براي استفاده درگاه مشابه com نظير مودم پيكر بندي شود اين خطا نمايش داده مي شود . مقاله KB Q227995 مايكروسافت را ببينيد .

ويندوز 98 : اگر مودم با شناسايي سخت افزار ويندوز 98 بدليل نصب دستگاههاي جديد ، انتقال پورت سري جديد را به كار برد اين خطا نمايش داده مي شود . در اين شرايط ، امكانات اتصال شبكه اي Dial-up را تغيير دهيد تا تنظيمات جديد مودم را استفاده نماييد . برنامه ها همچنين در پوشه startup اين پيغام خطا را ايجاد مي نمايند . شما بايد برنامه ها را از روي پوشه startup ، غير فعال يا حذف نماييد . خطاي 630 و گره گشايي مشكلات مودم در ويندوز 98 را در مقاله KB Q190554 مايكروسافت را مشاهده نماييد .

در مورد MS Qutlook98 و Win fax Starter Edition مقاله MS KB 183944 را مشاهده نماييد .

ويندوز 98 و Me : در مورد كامپيوتر ماهواره اي توشيبا و كارت Card Bus pc مقاله MS KB 245132 را ببينيد .

خطاي DUNS 742 :
سرور راه دور از encryption پشتيباني نمي كند .

كليه نسخه هاي ويندوز : نصب RRAS مايكروسافت ممكن است encryption 128 بيت را غير فعال كند .

مقاله MS KB را مشاهده نماييد .

همچنين اين قسمت را ببينيد :

مقاله MS KB ، سرويس گيرنده DUNS 128 بيت ويندوز 95 را نشان مي دهد .

اين صفحه مايكروسافت ، ارتقاي encryption 128 بيت را شناسايي و معرفي خواهد نمود .

خطاي DUNS 741 :

كامپيوتر محلي از encryption پشتيباني نمي نمايد .

كليه نسخه هاي ويندوز : نصب (Routing and Remote Access Service) RRAS مايكروسافت encryption 128 بيت را غير فعال مي سازد . مقاله MS KB را ببينيد .

ويندوز 95 : چنانچه PPTP با نسخه قديمي تر DUNS به كار رود ، راه حل آن ، گسترش و ارتقاي DUNS 1.3 مي باشد . مقاله MS KB 191192 را مشاهده نماييد .

همچنين به اين قسمت نگاه كنيد :

مقاله MS KB ، سرويس گيرنده DUNS 128 بيت ويندوز 95 را نشان مي دهد . اين صفحه مايكروسافت ارتقاء و گسترش encryption 128 بيت را نشان و معرفي خواهد نمود .

خطاي DUNS 720 :

هيچ كدام از پروتكل هاي كنترل PPP پيكر بندي نشده اند .

كليه سيستم عامل ها : چنانچه تنظيمات شبكه dial-up خود را پيكر بندي نكرده ايد تا از يك پروتكل پشتيباني شده توسط ISP يا سيستم مورد تماس خود استفاده نمايد ، اين خطا نمايش داده مي شود . جدول Server Types ، dial-up connectoid خود را امتحان كنيد . اغلب ISP ها ، از پروتكل TCP يا IP استفاده مي نمايند و بقيه نبايد امتحان شوند . در اينجا يك صفحه محافظ نوارگردان connectoid ويندوز 95 وجود دارد . همچنين گزينش dial-up server را بررسي نماييد .

اگر چه برخي از آنها ممكن است SLIP يا CSLIP را پشتيباني نمايند ولي براي اكثر ISP ها ، اين مورد PPP خواهد بود .

چنانچه TCP يا IP را بعنوان يك پروتكل برگزيده ايد و اين مورد توسط سيستم مورد تماس شما ، پشتيباني نمي شود ، شما ممكن است اين خطا را دريافت نماييد ( بعنوان مثال ، يك سرور دستيابي راه دور براي NetBEUI پيكر بندي مي شود ) .

براي حل اين مشكل Server Types ، connectoid ، DUNS را پيكر بندي نماييد تا با پروتكل نصب شده بر روي سرور راه دور برابري ( match ) نمايد .

چنانچه به سروري متصل هستيد كه به encryption 128 بيت نياز دارد و سيستم شما encryption 128 بيت رانصب نكرده است شما ممكن است با اين خطا مواجه شويد . اين صفحه از مايكروسافت ارتقاي encryption 128 بيت را نشان خواهد داد . همچنين مقاله MS KB را مشاهده كنيد : نصب RRAS ، encryption 128 بيت را غير فعال مي كند .

نصب TCP/IP يا شبكه dial-up ممكن است صورت نپذيرد . براي TCP يا IP متصل به آداپتور dial-up ، control panel/Network را بررسي نماييد .

شما مي توانيد پروتكل TCP يا IP را حذف و سپس مجددا نصب نماييد . اگر در دستگاه خود ، كارت LAN داريد و از طريق يك مودم به اينترنت دسترسي داريد ، TCP يا IP بايد فقط به آداپتور dial-up متصل شوند مگر اينكه TCP يا IP روي LAN خود را استفاده نماييد .

ويندوز NT : چنانچه RAS را فقط به تلفن هاي دريافت (receive) پيكر بندي نموده ايد اين خطا نمايش داده مي شود .

از طريق controlpanel/Network به جدول Remote Access Service روي Services برويد و صرفا براي dial-out يا dial-out و تلفن هاي دريافت ، RAS را پيكربندي نماييد . مقاله MS KB را مشاهده نماييد .

ويندوز NT و 2000 : اين مقاله نشان مي دهد كه اين خطا ( بعلاوه خطاي 611 ) چند علت متفاوت را دارد كه از جمله آنها مي توان عدم نصب رابط NETBLOS و يا غير فعال بودن NETBLOS را نام برد .

خطاي DUNS 691 :

دسترسي صورت نمي گيرد زيرا كاربر و پسورد روي دامين بي اعتبار مي باشد .

در مورد كليه نسخه هاي ويندوز : چنانچه نام كاربر و پسورد را اشتباه به كار ببريد اين خطا رخ مي دهد . فراموش نكنيد كه اكثر نمونه ها ، پسورد از اهميت خاصي برخوردار مي باشد . پسورد را نخواهيد ديد بنابراين چنانچه caps lock را بر خلاف شيوه مورد انتظار خود به كار ببريد مشكلي را با حروف بزرگ و كوچك خواهيد داشت . چنانچه دستگاه دسترسي سرويس دهنده خدمات شما ، دچار مشكلي شود و يا بر روي اتصال نادرستي باشد اين خطا ممكن است اتفاق بيفتد . اين مشكل همچنين بدليل تنظيمات نادرست connectoid ايجاد مي گردد .

چنانچه اين خطا را روي حساب جديدي دريافت كرديد ممكن است نام كاربر و پسورد را اشتباه وارد كرده باشيد . با سرويس دهنده خود آنچه را كه برا ي نام كاربر و پسورد خود نياز داريد به طور دقيق بررسي نماييد . اگر اين خطا ادامه يافت سعي كنيد بوسيله برنامه HyperTerminal مستقيما متصل به مودم با سرور تماس بگيريد (همچنين using HyperTerminal را مشاهده كنيد) . بعد از اتصال به برقراري ارتباط براي نام كاربر شما و سپس پسورد ، تقريبا كليه سرورها پاسخ خواهند داد . اين مورد به شما اجازه خواهد داد تا پاسخ هر خطايي را از سرور مشاهده كنيد . چنانچه سرور نام كاربر و پسورد شما را نپذيرفت بايد يك جلسه PPP را فراهم نماييد و شما نمي توانيد براي دريافت بيشتر آن برنامه HyperTerminal را استفاده نماييد . ممكن است كاراكترهاي زايدي را ببينيد . چنانچه اين مورد اتفاق بيفتد تلفيق نام كاربر و پسورد بايد با سيستم شماره گيري (dial-up/Network/System) عملي باشد . چنانچه خطايي را دريافت نموديد با سرويس دهنده خدمات خود تماس بگيريد و به آنها اجازه دهيد تا با اطلاعات حساب شما ارتباط برقرار كنند و آن را امتحان نمايند .

چنانجه تنظيمات شبكه ويندوز شما اشتباه باشد اين خطا رخ مي دهد حتي اگر اسم كاربر و پسورد را درست وارد كرده ايد . مطمئن باشيد كه برقراري ارتباط با شبكه در DUNS connection شما بررسي نمي شود .

در مورد ويندوز 98 : چنانچه از طريق پوشه خدمات online ، كامپيوسرو {سرويس بر خط} را پيكر بندي مي نماييد MS KB Q188120 را ببينيد .

در مورد ويندوز XP : تنظيمات نادرست connectoid ، مشكلاتي را ايجاد مي كند . همچنين MS KB Q310431 و Q314445 را مشاهده كنيد .

در مورد ويندوز 2000 : به خاطر تنظيمات غلط connectoid ، مشكلاتي بوجود آمده است . همچنين قسمت MS KB Q161986 را ببينيد .

خطاي DUNS 676 :

خط اشغال مي باشد .

كليه نسخه هاي ويندوز :

اين خطا رخ مي دهد چنانچه : 1 – شماره اشتباهي بگيريد . 2 – مشكلي در ISP شما يا در شبكه وجود داشته باشد .3 – شما از پست صوتي و يا از ساير خصوصيت هاي تماس مشتري برخورداريد كه صداي لكنت آوري ايجاد مي نمايد .4 – تنظيمات مودم شما بايد با تنظيمات مودم كشور مورد نظرتان مناسب باشد به عبارت ديگر شما ، براي مودم خود وشماره اي كه تماس مي گيريد و يا براي مودمي كه از كشور مورد نظرتان پشتباني نمي كند تنظيمات خاص آن كشور را مشخص نكرده ايد . 5 – چنانچه كد انتظار تلفن (call waiting code) در شماره گيري شما غير فعال باشد و خط تلفن شما از كد انتظار تلفن پشتيباني نمي كند و چنانچه از زمان انتظار (call waiting) شماره گيري برخورداريد اين خطا نمايش داده مي شود اما شركت تلفن شما از غير فعال بودن كد انتظار تلفن پشتيباني نمي كند .

تنظيماتي را كه براي connection/DUNS به كار مي بريد بررسي نماييد .

چنانچه از پست صوتي يا ساير ويژگي هاي تلفن مشتريان برخورداريد كه صداي لكنت آميزي را ايجاد مي نمايد شما مي توانيد با غير فعال كردن تشخيص صداي شماره گيري و صداي اشغال بودن تلفن اين مشكل را حل نماييد . × را به تنظيمات ديگر اضافه كنيد تا تشخيص صداي شماره گيري و صداي اشغال بودن خط را غير فعال سازد . 2× را به تنظيمات ديگر اضافه نماييد تا صرفا تشخيص اشغال بودن خط را غير فعال سازد.

چنانچه مودم شما از كشور شما پشتيباني نمي نمايد غير فعال كردن تشخيص صداي شماره گيري ( dial-tone) و يا صداي اشغال بودن تلفن ( × در تنظيمات ديگر ) ممكن است نتيجه بخش نباشد ( اما صرفا چنانچه شماره گيري tone و pulse كشور مورد انتخاب با كشور شما سازگار باشد )

از speaker مودم استفاده نماييد تا از برقراري اتصال مطمئن شويد . مطمئن باشيد كه تماس تلفني برقرار شده است و شما پيام اشغالي ( signal ) را نمي شنويد .

Modem log را بررسي نماييد تا مشاهده كنيد كه چه رقمي شماره گيري مي شود (چنانچه شماره گيري توسط # صورت نگرفت E1 را به تنظيمات ديگر اضافه نماييد اين مورد مي تواند به شما كمك نمايد.

سعي كنيد در شماره گيري از tone به جاي pulse استفاده نماييد و مدت زمان tone را افزايش دهيد .

ويندوز NT : زماني كه بايد خطاي 680 ( وصل نبودن خط تلفن ) را دريافت كنيد خطاي 676 ( اشغال بودن خط ) گزارش مي شود اين مورد نخستين بار در service pack6 ( SP6 ) بود . MS KB Q239870 را ببينيد .

hooronline

کيفيت مقاله :
عالی خوب متوسط ضعيف


آموزش نصب لینوکس بخش 1 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۷۰ مراجعه امروز
۴۹۸۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آموزش نصب لینوکس بخش 1
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۲/۱۳۸۳ اين مقاله ۴۹۶ بار مطالعه شده است
۷ نفر تا به حال به اين مقاله رای داده اند.
راهنماي پيشرفته نصب لينوكس ردهت نسخه 8

هشدار : اگر شما مايليد از سيستم عامل ويندوز و لينوكس بصورت در كنار هم در يك سيستم استفاده كنيد، سعي كنيد ابتدا ويندوز را نصب نموده و سپس لينوكس ردهت را نصب نماييد. برخي از نسخه هاي ويندوز با دستكاري MBR ديسك سخت باعث ميشوند تا لينوكس ردهت از كار بيافتد. اگر ويندوز يا لينوكس ردهت را نصب كرديد و پس از نصب متوجه شديد كه يكي از سيستم عاملها كار نمي كند، هول نشده و عمليات نصب را مجددا انجام ندهيد. شما ميتوانيد اين اشكال را با بوت توسط ديسك بوت لينوكس ردهت و با استفاده از فرامين نصب گراب يا ليلو سيستم عامل مورد نظر را فعال نموده و اين اشكال را برطرف نماييد. در صورتي كه قادر به اين كار نيستيد از يك حرفه اي كمك بگيريد.

انتخاب يك روش نصب:

لينوكس ردهت روشهاي بسيار متنوع و قابل انعطافي براي نصب سيستم عامل ارائه نموده است. البته توصيه ميشود كه لينوكس را از روي CD نصب نماييد. ولي اگر شما CD هاي لينوكس ردهت را نداريد و يا كامپيوتر شما فاقد درايو CD-ROM است، ميتوانيد با استفاده از روشهاي ديگر، اقدام به نصب سيستم عامل كنيد. همچنين امكان چندين نوع نصب وجود دارد.

ابتدا بايد مشخص نماييد كه در حال نصب بصورت نصب جديد يا ارتقا هستيد. اگر ميخواهيد نسخه قديمي تر موجود روي سيستمتان را ارتقا دهيد، برنامه نصب فايلهاي پيكربندي و اطلاعات شما را دست نخورده باقي خواهد گذاشت. اين نوع نصب از نصب جديد طولاني تر خواهد بود. يك نصب جديد ابتدا تمام اطلاعات موجود را پاك كرده و عمل نصب را انجام ميدهد. بهCDشما ميتوانيد لينوكس ردهت را از محل هاي زير نصب نماييد. هر نوع نصب غير از نصب از روي CD نياز به ديسكت بوت نصب لينوكس ردهت خواهد داشت :

-سرويس دهنده HTTP : به شما امكان نصب از يك آدرس وب را خواهد داد.

-سرويس دهنده FTP : به شما امكان نصب از يك سايت FTP را خواهد داد.

-سرويس دهنده NFS : ميتوانيد از روي دايركتوري هاي به اشتراك گذاشته شده روي كامپيوترهاي ديگر موجود در روي شبكه با استفاده از سيستم فايل شبكه (Network File System) براي نصب استفاده نماييد.

-ديسك سخت : اگر يك كپي از فايلهاي نصب لينوكس ردهت را روي ديسك سخت خود داشته باشيد ميتوانيد براي نصب از آن استفاده كنيد. البته بايد روي پارتيشني غير از پارتيشني كه براي نص انتخاب نموده ايد قرار داشته باشند.

انتخاب سخت افزار مورد نياز:

ممكن است اين واقعا يك انتخاب نباشد. ممكن است يك كامپيوتر قديمي در كنار خود داشته باشيد كه مايل باشيد لينوكس ردهت را روي آن نصب نماييد. و يا ممكن است يك ايستگاه كاري وحشتناك داشته باشيد كه بخواهيد لينوكس ردهت را روي يكي از پارتيشن هاي آن نصب نماييد. براي نصب نسخه PC لينوكس face="Tahoma">:

-پردازنده سازگار با x86 : كامپيوتر شما به يك پردازنده سازگار با اينتل نياز دارد. مانند برخي سيستم عامل هاي تجاري، شما به جديدترين پردازنده هاي موجود براي نصب لينوكس ردهت نياز نداريد (البته اشكالي ندارد!). شما ميتوانيد لينوكس ردهت را روي پردازنده هاي قديمي هم اجرا نماييد. من حتي پردازنده 80386 اينتل را در ليست سازگاري سخت افزارهاي آن ديده ام ولي هرگز سعي نكرده ام لينوكس ردهت را روي كامپيوتري با آن مشخصات نصب نمايم!

-درايو فلاپي و يا CD-ROM : شما بايد قادر باشيد هنگام فرايند نصب كامپيوتر خود را با يك فلاپي ديسك و يا درايو CD-ROM بوت نماييد. اگر درايو CD-ROM نداريد (در محيطهاي شبكه و يا كامپيوترهاي قديمي) به يك ارتباط شبكه براي نصب از روي شبكه و يا كپي محتويات CD هاي نصب بر روي ديسك سخت سيستم خود داريد.

-ديسك سخت (Hard Disk) : شما به يك ديسك سخت و يا يك پارتيشن از ديسك سخت كه حداقل 350 مگابايت فضا داشته باشد نياز داريد. البته اين فضا فقط براي حداقل نصب كافي خواهد بود. ميزان حقيقي فضايي كه نياز خواهيد داشت بستگي به نوع نصب شما دارد. نصب به صورت ايستگاه كاري به 1500 مگابايت و نصب بصورت كامل (تمام بسته هاي نرم افزاري موجود و كدهاي منبع) به 3 گيگابايت فضا نياز دارد.

-حافظه (RAM) : شما حداقل به 32 مگابايت رم براي نصب لينوكس ردهت نياز خواهيد داشت. اگر مايل به استفاده از محيطهاي گرافيكي هستيد 64 مگابايت لازم خواهد بود.

-صفحه كليد و مانيتور : شما به يك مانيتور و صفحه كليد براي نصب نياز داريد. شما بعدا ميتوانيد لينوكس ردهت را از روي شبكه و با استفاده از ترمينال پوسته و يا ترمينال X به خوبي اداره نماييد.

نسخه هايي از لينوكس ردهت براي نصب روي ايستگاههاي كاري مبتني بر پردازنده هاي آلفا (Alpha) و اسپارك (Sparc) وجود دارند.

نكته : ليست سخت افزار هاي سازگار با لينوكس ردهت را ميتوانيد در آدرس http://www.redhat.com/hardware ببينيد.

اگر درايو CD-ROM كامپيوتر شما به يك درگاه PCMCIA متصل است (در گاههاي موجود روي كامپيوتر هاي كيفي) شما بايد پشتيباني از PCMCIA را در هنگام نصب فعال نماييد. پشتيباني از PCMCIA فقط براي كامپيوترهاي مبتني بر پردازنده هاي سازگار با اينتل موجود است.

اگر كامپيوتر كيفي شما مجهز به يك درايو CD-ROM است، شما ميتوانيد بدون نياز به انجام كار خاصي لينوكس ردهت را روي آن نصب نماييد. در صورتي كه كامپيوتر كيفي شما فاقد درايو CD-ROM است، شما بايد لينوكس ردهت را از روي درايوي كه به درگاه PCMCIA آن متصل است نصب نماييد.

درگاههاي PCMCIA به شما امكان اتصال دستگاههاي مختلف به كامپيوتر كيفي با استفاده از كارتهايي به اندازه كارت اعتباري ميدهند. لينوكس از صدها دستگاه مختلف PCMCIA پشتيباني ميكند. شما ميتوانيد از درگاه PCMCIA كامپيوتر كيفي خود براي نصب لينوكس ردهت از انواع مختلفي از دستگاهها شامل :

-درايو CD-ROM

-كارت شبكه

استفاده نماييد. در صورتي كه مايليد بدانيد كداميك از دستگاههاي PCMCIA در لينوكس پشتيباني ميشوند، فايل SUPPORTED.CARDS واقع در مسير /usr/share/doc/kernel-pcmcia-cs را ببينيد. در هر صورت جهت استفاده از اين درگاه براي نصب لينوكس به ديسكت پشتيباني آن نياز داريد. چگونگي ايجاد اين ديسكتها بعدا شرح داده خواهد شد.

شروع نصب :

اگر فكر مي كنيد نوع نصب مورد نياز خود را انتخاب كرده ايد، ميتوانيد نصب را شروع كنيد. در بيشتر بخشها شما ميتوانيد با كليك روي دگمه بازگشت (Back) انتخابهاي قبلي خود را تغيير دهيد. البته پس از اينكه مرحله كپي بسته هاي نرم افزاري روي ديسك سخت شروع شد، ديگر امكان بازگشت وجود ندارد. در صورتي كه نياز به تغييري داشته باشيد، بايد آنرا پس از اتمام نصب لينوكس و از داخل خود سيستم عامل انجام دهيد.

-ديسكCD-ROM نصب را داخل درايو قرار دهيد

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

-كامپيوتر خود را بوت كنيد

هنگامي كه صفحه خوشامد گويي لينوكس ردهت را مشاهده كرديد به مرحله بعدي وارد شويد
برگفته از سايت : farsiedu.com
کيفيت مقاله :
عالی خوب متوسط ضعيف


آموزش نصب لینوکس بخش 2 ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۷۳ مراجعه امروز
۴۹۸۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
آموزش نصب لینوکس بخش 2
نويسنده : مديريت سايت
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۲/۱۳۸۳ اين مقاله ۳۴۶ بار مطالعه شده است
۱ نفر تا به حال به اين مقاله رای داده اند.
نكته: اگر شما صفحه خوشامد گويي را نمي بينيد، ممكن است درايو CD-ROM شما قابل بوت نباشد. فعال كردن گزينه بوت از روي درايو CD-ROM و يا ايجاد ديسكت هاي بوت ميتواند به شما براي ادامه نصب كمك كند. براي فعال كردن گزينه بوت از روي CD-ROM به صورت مقابل عمل كنيد : كامپيوتر خود را راه اندازي كرده و در صفحه نخستين پيامي براي ورود به صفحه نصب (setup) خواهيد ديد. براي ورود به برنامه نصب بايوس كافي است كليدهاي F1 يا F2 ويا DEL را فشار دهيد. در گزينه هاي موجود به دنبال موردي با عنوان Boot Options و يا Boot From و يا چيزي مشابه آن بگرديد. پس از آنكه آنرا پيدا كرديد، اولويت نخست آنرا روي درايو CD-ROM تنظيم كنيد. تغييرات را ذخيره كرده و خارج شويد.

اگر نصب با موفقيت انجام شد شما ميتوانيد گزينه هاي بايوس را به حالت اول برگردانيد. در صورتي كه حتي با تنظيم اين گزينه ها امكان بوت از روي CD-ROM وجود نداشت، بايد ديسكتهاي نصب را از روي فايلهاي boot.img (براي كامپيوترهاي معمولي)، bootnet.img (براي نصبهاي از روي شبكه) يا pcmcia.img (براي كامپيوترهاي كيفي) كه روي CD نصب قرار دارند، ايجاد نماييد. چگونگي ايجاد اين ديسكتها شرح داده خواهد شد. پس از ايجاد ديسكتها، آنها را در درايو قرار داده و كامپيوتر خود را بوت كرده و نصب را ادامه دهيد.

-اعلان بوت

در جلوي اعلان بوت كليد Enter را براي ورود به نصب گرافيكي، فشار دهيد. در صورتي كه كامپيوتر شما اجازه نصب بصورت گرافيكي (رنگ بيتي و وضوح 800 در 600 پيكسل) را نمي دهد، به قسمت "انتخاب انواع ديگر نصب" مراجعه نماييد. از شما خواسته ميشود يك زبان انتخاب كنيد.

انتخاب انواع ديگر نصب

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

در اينجا ليستي از انواع گزينه هايي كه شما ميتوانيد نصب لينوكس ردهت را بوسيله آن شروع كنيد وجود دارد. پيشنهاد ميشود در صورتي از اين گزينه ها استفاده كنيد كه گزينه گرافيكي دچار اشكال شود (مانند هنگامي كه صفحه از گاربيج پر شده و يا سخت افزار شناسايي نمي شود).

-text : شما ميتوانيد با تايپ text جلوي اعلان نصب بصورت متني را آغاز نماييد. از اين گزينه هنگامي استفاده نماييد كه به نظر ميرسد برنامه نصب نتوانسته كارت گرافيك شما را شناسايي نمايد. با اين نوع نصب برنامه نصب چندان خوشگل! نيست ولي بخوبي كار ميكند.

-lowres : با اين گزينه، برنامه نصب در وضوح 640 در480 پيكسل اجرا خواهد شد. اين گزينه براي كامپيوترهايي است كه كارت گرافيك آنها فقط اين وضوح را پشتيباني ميكند.

-expert : در صورتي كه حس ميكنيد برنامه نصب نمي تواند سخت افزارهاي شما را به خوبي شناسايي كند از اين گزينه استفاده نماييد. با اين گزينه برنامه نصب به شناسايي سخت افزار نمي پردازد و شما ميتوانيد نوع ماوس، مقدار حافظه كارت گرافيكي و ... را شخصا انتخاب كنيد.

-nofb : با اين گزينه حالت frame buffer براي جلوگيري از برخي اشكالات در نمايش غير فعال ميشود.

-linuxdd : در صورتي كه يك ديسك درايور لينوكس براي نصب داريد، از اين گزينه استفاده نماييد.

همچنين شما ميتوانيد با اضافه نمودن گزينه هاي ديگري به اعلان بوت لينوكس، آنرا وادار به شناسايي صحيح سخت افزار خود نماييد. مثلا در صورتي كه برنامه نصب اندازه ديسك سخت شما را تشخيص نمي دهد، ميتوانيد با مشخص كردن تعداد سيلندر، هد و سكتورها سايز آنرا تعيين كنيد. شما به صورت زير ميتوانيد گزينه هاي خود را به هسته لينوكس ارجاع دهيد : linux hd=720,32,64

در اين مثال شما به هسته ميگوييد كه ديسك سخت من داراي 720 سيلندر، 32 هد و 64 سكتور است. اين مشخصات را ميتوانيد از روي مستندات موجود با ديسك سخت خود و يا از روي برچسب چسبانده شده روي آن بدست آوريد.

-بررسي فايلها :

در لينوكس ردهت 8 قبل از شروع برنامه نصب، از شما پرسيده ميشود كه فايلهاي نصب براي صحت و درستي آنها بررسي شوند يا خير. در صورتي كه مطمئن نيستيد ديسكهاي شما صحيح هستند يا نه، ميتوانيد با اين گزينه آنها را بررسي نماييد. البته اين كار زمانبر خواهد بود. در صورتي كه به صحت آنها اطمينان داريد به سادگي گزينه Skip را انتخاب كنيد تا برنامه نصب آغاز شود.

-صفحه خوشامد گويي :

اين صفحه آغاز فرايند نصب را به شما اعلام ميكند. فقط كافي است روي كليد Next كليك نماييد.

-انتخاب زبان :

پس از آغاز برنامه نصب، اولين سوالي كه پرسيده ميشود، انتخاب زبان برنامه نصب است. زبان مورد نظر خود را انتخاب نموده و روي گزينه Next كليك نماييد.

-انتخاب صفحه كليد :

نوع صفحه كليد خود را انتخاب نماييد. مثلا صفحه كليد 105 كليد و با كليدهاي انگليسي.

-ماوس:

نوع ماوسي كه سيستمتان نصب شده است را انتخاب نماييد. انواع ماوسهاي درگاه سريال و PS/2 وUSB پشتيباني ميشوند. در صورتي كه ماوس شما دو كليد دارد، ميتوانيد با انتخاب گزينه Emulate 3 buttons، هنگام استفاده با نگه داشتن كليد Shift، كليد سوم ماوس را شبيه سازي نماييد. كليد سوم توسط برخي از برنامه هاي كاربردي لينوكس مورد نياز ميباشد.

-انتخاب نوع نصب (Install Type) :

در اين مرحله نوع نصب مورد نياز براي خود را بايد انتخاب نماييد. در صورتي كه لينوكس اكنون روي سيستم شما نصب شده و مايليد آنرا به نسخه جديد ارتقا دهيد، كافي است نصب نوع ارتقا (Upgrade) را انتخاب نماييد.

نكته : براي نصب به صورت ارتقا، لينوكس موجود شما حداقل بايد هسته نسخه 2.0 را داشته باشد. با نصب به صورت ارتقاع تمامي فايلهاي پيكريندي شما بصورت filename.rpmsave ذخيره خواهد شد. محل اين فايلها در مسير tmp/upgrade.log نوشته ميشود. برنامه ارتقا هسته جديد را نصب كرده و برنامه هاي نرم افزاري تغيير يافته را نيز نصب ميكند. فايلهاي اطلاعات شما بدون تغيير باقي خواهند ماند. اين نصب زمان بيشتري نياز دارد.

براي نصب بصورت جديد ميتوانيد يكي از گزينه هاي زير را انتخاب نماييد . اين گزينه ها به "كلاس هاي نصب" (Installation Classes) نيز موسوم هستند:

-ايستگاه كاري (Workstation): كامپيوتر شما را بصورت خودكار پارتيشن بندي نموده و بسته هاي نرم افزاري لازم براي يك ايستگاه كاري را نصب ميكند. يكي از محيطهاي گرافيكي GNOME و يا KDE نصب خواهند شد و برنامه X Window ساختارهاي لازم براي اجراي آنها را فراهم ميكند. محيطGNOME محيط گرافيكي پيش گزيده لينوكس ردهت است. شما ميتوانيد پس نصب محيط KDE را نيز نصب نماييد.

هشدار :هر گونه پارتيشن لينوكس موجود روي ديسك سخت و فضاي خالي ديسك سختتان به نصب Workstation و يا Personal Desktop اختصاص خواهند يافت. در صورتي كه روي كامپيوترتان پارتيشن هاي ويندوز موجود باشند، برنامه نصب آسيبي به آنها نخواهد رساند و پس از نصب شما قادر خواهيد بود از لينوكس در كنار ويندوز استفاده نماييد. در صورتي كه هيچگونه فضاي پارتيشن بندي نشده روي ديسك سخت شما وجود ندارد و تمام فضا به پارتيشن هاي ويندوز اختصاص داده شده، شما بايد از ابزار FIPS كه بعدا شرح داده خواهد شد استفاده نماييد. در غير اينصورت شما تمام پارتيشن هاي ويندوز خود را از دست خواهيد داد.

-سرويس دهنده (Server) : اين نصب بسته هاي مورد نياز جهت يك كامپيوتر سرويس دهنده را نصب ميكند. (مانند برنامه هاي سرويس دهنده وب، پست الكترونيك، فايل و...). اين نصب برنامه X Window را نصب نميكند. در صورتي كه نياز به محيط گرافيكي داريد بايد آنرا بعدا نصب نماييد و يا كار كردن با خط فرمان را ياد بگيريد! اين نصب تمام اطلاعات موجود در ديسك سخت را پاك كرده و تمام ديسكها را به لينوكس اختصاص ميدهد.

هشدار : حواستان بود؟ اگر متوجه نشده ايد : نصب بصورت سرويس دهنده تمام اطلاعات موجود روي ديسك سخت را پاك خواهد كرد! در صورتي كه نياز داريد پارتيشن هاي موجود ويندوز را حفظ نماييد، هنگام نصب پارتيشن بندي خودكار (Automatic Partitioning) را انتخاب نكنيد و خودتان بصورت دستي فضاهاي خالي را به لينوكس اختصاص دهيد.

-كامپيوتر شخصي (Personal Desktop) : اين نصب همانند نصب نوع ايستگاه كاري است با اين تفاوت كه برخي ابزارها كه براي كامپيوترهاي شخصي لازم نيستند را نصب نميكند و در صورتي كه لينوكس را روي يك كامپيوتر كيفي نصب ميكنيد، پشتيباني از PCMCIA و مادون قرمز (IrDa) نيز فعال خواهد شد.

-نصب بصورت سفارشي (Custom) : با انتخاب اين نوع نصب شما امكان انتخاب تك تك بسته هاي نرم افزاري مورد نياز و پارتيشن بندي دستي را خواهيد داشت.

نكته : در صورتي كه كاربري حرفه اي هستيد، نصب نوع سفارشي را انتخاب نماييد. با اين گزينه دست شما بازتر خواهد بود و از اينكه بهتر ميفهميد هنگام نصب چه ميگذرد حال بهتري خواهيد داشت!

برگفته از سايت :farsiedu.com
کيفيت مقاله :
عالی خوب متوسط ضعيف


﻿بحث ip ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۴ بيننده در حال حاضر
۱۰۲۹ مراجعه امروز
۴۸۴۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
﻿بحث ip
نويسنده : آراز صمدی
موضوع : Internet & Network [image] نسخه قابل چاپ
تاريخ نشر : ۱۲/۲/۱۳۸۳ اين مقاله ۷۳۲ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.
- Command Prompt چيست؟

در بسياري از درس‌هاي آينده از Command Prompt (خط فرمان) ويندوز استفاده خواهيم کرد. براي باز کردن آن يکي از روش‌هاي زير را به کار بريد:

?- مسير زير را در ويندوز طي کنيد:
Start > Programs > Accessories > Command Prompt
?- در قسمت Run بنويسيد: command يا cmd

- پيدا کردن ip يک سايت با دانستن آدرس اينترنتي آن (پيدا کردن ip سرور)

براي اين کار روشهاي مختلفي هست:

?- در (Internet Explorer (IE آدرس را تايپ کنيد و Enter را فشار دهيد. در قسمت پايين مرورگر يعني Status Bar پس از چند لحظه براي مدت کوتاهي ip نمايش داده مي‌شود و مي‌توانيد آنرا يادداشت کنيد. اگر طول اين مدت بسيار کوتاه است مي‌توانيد از صفحه عکس بگيريد ( با دکمه Print Screen ) و در يک نرم‌افزار گرافيکي بعد از باز کردن يک صفحه خالي به کمک Ctrl+V آنرا مشاهده کنيد. [ عجب راه احمقانه‌اي ;-)
اگر اين کار را براي www.yahoo.com انجام دهيم:

که همان شماره ip براي www.yahoo.com است.
نکته بسيار مهم اين است که به‌دليل ضريب اشتباه بسيار بالاي آن هيچ‌گاه از اين روش استفاده نکنيد. نتايج ممکن است کاملا اشتباه باشد که بعدا ميگم چرا.

?- دستور ping را در command prompt صادر کنيد:
ping domain
در اين حالت مي‌توانم ip آن سايت را ملاحظه کنم. (البته کار اصلي ping يک چيز ديگست و ميشه گفت داريم ازش سوءاستفاده مي‌کنيم). مثلا براي پيدا کردن ip سازين مي‌نويسم:
ping sazin.com
و جواب مي‌شنوم:
Pinging sazin.com [63.148.227.65] with 32 bytes of data:

Reply from 63.148.227.65: bytes=32 time=821ms TTL=111
Reply from 63.148.227.65: bytes=32 time=821ms TTL=111
Reply from 63.148.227.65: bytes=32 time=822ms TTL=111
Reply from 63.148.227.65: bytes=32 time=811ms TTL=111

Ping statistics for 63.148.227.65:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 811ms, Maximum =  822ms, Average =  818ms
ملاحظه مي‌فرماييد که ip سازين 63.148.227.65 است.
اگر دستور ping را به‌جاي sazin.com براي www.sazin.com صادر کنيد، جواب همان است. البته براي سايت‌هاي بزرگ جواب‌هاي حاصل متفاوت خواهد بود.

?- روش بعدي و کامل‌ترين روش whois کردن به بعضي سايت‌هاي خاص است. بعدا اين را کامل‌تر توضيح مي‌دم ولي فعلا روشش رو مي‌گم. آدرس زير را در مرورگر خود تايپ کنيد:
http://www.samspade.org/t/ipwhois?a=xxxxxx
که به‌جاي xxxxxx آدرس مورد نظر را تايپ کنيد. مثلا براي sazin.com يکي از دو آدرس زير را بايد تايپ کرد:
http://www.samspade.org/t/ipwhois?a=sazin.com
http://www.samspade.org/t/ipwhois?a=www.sazin.com
چيزي که در صفحه ظاهر مي‌شود به صورت زير است:
whois -h magic 63.148.227.65
sazin.com resolves to 63.148.227.65

Trying whois -h whois.arin.net 63.148.227.65
Qwest Communications NET-QWEST-BLKS-2 (NET-63-144-0-0-1)
                                  63.144.0.0 - 63.151.255.255
Neutron Digital Media Corp. QWST-63-148-224 (NET-63-148-224-0-1)
                                  63.148.224.0 - 63.148.231.255

# ARIN Whois database, last updated 2002-09-04 19:05
# Enter ? for additional hints on searching ARIN"s Whois database.
که آدرس ip در سطر اول و دوم ذکر شده است.

اگر دو روش آخر را براي سايت بزرگ yahoo انجام دهيم، نتايج زير را مي‌بينيم:
--> روش ping :
www.yahoo.com ====> 64.58.76.229
yahoo.com ====> 66.218.71.198
--> روش whois :
...و www.yahoo.com ====> 66.218.71.86
64.58.79.230 و yahoo.com ====> 66.218.71.198

نتايج حاصل گوياي آن است که چرا بهتر است از whois استفاده کنيم.

- تقسيم بندي آدرس‌هاي ip

آدرس‌هاي ip به ? کلاس تقسيم‌بندي مي‌شوند که A تا E نام‌ دارند ولي از اين بين سه کلاس اول (يعني C,B,A) کاربرد عملي دارند که آنها را شرح مي‌دهيم:

?- کلاس A: اگر ip را به‌صورت xxx.yyy.yyy.yyy در نظر بگيريد، اين کلاس تمام ipهايي را شامل مي‌شود که xxx بين ? تا ??? است. اين کلاس ويژه backbone هاي بزرگ اينترنتي است و در هنگام ثبت domain براي گرفتن ip از آنها استفاده مي‌شود. بنابراين اکثر سايت‌ها چنين ipهايي دارند. اين کلاس را 8/ هم مي‌گويند.

?- کلاس B: اين کلاس تمام ipهايي را شامل مي‌شود که xxx بين ??? و ??? است. اين کلاس هم از جمله کلاس‌هاي پرکاربرد است. اين کلاس را 16/ هم مي‌گويند.

?- کلاس C: اين اين کلاس تمام ipهاي را شامل مي‌شود که xxx بين ??? و ??? است. اين کلاس معمولا به ISP هايي که خدمات dial-up ارائه مي‌دهند، تعلق مي‌گيرد (اين جمله چندان مستند نيست.). بنابراين اگر به‌صورت dial-up به اينترنت متصل شويد، چنين ip مي‌گيريد. اين کلاس را 24/ هم مي‌گويند.

سوالي که پيش مي‌آيد اين است که xxx چرا نه در کلاس A و نه در B، عدد ??? را شامل نمي‌شود؟ جواب اين‌ است که ??? براي کامپيوتر خودمان رزرو شده است. مثلا 127.0.0.1 معمولا يعني localhost يعني خودمان.

- به‌دست آوردن ip خودتان بعد از اتصال به اينترنت

براي اين‌کار راههاي متفاوتي وجود دارد:

?- راحت‌ترين راه استفاده از دستور ipconfig است. من با تايپ کردن آن به نتايج زير رسيدم:
Windows 2000 IP Configuration

PPP adapter neda:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 217.66.198.116
        Subnet Mask . . . . . . . . . . . : 255.255.255.255
        Default Gateway . . . . . . . . . : 217.66.198.116
که آدرس ip تان را مي‌توانيد در سطر Ip Address ببينيد. (مسئله پروکسي را فعلا ناديده بگيريد)

?- بعد از اتصال به اينترنت حداقل يک صفحه باز کنيد و بعد دستور netstat -n را در command prompt تايپ کنيد. من با تايپ اين دستور به نتايج زير رسيدم:
Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    217.66.198.116:2469    64.58.76.177:80        ESTABLISHED
  TCP    217.66.198.116:2471    66.163.175.130:80      ESTABLISHED
  TCP    217.66.198.116:2473    212.73.194.143:80      ESTABLISHED
  TCP    217.66.198.116:2474    212.73.194.143:80      ESTABLISHED
  TCP    217.66.198.116:2476    212.73.194.136:80      SYN_SENT
ستوني که زير عبارت Local Address قرار دارد، ip من در آن اتصال است. بنابراين ip من در آن اتصال 217.66.198.116 بوده است.

- پيدا کردن ip طرف مقابل هنگام chat با yahoo messenger - اين روش قديمي شده، الان ديگه کار نمي‌کنه

مي‌خواهيم درباره يک کلاينت مثلا کسي که مثل شما يک اتصال مثلا dial-up به اينترنت دارد و فرضا دارد با شما chat مي‌کند، کسب اطلاعات کرد.
در اين مورد هم اولين نکته‌اي که بايد کشف شود، ip اوست. در اين جلسه مي‌خوام بهتون ياد بدم که وقتي با يه نفر از طريق yahoo messenger به صورت pm چت مي‌کنيد، چطوري مي‌تونيد ip اش رو پيدا کنيد. البته بايد توجه کرد که اين روش گاهي کار نمي‌کند. نيز فرض مي‌کنم که فقط با يک نفر داريد چت مي‌کنيد.
يکي از دستور‌هاي زير را تايپ مي‌کنيد:
netstat -n
netstat
دستور اولي براي پيدا کردن ip طرف مقابل است و دستور دوم گاه مي‌تواند اسم کامپيوتر او را براي شما نشان دهد.

من دستور netstat -n را تايپ کردم و به نتايج زير رسيدم:
Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    195.219.176.126:1296   66.163.173.77:5050     ESTABLISHED
  TCP    195.219.176.126:1341   66.218.75.149:80       LAST_ACK
  TCP    195.219.176.126:1325   212.234.112.74:5101    SYN_SENT
اولين کاري که مي‌کنيد اين است که سطري را پيدا مي‌کنيد که در Local Address يا Foreign Address آن، پورت 5101 داشته باشد. در اين مثال سطر آخر، سطر مورد نظر ماست. زيرا در ستون Foreign Address از سطر آخر، پورت آن 5101 است. البته اگر در ستون Local Address هم بود، فرقي نمي‌کرد. وقتي آن سطر را پيدا کرديد، ip طرف مقابل را از ستون Foreign Address از همان سطر پيدا مي‌کنيم. در اين مثال ip طرف مقابل 212.234.112.74 است.
اگر به‌جاي netstat -n ، از netstat استفاده مي‌کردم، به نتايج زير مي‌رسيدم:
Active Connections

Proto  Local Address          Foreign Address        State
TCP    artawill...:1296   cs55.msg.sc5.yahoo.com:5050  ESTABLISHED
TCP    artawill...:1298   dl3.yahoo.com:http         TIME_WAIT
TCP    artawill...:1325   Majid:5101                 SYN_SENT
ملاحظه مي‌فرماييد که همه ip ها به معادل هاي اسمي تبديل شده‌اند و در مورد همان سطر آخر به جاي ip طرف مقابل اسم کامپيوتر فرد را مي‌نويسد (البته در حالتي که طرف مقابل dial-up نباشد، قضيه فرق مي‌کند.)

حالا فرض کنيد که يک pm ديگر هم اضافه مي‌شود. و دوباره دستور netstat -n را تايپ مي‌کنم. حالا نتايج زير را مي‌بينم:
Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    195.219.176.126:1296   66.163.173.77:5050     ESTABLISHED
  TCP    195.219.176.126:1344   64.58.77.197:80        ESTABLISHED
  TCP    195.219.176.126:5101   212.234.112.74:3735    ESTABLISHED
  TCP    195.219.176.126:5101   194.225.184.95:1460    ESTABLISHED
الان دوتا سطر دارم که داراي پورت 5101 باشد، و چون مي‌دانم که 212.234.112.74 مربوط به نفر قبلي بود، پس 194.225.184.95 مربوط به pm دومي است.

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقایسه نحوی ۴ زبان حاضر در ویژوال استودیو(قسمت اول) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۷۶ مراجعه امروز
۴۹۹۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقایسه نحوی ۴ زبان حاضر در ویژوال استودیو(قسمت اول)
نويسنده : حسين پناهی
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۲/۱۳۸۳ اين مقاله ۱۲۹۲ بار مطالعه شده است
۲۲ نفر تا به حال به اين مقاله رای داده اند.

عريف متغيرها
Visual Basic
Dim x As Integer
Public x As Integer = 10
Java
int x;
int x = 10;
C++
int x;
int x = 10;
C#
int x;
int x = 10;
نوشتن توضيحات در برنامه
Visual Basic
' comment
x = 1 ' comment
Rem comment
Java
//
/* multiline
comment */
/**
Class Documentation
*/
C++
// comment
/* multiline
comment */
C#
// comment
/* multiline
comment */
انتساب
Visual Basic
nVal = 7
Java
nVal = 7;
C++
nVal = 7;
C#
nVal = 7;
دستورات شرطي
Visual Basic
If nCnt <= nMax Then
nTotal += nCnt ' Same as nTotal = nTotal + nCnt.
nCnt += 1 ' Same as nCnt = nCnt + 1.
Else
nTotal += nCnt
nCnt -= 1
End If
Java
if (nCnt <= nMax){
nTotal += nCnt;
nCnt++;
}
C++
if(nCnt < nMax) {
nTotal += nCnt;
nCnt++;
}
else {
nTotal += nCnt;
nCnt --;
};
C#
if (nCnt <= nMax)
{
nTotal += nCnt;
nCnt++;
}
else
{
nTotal +=nCnt;
nCnt--;
}
دستورات انتخابي
Visual Basic
Select Case n
Case 0
MsgBox ("Zero")
' Visual Basic .NET exits the Select at the end of a
'Case.\
Case 1
MsgBox ("One")
Case 2
MsgBox ("Two")
Case Else
MsgBox ("Default")
End Select
Java
switch(n) {
case 0:
System.out.println("Zero\n");
break;
case 1:
System.out.println("One\n");
break;
default:
System.out.println("?\n");
}
C++
switch(n) {
case 0:
printf("Zero\n");
break;
case 1:
printf("One\n");
break;
case 2:
printf("Two\n");
break;
default:
printf("?\n");}
C#
switch(n)
{
case 0:
Console.WriteLine("Zero");
break;
case 1:
Console.WriteLine("One");
break;
case 2:
Console.WriteLine("Two");
break;
default:
Console.WriteLine("?");
}
حلقه FOR
Visual Basic
For n = 1 To 10
MsgBox("The number is " & n)
Next

For Each prop In obj
prop = 42
Next prop
Java
for(n=1; n<11;n++)
System.out.println("The number is " + n);
C++
for(int n=1; n<11; n++)
printf("%d\n",n);
C#
for (int i = 1; i <= 10; i++)
Console.WriteLine("The number is {0}", i);
foreach(prop current in obj)
{
current=42;
}
حلقه While
Visual Basic
While n < 100 ' Test at start of loop.
n += 1 ' Same as n = n + 1.
End While
Java
while (n < 100)
n++;
C++
while(int n < 100)
n++;
C#
while (n < 100)
n++;

کيفيت مقاله :
عالی خوب متوسط ضعيف


مقایسه نحوی ۴ زبان حاضر در ویژوال استودیو(قسمت دوم) ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳ بيننده در حال حاضر
۱۱۷۹ مراجعه امروز
۴۹۹۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
مقایسه نحوی ۴ زبان حاضر در ویژوال استودیو(قسمت دوم)
نويسنده : حسين پناهی
موضوع : Misc [image] نسخه قابل چاپ
تاريخ نشر : ۲۹/۲/۱۳۸۳ اين مقاله ۸۷۷ بار مطالعه شده است
۱۰ نفر تا به حال به اين مقاله رای داده اند.

انتقال پارامترها با مقدار
Visual Basic
Public Sub ABC(ByVal y As Long)
...
آرگومان y با مقدارش منتقل ميشود. اگر زيربرنامه ي ABC مقدار y را تغيير دهداين تغييرات تاثيري بر روي x نخواهد داشت.
End Sub
ABC(x)
ABC((x))
شما ميتوانيد پارامترها را مجبور کنيد که با مقدار منتقل شوند بدون توجه به چگونگي تعريف آنها. اين کار را مي توانيد با گذاشتن يک جفت پرانتز () ديگر انجام دهيد.
Java
اشياء همواره با آدرس و انواع داده ي اوليه هميشه با مقدار منتقل ميشوند.
C++
MyMethod(i,j);
C#
توجه کنيد که هيچ راهي براي انتقال انواع مرجع (اشياء) منحصرا از طريق مقدار وجود ندارد.

يک متد تعريف شده:

void ABC(int x)
{
...
}
و فراخواني اين متد :
ABC(i);
انتقال پارامترها با آدرس
Visual Basic
Public Sub ABC(ByRef y As Long)
پارامتر y به صورت ByRef (با آدرس) شده است. اگر ABC مقدار y را تغيير دهد اين تغييرات روي x نيز صورت ميگيرد.
End Sub

ABC(x) Java
C++
< پروتوتايپ تابع ABC که شامل اشاره گري به يک عدد است.
int ABC(long *py);
ABC(&VAR);
پروتوتايپ تابع ABC که شامل ارجاعي به يک عدد است.
int ABC(long &y);
ABC(VAR);
C#
همنچنين توجه داشته باشيد که متد نامطمئن #C ميتواند مانند ++C شامل اشاره گر باشد. براي مثال اين متد:
void ABC(ref int x)
{
...
}
ABC(ref i);
مديريت استثنائات ساخت يافته
Visual Basic
Try
If x = 0 Then
Throw New Exception("x equals zero")
Else
Throw New Exception("x does not equal zero")
End If
Catch err As System.Exception
MsgBox("Error: " & Err.Description)
Finally
MsgBox("Executing finally block.")
End Try
Java
try{
if (x == 0)
throw new Exception ("x equals zero");
else
throw new Exception ("x does not equal zero");
}
catch (Exception err){
if (err.getMessage() == "x equals zero")
System.out.println(err.getMessage());
//Handle Error Here
}
C++
__try{
if (x == 0)
throw new Exception ("x equals zero");
else
throw new Exception ("x does not equal zero");
}
__catch(Exception e)
{
Console.WriteLine("Caught Exception");
}
__finally
{
Console.WriteLine("Executing finally block");
}
C#
// try-catch-finally
try
{
if (x == 0)
throw new System.Exception ("x equals zero");
else
throw new System.Exception ("x does not equal zero");
}
catch (System.Exception err)
{
System.Console.WriteLine(err.Message);
}
finally
{
System.Console.WriteLine("executing finally block");
}
رهاسازي ارجاعات اشياء
Visual Basic
o = Nothing
Java
stringVar = null;
C++
C#
o = null;

حسين پناهي (حسين گيتس)
Hossein_panahi@hotmail.com
Hossein_panahi@msn.com
http://hosseinpn.persianblog.com

کيفيت مقاله :
عالی خوب متوسط ضعيف


New Article ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۲۷۵ مراجعه امروز
۳۸۶۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

مقالات جديد


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۴۰۷ مراجعه امروز
۳۹۹۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : مديريت سايت
پست الکترونيک : mlesani@ganjafzar.com
وب سايت : http://www.irandevelopers.com
تاريخ عضويت : ۱۰/۸/۱۳۸۱
تعداد مقالات : ۲۹۱ مقاله
مقدمات زبان C
قسمت اول آموزش سي
C ,مديريت سايت,۷۸۲۶ بار خوانده شده,۱۹۱ رای دارد,۱۰/۸/۱۳۸۱
انواع داده
آموزش سي قسمت دوم
C ,مديريت سايت,۳۹۲۰ بار خوانده شده,۴۴ رای دارد,۱۰/۸/۱۳۸۱
متغير
آموزش سي قسمت سوم
C ,مديريت سايت,۳۲۹۷ بار خوانده شده,۲۶ رای دارد,۱۰/۸/۱۳۸۱
عملگرها
آموزش سي قسمت چهارم
C ,مديريت سايت,۳۰۸۷ بار خوانده شده,۲۰ رای دارد,۱۰/۸/۱۳۸۱
تبديل انواع
آموزش سي قسمت پنجم
C ,مديريت سايت,۲۹۱۲ بار خوانده شده,۱۵ رای دارد,۱۰/۸/۱۳۸۱
ساختمان زبان C و چند تابع ورودي خروجي
آموزش زبان سی قسمت ششم
C ,مديريت سايت,۲۸۷۷ بار خوانده شده,۱۵ رای دارد,۱۰/۸/۱۳۸۱
تابع ()printf
آموزش زبان سي قسمت هفتم
C ,مديريت سايت,۲۶۸۲ بار خوانده شده,۸ رای دارد,۱۰/۸/۱۳۸۱
تابع ()scanf
آموزش زبان سي قسمت هشتم
C ,مديريت سايت,۲۳۵۷ بار خوانده شده,۳ رای دارد,۱۰/۸/۱۳۸۱
خواندن يك كاراكتر از ورودي
آموزش سي قسمت نهم
C ,مديريت سايت,۲۴۳۹ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
نوشتن يك كاراكتر در خروجي
آموزش سي قسمت دهم
C ,مديريت سايت,۲۳۲۲ بار خوانده شده,۵ رای دارد,۱۰/۸/۱۳۸۱
ساختارهاي تكرار
آموزش سي قسمت يازدهم
C ,مديريت سايت,۲۴۹۵ بار خوانده شده,۱۰ رای دارد,۱۰/۸/۱۳۸۱
ساختارهاي تصميم
آموزش سي قسمت دوازدهم
C ,مديريت سايت,۲۳۳۵ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
توابع و كلاسهاي حافظه
آموزش سي قسمت سيزدهم
C ,مديريت سايت,۲۴۵۷ بار خوانده شده,۱۰ رای دارد,۱۰/۸/۱۳۸۱
توابعي كه هيچ مقداري را برنمي گردانند
آموزش سي قسمت چهاردهم
C ,مديريت سايت,۲۱۶۵ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
انواع فراخواني و مقاديري كه توابع برمي گردانند
آموزش سي قسمت پانزدهم
C ,مديريت سايت,۲۱۱۸ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
تعيين نوع تابع
آموزش سي قسمت شانزدهم
C ,مديريت سايت,۲۰۲۷ بار خوانده شده,۵ رای دارد,۱۰/۸/۱۳۸۱
كلاسهاي حافظه
آموزش سي قسمت هفدهم
C ,مديريت سايت,۲۱۶۸ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
آرايه ها
آموزش سي قسمت هجدهم
C ,مديريت سايت,۲۲۵۷ بار خوانده شده,۸ رای دارد,۱۰/۸/۱۳۸۱
ارزش دهي اوليه به آرايه ها
آموزش سي قسمت نوزدهم
C ,مديريت سايت,۱۹۹۰ بار خوانده شده,۳ رای دارد,۱۰/۸/۱۳۸۱
رشته ها
آموزش سي قسمت بيست و يکم
C ,مديريت سايت,۲۰۴۹ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
توابع ورودي خروجي رشته ها
آموزش سي قسمت بيست و دوم
C ,مديريت سايت,۱۸۳۲ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
آرايه اي از رشته ها
آموزش سي قسمت بيست و چهارم
C ,مديريت سايت,۱۸۶۷ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
بعضي از توابع رشته اي
آموزش سي قسمت بيست و پنجم
C ,مديريت سايت,۱۸۲۸ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
اشاره گرها
آموزش سي قسمت بيست و ششم
C ,مديريت سايت,۲۰۵۵ بار خوانده شده,۱۲ رای دارد,۱۰/۸/۱۳۸۱
عملگرهاي اشاره گر
آموزش سي قسمت بيست و هفتم
C ,مديريت سايت,۱۷۶۶ بار خوانده شده,۳ رای دارد,۱۰/۸/۱۳۸۱
اعمال روي اشاره گرها
آموزش سي قسمت بيست و هشتم
C ,مديريت سايت,۱۷۳۷ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
اشاره گر و آرايه
آموزش سي قسمت بيست و نهم
C ,مديريت سايت,۱۸۰۵ بار خوانده شده,۶ رای دارد,۱۰/۸/۱۳۸۱
اشاره گرها و رشته ها
آموزش سي قسمت سي
C ,مديريت سايت,۱۷۰۴ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
ارزش دهي اوليه رشته ها به عنوان اشاره گر
آموزش سي قسمت سي و يکم
C ,مديريت سايت,۱۷۲۲ بار خوانده شده,۲ رای دارد,۱۰/۸/۱۳۸۱
اشاره گر به اشاره گر
آموزش سي قسمت سي و دوم
C ,مديريت سايت,۱۶۷۶ بار خوانده شده,۶ رای دارد,۱۰/۸/۱۳۸۱
نكاتي در مورد اشاره گرها
آموزش سي قسمت سي و سوم
C ,مديريت سايت,۱۶۹۰ بار خوانده شده,۲ رای دارد,۱۰/۸/۱۳۸۱
آرگومانهاي تابع اصلي (()main)
آموزش سي قسمت سي و چهارم
C ,مديريت سايت,۱۷۶۵ بار خوانده شده,۷ رای دارد,۱۰/۸/۱۳۸۱
دستورات پيش پردازنده
آموزش سي قسمت سي و پنجم
C ,مديريت سايت,۱۶۸۱ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
تعريف ماكرو
آموزش سي قسمت سي و ششم
C ,مديريت سايت,۱۶۴۶ بار خوانده شده,۲ رای دارد,۱۰/۸/۱۳۸۱
ضميمه كردن فايل ها (file inclusion)
آموزش سي قسمت سي و هفتم
C ,مديريت سايت,۱۷۰۸ بار خوانده شده,۷ رای دارد,۱۰/۸/۱۳۸۱
دستورات پيش پردازنده شرطي
آموزش سي قسمت سي و هشتم
C ,مديريت سايت,۱۵۴۰ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
حذف ماكروهاي تعريف شده
آموزش سي قسمت سي و نهم
C ,مديريت سايت,۱۴۸۲ بار خوانده شده,۰ رای دارد,۱۰/۸/۱۳۸۱
اسامي ماكروهاي از پيش تعريف شده
آموزش سي قسمت چهلم
C ,مديريت سايت,۱۵۰۰ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
دستور پيش پردازنده #line
آموزش سي قسمت چهل و يکم
C ,مديريت سايت,۱۵۰۴ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
دستور پيش پردازنده # error
آموزش سي قسمت چهل و دوم
C ,مديريت سايت,۱۴۵۵ بار خوانده شده,۰ رای دارد,۱۰/۸/۱۳۸۱
ساختمان ها
آموزش سي قسمت چهل و سوم
C ,مديريت سايت,۱۶۱۶ بار خوانده شده,۵ رای دارد,۱۰/۸/۱۳۸۱
تعريف نوع ساختمان
آموزش سي قسمت چهل و چهارم
C ,مديريت سايت,۱۵۸۱ بار خوانده شده,۱۳ رای دارد,۱۰/۸/۱۳۸۱
دسترسي به اجزاي ساختمان
آموزش سي قسمت چهل و پنجم
C ,مديريت سايت,۱۵۶۹ بار خوانده شده,۰ رای دارد,۱۰/۸/۱۳۸۱
ارزش دهي اوليه به ساختمان
آموزش سي قسمت چهل و ششم
C ,مديريت سايت,۱۴۷۴ بار خوانده شده,۰ رای دارد,۱۰/۸/۱۳۸۱
انتساب ساختمانها به يكديگر
آموزش سي قسمت چهل و هفتم
C ,مديريت سايت,۱۴۳۹ بار خوانده شده,۲ رای دارد,۱۰/۸/۱۳۸۱
آرايه اي از ساختمانها
آموزش سي قسمت چهل و هشتم
C ,مديريت سايت,۱۴۵۰ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
تعريف ساختمان ها به صورت لانه اي
آموزش سي قسمت چهل و نهم
C ,مديريت سايت,۱۴۴۵ بار خوانده شده,۲ رای دارد,۲۰/۸/۱۳۸۱
انتقال ساختمان ها به توابع
آموزش سي قسمت پنجاهم
C ,مديريت سايت,۱۴۶۳ بار خوانده شده,۱ رای دارد,۲۰/۸/۱۳۸۱
اشاره گرهاي ساختمان
آموزش سي قسمت پنجاه و يکم
C ,مديريت سايت,۱۵۴۹ بار خوانده شده,۰ رای دارد,۲۰/۸/۱۳۸۱
ساختمان هاي بيتي
آموزش سي قسمت پنجاه و دوم
C ,مديريت سايت,۱۴۵۳ بار خوانده شده,۰ رای دارد,۲۱/۸/۱۳۸۱
unions
آموزش سي قسمت پنجاه و سوم
C ,مديريت سايت,۱۴۲۶ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
ساختماني از union
آموزش سي قسمت پنجاه و چهارم
C ,مديريت سايت,۱۴۵۰ بار خوانده شده,۰ رای دارد,۲۱/۸/۱۳۸۱
تغيير نام داده با typedef
آموزش سي قسمت پنجا ه و پنجم
C ,مديريت سايت,۱۴۱۴ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
نوعهاي داده شمارشي
آموزش سي قسمت پنجاه و ششم
C ,مديريت سايت,۱۳۸۲ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
فايلها
آموزش سي قسمت پنجاه و هفتم
C ,مديريت سايت,۱۵۷۱ بار خوانده شده,۵ رای دارد,۲۱/۸/۱۳۸۱
انواع فايل از نظر نوع اطلاعات
آموزش سي قسمت پنجاه و هشتم
C ,مديريت سايت,۱۵۵۳ بار خوانده شده,۱ رای دارد,۲۱/۸/۱۳۸۱
سازمان فايل
آموزش سي قسمت پنجاه و نهم
C ,مديريت سايت,۱۵۱۵ بار خوانده شده,۵ رای دارد,۲۱/۸/۱۳۸۱
باز كردن فايل
آموزش سي قسمت شصتم
C ,مديريت سايت,۱۴۶۳ بار خوانده شده,۴ رای دارد,۲۱/۸/۱۳۸۱
تابع ()fopen
آموزش سي قسمت شصت و يکم
C ,مديريت سايت,۱۴۴۱ بار خوانده شده,۱ رای دارد,۲۱/۸/۱۳۸۱
بستن فايل
آموزش سي قسمت شصت و دوم
C ,مديريت سايت,۱۳۶۲ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
ورودي خروجي كاراكترها
آموزش سي قسمت شصت و سوم
C ,مديريت سايت,۱۴۱۷ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
ورودي خروجي رشته ها
آموزش سي قسمت شصت و چهارم
C ,مديريت سايت,۱۳۹۲ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
فايل به عنوان وسيله ورودي خروجي
آموزش سي قسمت شصت و پنجم
C ,مديريت سايت,۱۴۱۵ بار خوانده شده,۱ رای دارد,۲۱/۸/۱۳۸۱
عيب يابي در ورودي خروجي فايل
آموزش سي قسمت شصت و ششم
C ,مديريت سايت,۱۳۸۶ بار خوانده شده,۱ رای دارد,۲۱/۸/۱۳۸۱
حذف فايل
آموزش سي قسمت شصت و هفتم
C ,مديريت سايت,۱۴۱۱ بار خوانده شده,۰ رای دارد,۲۱/۸/۱۳۸۱
بافر (buffer)
آموزش سي قسمت شصت و هشتم
C ,مديريت سايت,۱۵۶۳ بار خوانده شده,۴ رای دارد,۲۱/۸/۱۳۸۱
ورودي و خروجي همراه با فرمت
آموزش سي قسمت شصت و نهم
C ,مديريت سايت,۱۴۱۲ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
ورودي خروجي ركورد
آموزش سي قسمت هفتادم
C ,مديريت سايت,۱۶۸۵ بار خوانده شده,۳ رای دارد,۲۱/۸/۱۳۸۱
Datatype در VB (نوع داده )
آموزش ويژوال بيسيک قسمت پنجم
Visual Basic ,مديريت سايت,۱۰۷۶ بار خوانده شده,۶ رای دارد,۲۴/۸/۱۳۸۱
حل يك مساله از طريق فايلهاي ترتيبي
C ,مديريت سايت,۱۴۵۱ بار خوانده شده,۲ رای دارد,۲۹/۸/۱۳۸۱
دسترسي تصادفي به فايل ( ورودي خروجي تصادفي )
C ,مديريت سايت,۱۴۱۹ بار خوانده شده,۲ رای دارد,۲۹/۸/۱۳۸۱
حل يك مسئله ازطريق فايل تصادفي
C ,مديريت سايت,۱۴۹۸ بار خوانده شده,۶ رای دارد,۲۹/۸/۱۳۸۱
دستگاههاي ورودي خروجي استاندارد
C ,مديريت سايت,۱۳۷۸ بار خوانده شده,۲ رای دارد,۲۹/۸/۱۳۸۱
اسمبلي ياد بگيريم - 1
Assembley ,مديريت سايت,۱۵۷۱ بار خوانده شده,۱۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 10
Assembley ,مديريت سايت,۱۱۱۸ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 11
Assembley ,مديريت سايت,۱۰۲۰ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 12
Assembley ,مديريت سايت,۹۰۴ بار خوانده شده,۴ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي يلد بگيريم - 13
Assembley ,مديريت سايت,۸۷۴ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 14
Assembley ,مديريت سايت,۸۳۴ بار خوانده شده,۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 15
Assembley ,مديريت سايت,۸۵۴ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 16
Assembley ,مديريت سايت,۹۰۲ بار خوانده شده,۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 17
Assembley ,مديريت سايت,۸۳۸ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 18
Assembley ,مديريت سايت,۸۵۷ بار خوانده شده,۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 19
Assembley ,مديريت سايت,۷۸۷ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 2
Assembley ,مديريت سايت,۹۷۰ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 20
Assembley ,مديريت سايت,۷۸۶ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 21
Assembley ,مديريت سايت,۸۲۰ بار خوانده شده,۵ رای دارد,۳۰/۸/۱۳۸۱
برنامه نويسي در مد گرافيك
Assembley ,مديريت سايت,۸۳۰ بار خوانده شده,۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 23
Assembley ,مديريت سايت,۸۲۷ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 24
Assembley ,مديريت سايت,۸۱۲ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 25
Assembley ,مديريت سايت,۷۶۲ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 26
Assembley ,مديريت سايت,۷۸۱ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 27
Assembley ,مديريت سايت,۷۵۸ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 28
Assembley ,مديريت سايت,۸۰۲ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي
Assembley ,مديريت سايت,۹۴۵ بار خوانده شده,۸ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 3
Assembley ,مديريت سايت,۸۴۳ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 30
Assembley ,مديريت سايت,۸۳۶ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 4
Assembley ,مديريت سايت,۸۱۶ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 5
Assembley ,مديريت سايت,۱۰۵۰ بار خوانده شده,۱۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 6
Assembley ,مديريت سايت,۹۸۳ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 7
Assembley ,مديريت سايت,۸۷۰ بار خوانده شده,۶ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 8
Assembley ,مديريت سايت,۸۱۷ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 9
Assembley ,مديريت سايت,۴۴۱۱ بار خوانده شده,۶۰ رای دارد,۳۰/۸/۱۳۸۱
وابع كتابخانه اي ( قسمت اول )
C ,مديريت سايت,۱۵۶۲ بار خوانده شده,۱۰ رای دارد,۲/۹/۱۳۸۱
زمينه هاي پيدايش جاوا
Java ,مديريت سايت,۲۴۶۷ بار خوانده شده,۴۳ رای دارد,۳/۹/۱۳۸۱
انواع ساده The simple Types
Java ,مديريت سايت,۱۸۴۵ بار خوانده شده,۲۲ رای دارد,۳/۹/۱۳۸۱
integers ( اعداد صحيح )
Java ,مديريت سايت,۱۴۷۸ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اصل و نسب جاوا
Java ,مديريت سايت,۱۸۸۹ بار خوانده شده,۱۵ رای دارد,۳/۹/۱۳۸۱
انواع اعداد اعشاري
Java ,مديريت سايت,۱۴۳۷ بار خوانده شده,۷ رای دارد,۳/۹/۱۳۸۱
نگاهي دقيقتر به الفاظ
Java ,مديريت سايت,۱۳۲۳ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
متغيرها
Java ,مديريت سايت,۱۳۷۱ بار خوانده شده,۴ رای دارد,۳/۹/۱۳۸۱
ارتقائ خودكار انواع در عبارات
Java ,مديريت سايت,۱۲۳۶ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
آرايه ها
Java ,مديريت سايت,۱۲۹۱ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
چند كلمه اي درباره رشته ها (strings)
Java ,مديريت سايت,۱۲۰۴ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
يك نكته درباره اشاره گرها (pointers) به برنامه نويسان Cو C++و
Java ,مديريت سايت,۱۲۳۱ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اولين برنامه ساده
Java ,مديريت سايت,۱۵۹۲ بار خوانده شده,۱۲ رای دارد,۳/۹/۱۳۸۱
عملگرها
Java ,مديريت سايت,۱۱۷۰ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
عملگرهاي رابطه اي
Java ,مديريت سايت,۱۱۰۱ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
عملگرهاي منطقي بولي Boolean
Java ,مديريت سايت,۱۱۵۰ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
صحنه براي جاوا آماده شد
Java ,مديريت سايت,۱۳۱۵ بار خوانده شده,۷ رای دارد,۳/۹/۱۳۸۱
عملگر انتساب The Assignment Operator
Java ,مديريت سايت,۱۰۵۲ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
عملگر ?
Java ,مديريت سايت,۱۰۴۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از پرانتزها
Java ,مديريت سايت,۱۰۵۱ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
دستورات كنترلي
Java ,مديريت سايت,۱۰۸۸ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
دستورات انتخاب در جاوا
Java ,مديريت سايت,۱۱۳۹ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
دومين برنامه كوتاه
Java ,مديريت سايت,۱۰۹۰ بار خوانده شده,۴ رای دارد,۳/۹/۱۳۸۱
معرفي كلاسها
Java ,مديريت سايت,۱۲۳۶ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
بنيادهاي كلاس
Java ,مديريت سايت,۱۰۷۹ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
اعلان نمودن اشيائ
Java ,مديريت سايت,۱۰۶۹ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
انتساب متغيرهاي ارجاع شي ئ
Java ,مديريت سايت,۱۰۰۱ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
چرا جاوا براي اينترنت اهميت دارد
Java ,مديريت سايت,۱۴۸۳ بار خوانده شده,۷ رای دارد,۳/۹/۱۳۸۱
معرفي روشها
Java ,مديريت سايت,۹۷۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
سازندگان Constructors
Java ,مديريت سايت,۱۱۷۲ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
واژه كليدي This
Java ,مديريت سايت,۹۸۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
جمع آوري زباله Garbage collection
Java ,مديريت سايت,۱۰۵۳ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
روش ()finalize
Java ,مديريت سايت,۹۶۹ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
دو دستور كنترلي
Java ,مديريت سايت,۹۳۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
كلاس پشته A stack class
Java ,مديريت سايت,۹۷۸ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
نگاهي دقيق تر به روشها و كلاسها
Java ,مديريت سايت,۹۴۳ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
انباشتن روشها
Java ,مديريت سايت,۹۲۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از اشيائ بعنوان پارامترها
Java ,مديريت سايت,۹۲۲ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
نگاهي دقيق تر به گذر دادن آرگومانها
Java ,مديريت سايت,۹۱۹ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
جادوي جاوا كدهاي بايتي The Byte codes
Java ,مديريت سايت,۱۱۷۱ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
خود فراخواني يا برگشت پذيري Recursion
Java ,مديريت سايت,۹۴۰ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
تعريف كنترل دسترسي
Java ,مديريت سايت,۹۱۸ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
درك مفهوم static
Java ,مديريت سايت,۹۵۸ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
معرفي final
Java ,مديريت سايت,۸۹۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از بلوكهاي كد Blocks of code
Java ,مديريت سايت,۹۲۵ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
آرايه هاي دوباره ملاقات شده Arrays Revisited
Java ,مديريت سايت,۸۷۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
كشف كلاس رشته اي (string)
Java ,مديريت سايت,۸۸۴ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استفاده از آرگونهاي خط فرمان (Command-Line)
Java ,مديريت سايت,۸۶۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
وراثت inheritance
Java ,مديريت سايت,۹۶۶ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
مباني وراثت
Java ,مديريت سايت,۹۴۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از Super
Java ,مديريت سايت,۱۰۵۹ بار خوانده شده,۷ رای دارد,۳/۹/۱۳۸۱
خصلتهاي جاوا
Java ,مديريت سايت,۱۱۴۸ بار خوانده شده,۶ رای دارد,۳/۹/۱۳۸۱
ايجاد يك سلسله مراتب چند سطحي (Multilevel)
Java ,مديريت سايت,۸۷۹ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
وقتي كه سازندگان فراخواني مي شوند
Java ,مديريت سايت,۸۶۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
لغو ( يا جلوگيري از پيشروي ) روش
Java ,مديريت سايت,۸۵۲ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
فرهنگ لغات مطالب Lexical issues
Java ,مديريت سايت,۸۴۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
توزيع (dispatch) پوياي روش
Java ,مديريت سايت,۸۵۳ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از كلاسهاي مجرد (abstract)
Java ,مديريت سايت,۸۲۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از Final با وراثت
Java ,مديريت سايت,۸۱۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
بسته ها و رابطها
Java ,مديريت سايت,۸۳۸ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
بسته ها packages
Java ,مديريت سايت,۸۵۶ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
محافظت دسترسي Access protection
Java ,مديريت سايت,۸۳۰ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
وارد كردن بسته ها
Java ,مديريت سايت,۸۲۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
رابطها interfaces
Java ,مديريت سايت,۹۲۷ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اداره استثنائات
Java ,مديريت سايت,۷۶۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
كتابخانه هاي كلاس جاوا The Java class libraries
Java ,مديريت سايت,۹۰۸ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اصول اداره استثنائ
Java ,مديريت سايت,۷۹۳ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
انواع استثنائ
Java ,مديريت سايت,۸۶۵ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استثنائات گرفته نشده Uncaught Exceptions
Java ,مديريت سايت,۸۰۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از tryو catchو
Java ,مديريت سايت,۸۵۷ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
دستورات تودرتو شده try
Java ,مديريت سايت,۷۶۵ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
Throw
Java ,مديريت سايت,۸۲۱ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
finally
Java ,مديريت سايت,۸۲۴ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استثنائات توكار جاوا
Java ,مديريت سايت,۸۱۴ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
مروري بر جاوا
Java ,مديريت سايت,۸۹۵ بار خوانده شده,۴ رای دارد,۳/۹/۱۳۸۱
ايجاد نمودن زير كلاسهاي استثنائ مربوط به خودتان
Java ,مديريت سايت,۸۲۰ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
نواع داده ها ، متغيرها و آرايه ها
Java ,مديريت سايت,۸۱۵ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استفاده از استثنائات
Java ,مديريت سايت,۷۸۵ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
برنامه نويسي چند نخ كشي شده Multithreaded programming
Java ,مديريت سايت,۸۹۷ بار خوانده شده,۶ رای دارد,۳/۹/۱۳۸۱
مدل نخ در جاوا
Java ,مديريت سايت,۹۲۱ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
نخ اصلي The Main Thread
Java ,مديريت سايت,۸۳۲ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
ايجاد يك نخ
Java ,مديريت سايت,۸۶۶ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
ايجاد نخ هاي چندگانه
Java ,مديريت سايت,۸۶۵ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استفاده از ()isAlive و ()join
Java ,مديريت سايت,۷۸۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از ()suspend و ()resume
Java ,مديريت سايت,۸۲۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
تقدمهاي نخ
Java ,مديريت سايت,۸۶۴ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
برنامه نويسي شي ئ گرا
Java ,مديريت سايت,۱۴۶۷ بار خوانده شده,۱۱ رای دارد,۳/۹/۱۳۸۱
جاوا يك زبان كاملا" نوع بندي شده است
Java ,مديريت سايت,۸۵۰ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
همزمان سازي Synchronization
Java ,مديريت سايت,۹۲۰ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
استفاده از چند نخ كشي كردن
Java ,مديريت سايت,۸۳۷ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
I/o، applets، و ساير عناوين
Java ,مديريت سايت,۸۴۶ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اصول I/o
Java ,مديريت سايت,۹۸۵ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
اصول ريزبرنامه ها applets
Java ,مديريت سايت,۹۲۲ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اصلاحگرهاي ناپايدار و فرار The Transient and volatile Modifiers
Java ,مديريت سايت,۷۸۸ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استفاده از instanceof
Java ,مديريت سايت,۸۳۱ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
كامپيوترهاي الكترونيكي
FORTRAN ,مديريت سايت,۵۹۱ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
تاريخچه كامپيوتر
FORTRAN ,مديريت سايت,۱۱۴۴ بار خوانده شده,۳۱ رای دارد,۳/۹/۱۳۸۱
انواع كامپيوتر
FORTRAN ,مديريت سايت,۴۷۴ بار خوانده شده,۰ رای دارد,۳/۹/۱۳۸۱
قسمتهاي اصلي كامپيوتر رقمي
FORTRAN ,مديريت سايت,۴۷۲ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
مراحل حل يك مسئله بكمك كامپيوتر
FORTRAN ,مديريت سايت,۴۵۵ بار خوانده شده,۰ رای دارد,۳/۹/۱۳۸۱
مراحل حل يك مسئله بكمك كامپيوتر
FORTRAN ,مديريت سايت,۴۳۳ بار خوانده شده,۰ رای دارد,۳/۹/۱۳۸۱
انتقال و تبديل اطلاعات
FORTRAN ,مديريت سايت,۵۷۷ بار خوانده شده,۵ رای دارد,۴/۹/۱۳۸۱
دستور محاسباتي
FORTRAN ,مديريت سايت,۴۸۸ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
علامتهاي زبان فرترن
FORTRAN ,مديريت سايت,۵۲۸ بار خوانده شده,۳ رای دارد,۴/۹/۱۳۸۱
دستورهاي محاسباتي
FORTRAN ,مديريت سايت,۴۸۲ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
متغيرها و ثابت ها
FORTRAN ,مديريت سايت,۴۸۶ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ترتيب انجام عملهاي اصلي
FORTRAN ,مديريت سايت,۴۶۳ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
مود
FORTRAN ,مديريت سايت,۴۳۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
تابع هاي رياضي
FORTRAN ,مديريت سايت,۶۴۵ بار خوانده شده,۱۱ رای دارد,۴/۹/۱۳۸۱
ترتيب نوشتن دستورهاي رياضي
FORTRAN ,مديريت سايت,۵۱۰ بار خوانده شده,۲ رای دارد,۴/۹/۱۳۸۱
دستورهاي ورودي و خروجي
FORTRAN ,مديريت سايت,۴۵۱ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
دستور فرمت
FORTRAN ,مديريت سايت,۴۵۲ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
طرز تنظيم برنامه
FORTRAN ,مديريت سايت,۴۳۷ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
فرم كد گذاري
FORTRAN ,مديريت سايت,۴۴۹ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
آماده ساختن برنامه براي اجرا
FORTRAN ,مديريت سايت,۴۳۵ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
انتقال كنترل
FORTRAN ,مديريت سايت,۴۴۳ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور GO TO
FORTRAN ,مديريت سايت,۴۳۹ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور IF محاسباتي
FORTRAN ,مديريت سايت,۴۰۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ميدان E
FORTRAN ,مديريت سايت,۴۵۸ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ميدان X
FORTRAN ,مديريت سايت,۴۷۰ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
جدا كردن ميدانها
FORTRAN ,مديريت سايت,۴۴۳ بار خوانده شده,۲ رای دارد,۴/۹/۱۳۸۱
دستور DO
FORTRAN ,مديريت سايت,۴۱۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
حلقه هاي DO متداخل
FORTRAN ,مديريت سايت,۳۸۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
متغيرهاي زير نويس دار
FORTRAN ,مديريت سايت,۴۳۷ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
رشته ها
FORTRAN ,مديريت سايت,۴۰۶ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
نمايش رشته ها در فرترن
FORTRAN ,مديريت سايت,۴۵۷ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
دستور DIMENSION
FORTRAN ,مديريت سايت,۴۱۶ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
حلقه DO ضمني
FORTRAN ,مديريت سايت,۴۳۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ورود و خروج رشته هاي دو بعدي
FORTRAN ,مديريت سايت,۴۳۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
صورتهاي مجاز زيرنويسها
FORTRAN ,مديريت سايت,۴۱۸ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ورود و خروج رشته ها بدون استفاده از زيرنويس
FORTRAN ,مديريت سايت,۴۱۶ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
نكات ديگر درباره انتقال رشته ها
FORTRAN ,مديريت سايت,۴۲۳ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
برنامه هاي فرعي
FORTRAN ,مديريت سايت,۴۱۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
توابع آماده شده
FORTRAN ,مديريت سايت,۴۳۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
تابع يك جمله اي
FORTRAN ,مديريت سايت,۴۳۵ بار خوانده شده,۲ رای دارد,۴/۹/۱۳۸۱
برنامه فرعي FUNCTION
FORTRAN ,مديريت سايت,۴۵۸ بار خوانده شده,۲ رای دارد,۴/۹/۱۳۸۱
برنامه فرعي SUBROUTINE
FORTRAN ,مديريت سايت,۴۴۰ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
دستورهاي تعيين نوع
FORTRAN ,مديريت سايت,۴۲۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ميدان A
FORTRAN ,مديريت سايت,۴۱۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور GO TO محاسبه شده
FORTRAN ,مديريت سايت,۴۳۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور IF منطقي
FORTRAN ,مديريت سايت,۳۹۲ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور EQUIVALENCE
FORTRAN ,مديريت سايت,۳۸۷ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور COMMON
FORTRAN ,مديريت سايت,۴۲۵ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور DATA
FORTRAN ,مديريت سايت,۴۱۶ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ترتيب قرار دادن دستورهاي غير قابل اجرا
FORTRAN ,مديريت سايت,۴۳۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
RAID چيست؟
Misc ,مديريت سايت,۶۰۳ بار خوانده شده,۴ رای دارد,۸/۱۱/۱۳۸۱
تغييرات در رجيستری ويندوز توسط فايلهای رجيستری
ساختار فايلهای رجيستری
Windows ,مديريت سايت,۸۴۶ بار خوانده شده,۷ رای دارد,۱۰/۱۱/۱۳۸۱
بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
طريقه بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
Delphi ,مديريت سايت,۶۷۸۸ بار خوانده شده,۷۶ رای دارد,۱۳/۱۱/۱۳۸۱
25 نكته امنيتی در شبكه هاي ويندوز2000
Windows ,مديريت سايت,۸۷۹ بار خوانده شده,۱۵ رای دارد,۱۳/۱۱/۱۳۸۱
MSN مسنجر چگونه کار می کند؟
روش کار MSN مسنجر - دستورات و روش برنامه نويسی
Internet & Network ,مديريت سايت,۳۶۱۹ بار خوانده شده,۸۰ رای دارد,۲۲/۱۱/۱۳۸۱
چگونه از فايلهاى PDF در دلفى استفاده كنيم؟
يك مقاله مختصر راجع به نمايش PDF در برنامه‌هايتان!
Delphi ,مديريت سايت,۲۹۳۵ بار خوانده شده,۱۹ رای دارد,۶/۱۲/۱۳۸۱
لينوکس و ويندوز , در کنار هم
Misc ,مديريت سايت,۷۰۶ بار خوانده شده,۹ رای دارد,۱۹/۱۲/۱۳۸۱
نكاتي در مورد برنامه هاي كاربردي تحت وب
سری مقالات آموزش ASP پيشرفته شماره 1
ASP ,مديريت سايت,۳۷۲۴ بار خوانده شده,۲۲ رای دارد,۲۲/۱۲/۱۳۸۱
نكاتي در مورد برنامه هاي كاربردي تحت وب 2
سری مقالات آموزش ASP پيشرفته شماره 2
ASP ,مديريت سايت,۳۲۳۰ بار خوانده شده,۱۵ رای دارد,۰/۱/۱۳۸۲
Web Cache
Misc ,مديريت سايت,۵۹۵ بار خوانده شده,۳ رای دارد,۴/۱/۱۳۸۲
XML و ده نکته مهم
Windows ,مديريت سايت,۶۵۳ بار خوانده شده,۲ رای دارد,۱۵/۱/۱۳۸۲
ده نکته در رابطه با XML - DOM
Windows ,مديريت سايت,۴۸۲ بار خوانده شده,۰ رای دارد,۱۵/۱/۱۳۸۲
ده نکته در رابطه با XSL
نکاتی در مورد xls و قابليتهای آن
Misc ,مديريت سايت,۵۳۷ بار خوانده شده,۲ رای دارد,۱۹/۱/۱۳۸۲
149 راز در Internet Explorer
قسمت اول...
Misc ,مديريت سايت,۹۹۵ بار خوانده شده,۵ رای دارد,۲۱/۱/۱۳۸۲
149 راز در Internet Explorer
قسمت دوم ...
Misc ,مديريت سايت,۹۲۷ بار خوانده شده,۱ رای دارد,۲۱/۱/۱۳۸۲
149 راز در Internet Explorer
قسمت سوم...
Misc ,مديريت سايت,۸۳۷ بار خوانده شده,۴ رای دارد,۲۱/۱/۱۳۸۲
XML چيست و چرا داراي اهميت فراوان است ؟
( بخش سوم)
Misc ,مديريت سايت,۷۵۲ بار خوانده شده,۴ رای دارد,۲۲/۱/۱۳۸۲
XML چيست و چرا داراي اهميت فراوان است ؟
بخش دوم
Misc ,مديريت سايت,۵۵۹ بار خوانده شده,۳ رای دارد,۲۷/۱/۱۳۸۲
XML چيست و چرا داراي اهميت فراوان است ؟
بخش اول
Misc ,مديريت سايت,۵۴۵ بار خوانده شده,۱ رای دارد,۲۷/۱/۱۳۸۲
شيء Response
سری آموزش ASP
ASP ,مديريت سايت,۳۰۵۳ بار خوانده شده,۷ رای دارد,۲۹/۱/۱۳۸۲
MSN مسنجر چگونه کار می کند؟
قسمت دوم ... ( روشهای برقراری ارتباط با سرور)
Internet & Network ,مديريت سايت,۶۴۸ بار خوانده شده,۵ رای دارد,۲۹/۱/۱۳۸۲
DOM چيست ؟
DOM)Document Object Model) يک رابط برنامه نويسي....
DHTML ,مديريت سايت,۲۰۲۴ بار خوانده شده,۹ رای دارد,۲۹/۱/۱۳۸۲
نحوه برقراری ارتباط با پروتکل Yahoo Messenger
در اين مقاله خواهيد آموخت که چگونه يک برنامه برای برقراری ارتباط با ياهو مسنجر بنويسيد
Delphi ,مديريت سايت,۲۹۱۵ بار خوانده شده,۲۵ رای دارد,۲۹/۱/۱۳۸۲
نصب Codec در ويندوز
در اين مقاله ياد خواهيد گرفت که چگونه Codec را برای کاربران نهايي خود نصب کنيد
Windows ,مديريت سايت,۸۵۱ بار خوانده شده,۵ رای دارد,۱/۲/۱۳۸۲
اجراي برنامه ها از دلفي ( دستور ShellExecute)
در اين مقاله طريقه اجرا يا باز کردن نرم افزار هاي خارج از محيط دلفي را با استفاده از تابع API ويندوز ShellExecute را ياد خواهيد گرفت
Delphi ,مديريت سايت,۲۷۴۳ بار خوانده شده,۲۱ رای دارد,۲/۲/۱۳۸۲
رجيستر کردن Activex يا Dll در دلفي
در اين مقاله ياد خواهيد گرفت که چگونه با استفاده از کد نويسي در دلفي Activex يا dll مورد نياز برنامه خود را در دستگاه کاربرانتان نصب کنيد.
Delphi ,مديريت سايت,۲۳۸۵ بار خوانده شده,۸ رای دارد,۳/۲/۱۳۸۲
اتصال شبکه شما به اينترنت
در اين مقاله ياد خواهيد گرفت که چگونه کامپيوترهای شبکه خود را با استفاده از dialup به اينترنت متصل کنيد
Internet & Network ,مديريت سايت,۴۸۰۸ بار خوانده شده,۱۲۳ رای دارد,۱۶/۲/۱۳۸۲
ارسال ايميل در ASP با استفاده از آبجکت CDONTS
طريقه استفاده از CDONT در ASP
ASP ,مديريت سايت,۳۹۰۸ بار خوانده شده,۵۵ رای دارد,۳۰/۲/۱۳۸۲
رجيستري چيست؟
مفاهيم اصلی رجيستری ويندوز
Windows ,مديريت سايت,۸۴۸ بار خوانده شده,۱۴ رای دارد,۱۰/۳/۱۳۸۲
تاريخچه مختصري در مورد فايلهاي پيکر بندي
فايلهای ثبت در ويندوز...
Windows ,مديريت سايت,۶۲۷ بار خوانده شده,۴ رای دارد,۱۰/۳/۱۳۸۲
Import و Export کردن تنظيمات رجيستري
طريقه کار با رجيستری ويندوز ...
Windows ,مديريت سايت,۶۰۹ بار خوانده شده,۰ رای دارد,۱۳/۳/۱۳۸۲
ساختار رجيستري
رجيستري داراي يک ساختار درختي است ...
Windows ,مديريت سايت,۶۴۱ بار خوانده شده,۲ رای دارد,۲۰/۳/۱۳۸۲
ويرايش رجيستری
ويرايش رجيستری در ويندوز ...
Windows ,مديريت سايت,۵۷۹ بار خوانده شده,۴ رای دارد,۲۰/۳/۱۳۸۲
نگهداري از رجيستري
چطور مي توان از رجيستري فايل پشتيبان تهيه کرد و در مواقع ضروري از اين فايل ها استفاده کرد؟
Windows ,مديريت سايت,۵۹۷ بار خوانده شده,۳ رای دارد,۲۰/۳/۱۳۸۲
امکان حذف اجزاء و ملحقات ويندوز ( در ويندوز XP)
در ويندوز اجزائي وجود دارد که بطور معمول در ليست Add/Remove....
Windows ,مديريت سايت,۷۹۹ بار خوانده شده,۴ رای دارد,۲۷/۳/۱۳۸۲
سری آموزش PHP
فصل اول
PHP ,مديريت سايت,۱۱۲۸ بار خوانده شده,۸ رای دارد,۲۵/۴/۱۳۸۲
انواع داده های Windows و دلفی
در اين مقاله انواع داده های ويندوز و مشابه آن در دلفی را خواهيد آموخت
Delphi ,مديريت سايت,۲۶۸۸ بار خوانده شده,۳۴ رای دارد,۱۷/۵/۱۳۸۲
كامل ترين مرجع خطاهاي مودم(1)
600 . اگر سيستم در حال شماره گيري باشد ...
Misc ,مديريت سايت,۹۶۰ بار خوانده شده,۱۴ رای دارد,۱۲/۲/۱۳۸۳
كامل ترين مرجع خطاهاي مودم(2)
731 . پروتكل پيكر بندي نمي شود
Misc ,مديريت سايت,۷۳۵ بار خوانده شده,۵ رای دارد,۱۲/۲/۱۳۸۳
كامل ترين مرجع خطاهاي مودم(3)
خطاي DUNS 629
Misc ,مديريت سايت,۶۹۱ بار خوانده شده,۷ رای دارد,۱۲/۲/۱۳۸۳
كامل ترين مرجع خطاهاي مودم(4)
خطاي DUNS 678 و 679
Misc ,مديريت سايت,۳۷۶ بار خوانده شده,۱ رای دارد,۱۲/۲/۱۳۸۳
آموزش نصب لینوکس بخش 1
راهنماي پيشرفته نصب لينوكس ردهت نسخه 8
Misc ,مديريت سايت,۴۹۳ بار خوانده شده,۷ رای دارد,۱۲/۲/۱۳۸۳
آموزش نصب لینوکس بخش 2
نكته: اگر شما صفحه خوشامد گويي را...
Misc ,مديريت سايت,۳۴۴ بار خوانده شده,۱ رای دارد,۱۲/۲/۱۳۸۳


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۴۴۹ مراجعه امروز
۴۰۴۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : محمد امدادی
پست الکترونيک : m_emdadi@yahoo.com m_emdadi@yahoo.com
وب سايت :
تاريخ عضويت : ۲۴/۸/۱۳۸۱
تعداد مقالات : ۴ مقاله
آشنايي با محيط ويژوال بيسيك
آموزش ويژوال بيسيک قسمت اول
Visual Basic ,محمد امدادی,۱۶۰۵ بار خوانده شده,۲۸ رای دارد,۲۴/۸/۱۳۸۱
معرفي چند كنترل مهم
آموزش ويژوال بيسيک قسمت دوم
Visual Basic ,محمد امدادی,۱۱۵۷ بار خوانده شده,۱۴ رای دارد,۲۴/۸/۱۳۸۱
رويدادهاي مهم
آموزش ويژوال بيسيک قسمت سوم
Visual Basic ,محمد امدادی,۱۰۷۷ بار خوانده شده,۸ رای دارد,۲۴/۸/۱۳۸۱
ايجاد منوها
آموزش ويژوال بيسيک قسمت چهارم
Visual Basic ,محمد امدادی,۱۰۰۰ بار خوانده شده,۹ رای دارد,۲۴/۸/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۵۰ مراجعه امروز
۵۱۶۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near '='.

/author.asp, line 80


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۴۷۶ مراجعه امروز
۴۰۶۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : مدرسه وب
پست الکترونيک :
وب سايت : http://www.khaterat.com/www
تاريخ عضويت : ۲۴/۸/۱۳۸۱
تعداد مقالات : ۲۰ مقاله
مقدمه اي بر HTML
HTML ,مدرسه وب,۵۷۳۱ بار خوانده شده,۱۳۵ رای دارد,۲۴/۸/۱۳۸۱
HTML & WWW
HTML ,مدرسه وب,۳۳۹۸ بار خوانده شده,۵۰ رای دارد,۲۴/۸/۱۳۸۱
عناصر ( Elements )
HTML ,مدرسه وب,۲۹۶۴ بار خوانده شده,۱۸ رای دارد,۲۴/۸/۱۳۸۱
تگ های اصلی ( Basic Tags )
HTML ,مدرسه وب,۳۱۹۵ بار خوانده شده,۲۷ رای دارد,۲۴/۸/۱۳۸۱
فارسی نويسی
HTML ,مدرسه وب,۵۵۴۰ بار خوانده شده,۵۹ رای دارد,۲۴/۸/۱۳۸۱
فرمت دهی ( Formatting )
HTML ,مدرسه وب,۲۴۹۷ بار خوانده شده,۹ رای دارد,۲۴/۸/۱۳۸۱
Character Entities
HTML ,مدرسه وب,۲۲۶۴ بار خوانده شده,۳ رای دارد,۲۴/۸/۱۳۸۱
پيوندهای اچتمل ( HTML Links )
HTML ,مدرسه وب,۲۳۶۵ بار خوانده شده,۸ رای دارد,۲۴/۸/۱۳۸۱
جداول ( Tables)
HTML ,مدرسه وب,۲۳۵۰ بار خوانده شده,۸ رای دارد,۲۴/۸/۱۳۸۱
فريمها ( Frames )
HTML ,مدرسه وب,۲۱۸۰ بار خوانده شده,۷ رای دارد,۲۴/۸/۱۳۸۱
فهرستها ( Lists )
HTML ,مدرسه وب,۲۱۴۸ بار خوانده شده,۴ رای دارد,۲۴/۸/۱۳۸۱
فرمها ( Forms )
HTML ,مدرسه وب,۲۳۷۳ بار خوانده شده,۱۱ رای دارد,۲۴/۸/۱۳۸۱
تصاوير ( Images )
HTML ,مدرسه وب,۲۲۷۹ بار خوانده شده,۱۴ رای دارد,۲۴/۸/۱۳۸۱
پس زمينه ( Background )
HTML ,مدرسه وب,۲۰۶۶ بار خوانده شده,۴ رای دارد,۲۴/۸/۱۳۸۱
قلم ها ( HTML Fonts )
HTML ,مدرسه وب,۲۰۳۲ بار خوانده شده,۴ رای دارد,۲۴/۸/۱۳۸۱
استایل شیتها ( Style Sheets )
HTML ,مدرسه وب,۲۰۷۳ بار خوانده شده,۹ رای دارد,۲۴/۸/۱۳۸۱
HTML Reference
HTML ,مدرسه وب,۲۰۴۶ بار خوانده شده,۶ رای دارد,۲۴/۸/۱۳۸۱
رنگها در اچ تي ام ال
HTML ,مدرسه وب,۲۰۴۳ بار خوانده شده,۱۶ رای دارد,۲۴/۸/۱۳۸۱
برگه تقلب اچتمل
HTML ,مدرسه وب,۲۲۷۲ بار خوانده شده,۲۳ رای دارد,۲۴/۸/۱۳۸۱
مرجع نکات فني وب
HTML ,مدرسه وب,۲۲۲۳ بار خوانده شده,۱۲ رای دارد,۲۵/۸/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۴۸۲ مراجعه امروز
۴۰۷۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : عليرضا سرمدی
پست الکترونيک : sarmadi@schoolnet.ir
وب سايت :
تاريخ عضويت : ۱۲/۹/۱۳۸۱
تعداد مقالات : ۰ مقاله
نام و نام خانوادگی : سيد احمد موسوی
پست الکترونيک : mousavi@ganjafzar.com
وب سايت :
تاريخ عضويت : ۱۳/۱۰/۱۳۸۱
تعداد مقالات : ۰ مقاله


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۳۹۵ مراجعه امروز
۵۲۱۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near '='.

/author.asp, line 80


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۴۹۷ مراجعه امروز
۴۰۸۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : صادق علوی زاده
پست الکترونيک : virgo_ir@hotmail.com
وب سايت :
تاريخ عضويت : ۲۶/۱۰/۱۳۸۱
تعداد مقالات : ۲ مقاله
طريقه استفاده از Microsoft Agent در دلفی
چگونگی استفاده از اجنت ميکروسافت در دلفی
Delphi ,صادق علوی زاده,۵۵۷۷ بار خوانده شده,۸۱ رای دارد,۲۶/۱۰/۱۳۸۱
نكات مفيد براي كار در محيط دلفي
Delphi IDE Tips
Delphi ,صادق علوی زاده,۳۲۴۴ بار خوانده شده,۳۱ رای دارد,۱۳/۳/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۵۱۸ مراجعه امروز
۴۱۱۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : مجله رايانه
پست الکترونيک : info@rayanehmag.com
وب سايت : http://www.rayanehmag.com
تاريخ عضويت : ۹/۱۱/۱۳۸۱
تعداد مقالات : ۴ مقاله
رموز Windows
Misc ,مجله رايانه,۳۰۶۶ بار خوانده شده,۴۹ رای دارد,۸/۱۱/۱۳۸۱
DataSnap, WebSnap
Delphi ,مجله رايانه,۲۸۲۸ بار خوانده شده,۲۱ رای دارد,۸/۱۱/۱۳۸۱
Interface ويندوز را به دلخواه تغيير دهيد
Misc ,مجله رايانه,۵۶۷ بار خوانده شده,۳ رای دارد,۸/۱۱/۱۳۸۱
مالتي بوت كردن PC
Misc ,مجله رايانه,۴۰۴۷ بار خوانده شده,۶۳ رای دارد,۸/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۵۲۱ مراجعه امروز
۴۱۱۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : نازيلا دنيائي
پست الکترونيک : -
وب سايت : -
تاريخ عضويت : ۸/۱۱/۱۳۸۱
تعداد مقالات : ۲ مقاله
حذف email در Server با C++
با استفاده از Indy يك برنامه براي email مي‌خواهيم بسازيم.
Visual C++ ,نازيلا دنيائي,۷۸۲ بار خوانده شده,۷ رای دارد,۸/۱۱/۱۳۸۱
چگونه بينندگان Web Site خود را افزايش دهيد؟
Misc ,نازيلا دنيائي,۴۹۰ بار خوانده شده,۵ رای دارد,۸/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۴۱۹ مراجعه امروز
۴۰۱۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : احمد عدالت
پست الکترونيک : -
وب سايت : -
تاريخ عضويت : ۸/۱۱/۱۳۸۱
تعداد مقالات : ۱ مقاله
بكاربردن XML در نرم‌افزارهاي بانك‌اطلاعاتي دلفي
در شماره‌هاي قبلي شما با XML آشنا شديد
Delphi ,احمد عدالت,۳۱۵۱ بار خوانده شده,۲۴ رای دارد,۸/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۴۲۲ مراجعه امروز
۴۰۱۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : رامين حيدري
پست الکترونيک : -
وب سايت : -
تاريخ عضويت : ۸/۱۱/۱۳۸۱
تعداد مقالات : ۱ مقاله
آسيب‌پذيري Login ID در SQL Server 7.0
SQL ,رامين حيدري,۳۰۷۰ بار خوانده شده,۳۷ رای دارد,۸/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۴۲۵ مراجعه امروز
۴۰۱۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : محمد باقر معموری
پست الکترونيک : mamouri@ganjafzar.com
وب سايت : -
تاريخ عضويت : ۸/۱۱/۱۳۸۱
تعداد مقالات : ۲۹ مقاله
تاريخچه پاسكال
Delphi ,محمد باقر معموری,۲۲۳۵ بار خوانده شده,۳۸ رای دارد,۹/۱۱/۱۳۸۱
آموزش دلفی قسمت دوم
سری مقالات آموزشی دلفی
Delphi ,محمد باقر معموری,۶۰۸۸ بار خوانده شده,۸۶ رای دارد,۱۶/۱۱/۱۳۸۱
مقدمه اى بر ASP
سری آموزش asp قسمت اول
ASP ,محمد باقر معموری,۱۱۰۶۲ بار خوانده شده,۲۵۵ رای دارد,۱۷/۱۱/۱۳۸۱
ASP را در رايانه خود راه اندازي کنيد
سری آموزش asp قسمت دوم
ASP ,محمد باقر معموری,۶۸۵۴ بار خوانده شده,۸۲ رای دارد,۱۷/۱۱/۱۳۸۱
نحو ASP
سری آموزش asp قسمت سوم
ASP ,محمد باقر معموری,۴۶۸۴ بار خوانده شده,۳۲ رای دارد,۱۷/۱۱/۱۳۸۱
متغييرها در ASP
سری آموزش asp قسمت چهارم
ASP ,محمد باقر معموری,۴۱۸۵ بار خوانده شده,۱۸ رای دارد,۱۷/۱۱/۱۳۸۱
افزايش سرعت جستجو در مقادير هنگفتى از اطلاعات متنى
قسمت اول
Misc ,محمد باقر معموری,۵۶۸ بار خوانده شده,۵ رای دارد,۱۷/۱۱/۱۳۸۱
آشنايى با FastReport ساده‌ترين و قوى‌ترين كمپوننت گزارش‌سازى
Delphi ,محمد باقر معموری,۵۵۱۱ بار خوانده شده,۹۴ رای دارد,۲۳/۱۱/۱۳۸۱
استفاده از Flash در دلفى
در اين مقاله ياد می گيريد که چگونه از فلش در دلفی استفاده کنيد
Delphi ,محمد باقر معموری,۹۲۷۲ بار خوانده شده,۲۱۰ رای دارد,۲۴/۱۱/۱۳۸۱
اجرا كردن اپلت هاي كنترل پانل
Delphi ,محمد باقر معموری,۳۴۰۲ بار خوانده شده,۲۱ رای دارد,۲۵/۱۱/۱۳۸۱
تبديل خصوصيات فونتها به يك رشته و برعكس
Delphi ,محمد باقر معموری,۲۲۱۱ بار خوانده شده,۱۳ رای دارد,۲۵/۱۱/۱۳۸۱
روش جستجو Boyer-Moore
در اين مقاله با دو روش جستجوى Boyer-Moore آشنا مى‌شويد.
Delphi ,محمد باقر معموری,۲۲۴۱ بار خوانده شده,۶ رای دارد,۶/۱۲/۱۳۸۱
بالاترين 9 بسته Installساز
در اين مقاله با 9 برنامه Install ساز آشنا خواهيد شد!
Delphi ,محمد باقر معموری,۳۳۳۲ بار خوانده شده,۲۹ رای دارد,۶/۱۲/۱۳۸۱
مجموعه Tip شماره 1 ايران دولوپرز دات كام
8 نكته جالب و مهم راجع به دلفى!
Delphi ,محمد باقر معموری,۳۷۹۱ بار خوانده شده,۳۹ رای دارد,۶/۱۲/۱۳۸۱
مجموعه Tip شماره 2 ايران دولوپرز دات كام
5 نكته جالب و مهم راجع به دلفى!
Delphi ,محمد باقر معموری,۲۷۱۲ بار خوانده شده,۱۹ رای دارد,۶/۱۲/۱۳۸۱
مجموعه Tip شماره 3 ايران دولوپرز دات كام
3 نكته جالب و مهم راجع به دلفى!
Delphi ,محمد باقر معموری,۲۷۲۰ بار خوانده شده,۱۱ رای دارد,۶/۱۲/۱۳۸۱
Cookie ها در ASP
ASP ,محمد باقر معموری,۳۷۰۴ بار خوانده شده,۱۸ رای دارد,۱۹/۱۲/۱۳۸۱
فرم‌ها در ASP و وردى‌هاى كاربر
ASP ,محمد باقر معموری,۴۰۳۱ بار خوانده شده,۲۶ رای دارد,۱۹/۱۲/۱۳۸۱
رويه(procedure) هاى ASP
ASP ,محمد باقر معموری,۳۳۶۶ بار خوانده شده,۱۳ رای دارد,۱۹/۱۲/۱۳۸۱
سوالات و پاسخ هاي راجع به XML
سوالات رايج راجع به XML و پاسخ آنها را در اين مقاله مختر ولي مفيد بيابيد
Misc ,محمد باقر معموری,۸۴۳ بار خوانده شده,۱۶ رای دارد,۹/۱/۱۳۸۲
Export كردن اطلاعات به XML
خيلي اوقات در برنامه نويسي اينترنت و همچنين در برنامه هاي بزرگ نياز داريد كه قابليت Export كردن يك Dataset را به XML به كاربرانتان بدهيد
Delphi ,محمد باقر معموری,۲۱۳۹ بار خوانده شده,۱۴ رای دارد,۱۱/۱/۱۳۸۲
استفاده از XML به عنوان ذخيره كننده اطلاعات
XML مي تواند دقيقا همچون يك Table براي شما عمل نمايد.....
Delphi ,محمد باقر معموری,۲۴۸۲ بار خوانده شده,۲۳ رای دارد,۱۱/۱/۱۳۸۲
نوشتن همه كمپوننتهاى در يك فايل XML با استفاده از TXMLDocument
با استفاده از اين مقاله و كدهاي ارائه شده در آن ياد خواهيد گرفت كه مشخصات كمپوننتها را در يك فايل XML بنويسيد
Delphi ,محمد باقر معموری,۱۷۶۱ بار خوانده شده,۴ رای دارد,۱۲/۱/۱۳۸۲
چرخش Bitmap
يك تصوير Bitmap را 90 درجه بچرخانيد
Delphi ,محمد باقر معموری,۲۲۸۳ بار خوانده شده,۸ رای دارد,۱۲/۱/۱۳۸۲
چگونه يك HotKey يا ميان بر سيستم درست كنيم؟
ساخت کليد مينابر در ويندوز
Delphi ,محمد باقر معموری,۲۲۴۸ بار خوانده شده,۱۳ رای دارد,۱۲/۱/۱۳۸۲
چگونه يك TRichEdit با پس زمينه Tile بسازيم؟
به نظر مي آيد راهي براي Transparent كردن يك RichEdit عادي ....
Delphi ,محمد باقر معموری,۱۹۵۰ بار خوانده شده,۶ رای دارد,۱۴/۱/۱۳۸۲
اجراي فايل exe از درون دلفي
يكي از مشكلاتي كه بسياري از تازه كاران در دلفي با آن مواجه مي شوند اجراي فايلهاي ديگر يا اجراي دستورات shell است
Delphi ,محمد باقر معموری,۳۸۳۳ بار خوانده شده,۴۷ رای دارد,۵/۲/۱۳۸۲
نصب كنترلهاي DLL و ActiveX از درون كد
چگونه كنترلهاي OLE مثل (dynamic-link library (DLL يا كنترلهاي (ActiveX (OCX را از درون دلفي Register يا UnRegister بكنيم؟
Delphi ,محمد باقر معموری,۲۳۴۳ بار خوانده شده,۱۵ رای دارد,۵/۲/۱۳۸۲
تغيير Alpha تصاوير در دلفی
در اين مقاله ياد خواهيد گرفت که چگونه مقدار آلفا تصاوير را تغيير دهيد
Delphi ,محمد باقر معموری,۲۰۹۹ بار خوانده شده,۱۱ رای دارد,۶/۳/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۴۲۸ مراجعه امروز
۴۰۲۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : حسن الله مراد
پست الکترونيک : -
وب سايت : -
تاريخ عضويت : ۸/۱۱/۱۳۸۱
تعداد مقالات : ۱ مقاله
مقايسه ADO و ADO.NET
ADO ,حسن الله مراد,۲۷۸۳ بار خوانده شده,۳۶ رای دارد,۸/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۴۳۱ مراجعه امروز
۴۰۲۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : مهسا قنبري
پست الکترونيک : -
وب سايت : -
تاريخ عضويت : ۸/۱۱/۱۳۸۱
تعداد مقالات : ۱ مقاله
شاخصها و پيوندها در SQL Server
SQL ,مهسا قنبري,۳۵۱۸ بار خوانده شده,۳۷ رای دارد,۸/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۴۳۴ مراجعه امروز
۴۰۲۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : پويا عبادالهي واحد
پست الکترونيک : -
وب سايت : -
تاريخ عضويت : ۸/۱۱/۱۳۸۱
تعداد مقالات : ۱ مقاله
آموزش كاربردي زبان SQL قدم به قدم
SQL ,پويا عبادالهي واحد,۱۱۵۷۴ بار خوانده شده,۳۲۳ رای دارد,۸/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۴۳۷ مراجعه امروز
۴۰۲۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : ساسان نيكوكار
پست الکترونيک : -
وب سايت : -
تاريخ عضويت : ۸/۱۱/۱۳۸۱
تعداد مقالات : ۲ مقاله
دلفي 7
Delphi ,ساسان نيكوكار ,۷۳۹۷ بار خوانده شده,۱۵۳ رای دارد,۸/۱۱/۱۳۸۱
نكات ريز و درشت در دلفي
Delphi ,ساسان نيكوكار ,۵۷۷۴ بار خوانده شده,۴۰ رای دارد,۸/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۷ بيننده در حال حاضر
۱۴۴۰ مراجعه امروز
۴۰۳۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : کاظم آقاسی
پست الکترونيک : kazemaghasi@yahoo.com
وب سايت : kahoo.persianblog.com
تاريخ عضويت : ۱۱/۱۱/۱۳۸۱
تعداد مقالات : ۲ مقاله
ارزيابي سريع يك تيم نرم افزاري با استفاده از تست يوئل
Misc ,کاظم آقاسی,۵۵۷ بار خوانده شده,۳ رای دارد,۱۱/۱۱/۱۳۸۱
چگونگي فعاليت ديوارهاي آتش در لايه هاي مختلف و انواع آنها
Internet & Network ,کاظم آقاسی,۱۱۲۵ بار خوانده شده,۱۹ رای دارد,۱۱/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۴۴۳ مراجعه امروز
۴۰۳۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : امير رضا قويدل
پست الکترونيک : nep312@yahoo.com
وب سايت :
تاريخ عضويت : ۱۳/۱۱/۱۳۸۱
تعداد مقالات : ۱ مقاله
يونی کد چيست؟
Misc ,امير رضا قويدل,۴۲۷۸ بار خوانده شده,۴۷ رای دارد,۱۳/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۴۴۶ مراجعه امروز
۴۰۳۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : بهرام وکيلي
پست الکترونيک : javan_soft@hotmail.com
وب سايت : http://www.javansoft.com
تاريخ عضويت : ۱۶/۱۱/۱۳۸۱
تعداد مقالات : ۱۸ مقاله
آموزش پاسکال قسمت اول
سری آموزش پاسکال
Pascal ,بهرام وکيلي,۱۰۳۱۸ بار خوانده شده,۳۹۵ رای دارد,۱۶/۱۱/۱۳۸۱
آموزش پاسکال قسمت دوم
سری آموزشی پاسکال
Pascal ,بهرام وکيلي,۵۲۱۵ بار خوانده شده,۹۶ رای دارد,۱۶/۱۱/۱۳۸۱
آموزش پاسکال قسمت سوم
سری آموزشی پاسکال
Pascal ,بهرام وکيلي,۴۰۰۲ بار خوانده شده,۵۱ رای دارد,۱۶/۱۱/۱۳۸۱
آموزش پاسکال قسمت چهارم
سری آموزش پاسکال
Pascal ,بهرام وکيلي,۵۳۶۲ بار خوانده شده,۱۴۱ رای دارد,۱۶/۱۱/۱۳۸۱
زبان سی و پاسکال
نکاتی در مورد زبان سی و پاسکال شماره 1
C ,بهرام وکيلي,۱۹۰۸ بار خوانده شده,۱۳ رای دارد,۸/۱۲/۱۳۸۱
زبان سی و پاسکال
نکاتی در مورد زبان سی و پاسکال شماره 2
C ,بهرام وکيلي,۱۷۲۹ بار خوانده شده,۸ رای دارد,۸/۱۲/۱۳۸۱
نوشتن يك DLL در دلفي
در ادامه بحثي كه مدتي پيش داشتيم بنده تصميم گرفتم كه به ساخت يك DLL بپردازم ... براي آشنايي ديگر دوستان با نحوه نوشتن DLL و ...
Delphi ,بهرام وکيلي,۲۶۳۷ بار خوانده شده,۶ رای دارد,۱/۳/۱۳۸۲
تجربه های آقای وکيلی
قسمت اول ... تجربه های برنامه نويسی
Misc ,بهرام وکيلي,۱۱۴۶ بار خوانده شده,۱۸ رای دارد,۱۳/۳/۱۳۸۲
تجربه های آقای وکيلی ( قسمت دوم)
چگونه شروع كنيم
C ,بهرام وکيلي,۲۳۱۰ بار خوانده شده,۲۵ رای دارد,۲۱/۳/۱۳۸۲
تجربه های آقای وکيلی ( قسمت سوم)
چگونه تحليل اطلاعات و طراحي كنيم
Misc ,بهرام وکيلي,۱۲۶۶ بار خوانده شده,۱۶ رای دارد,۳/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت چهارم)
چگونه تحليل اطلاعات و طراحي كنيم 2
Misc ,بهرام وکيلي,۶۴۱ بار خوانده شده,۷ رای دارد,۱۱/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت پنجم)
چگونه تحليل اطلاعات و طراحي كنيم 3
Misc ,بهرام وکيلي,۵۴۲ بار خوانده شده,۳ رای دارد,۱۷/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت ششم)
چگونه تحليل اطلاعات و طراحي كنيم 4
Misc ,بهرام وکيلي,۴۹۶ بار خوانده شده,۴ رای دارد,۲۱/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت هفتم)
محيط پياده سازي
Misc ,بهرام وکيلي,۶۰۰ بار خوانده شده,۳ رای دارد,۲۵/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت هشتم)
شروع پياده سازي 1
Misc ,بهرام وکيلي,۵۳۸ بار خوانده شده,۱ رای دارد,۲۵/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت نهم)
پياده سازی - ابزارهای ما چيست؟
Misc ,بهرام وکيلي,۵۷۸ بار خوانده شده,۶ رای دارد,۷/۵/۱۳۸۲
تجربه های آقای وکيلی ( قسمت دهم)
عمليات پياده سازی
Misc ,بهرام وکيلي,۵۸۹ بار خوانده شده,۴ رای دارد,۷/۵/۱۳۸۲
تجربه های آقای وکيلی ( قسمت يازدهم)
ساخت پايگاه در Data Provider مورد نظر 2
Misc ,بهرام وکيلي,۵۲۲ بار خوانده شده,۷ رای دارد,۷/۵/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۴۵۲ مراجعه امروز
۴۰۴۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : سايت ايران PHP
پست الکترونيک : info@iranphp.net
وب سايت : http://www.iranphp.net
تاريخ عضويت : ۱۷/۱۱/۱۳۸۱
تعداد مقالات : ۱ مقاله
۷ دلیل برای اینكه استفاده از PHP بهتر از ASP می باشد
PHP ,سايت ايران PHP,۸۵۳ بار خوانده شده,۶ رای دارد,۱۷/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۴۵۵ مراجعه امروز
۴۰۴۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : عباس مقدس نجفيان
پست الکترونيک : Najafian@Ganjafzar.com
وب سايت : -
تاريخ عضويت : ۲۳/۱۱/۱۳۸۱
تعداد مقالات : ۲ مقاله
مطالب كلي راجع به طراحي سايت
چنانچه قصد داريد برنامه نويسي را شروع كنيدمناسب است كه به نكات زير توجه نماييد
HTML ,عباس مقدس نجفيان,۵۰۵۴ بار خوانده شده,۷۲ رای دارد,۲۲/۱۱/۱۳۸۱
Cascading Style Sheet (CSS) چيست؟
آموزش مقدماتی CSS
HTML ,عباس مقدس نجفيان,۲۲۲۸ بار خوانده شده,۱۵ رای دارد,۲۲/۱۱/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۴۶۱ مراجعه امروز
۴۰۵۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : Inprise
پست الکترونيک : inprise_in_tehran@yahoo.com
وب سايت : -
تاريخ عضويت : ۸/۱۲/۱۳۸۱
تعداد مقالات : ۱۱ مقاله
نگرشی بر COM+
com+ چيست؟
Windows ,Inprise,۷۴۷ بار خوانده شده,۷ رای دارد,۸/۱۲/۱۳۸۱
لايه دوم ، كليد طلائي (2)
مباحثی در مورد COM+
Windows ,Inprise,۵۸۶ بار خوانده شده,۱ رای دارد,۱۰/۱۲/۱۳۸۱
دلفي و ASP.NET
دلفی و ASP.NET - ارتباطها
Delphi ,Inprise,۳۰۵۴ بار خوانده شده,۲۵ رای دارد,۳/۱/۱۳۸۲
UDDI چيست ؟
در اين نوشتار با UDDI آشنا خواهيد شد و اندكي در مورد مفاهيم تكنيكي و فوائد آن خواهيد آموخت .
Misc ,Inprise,۶۵۰ بار خوانده شده,۱ رای دارد,۳/۱/۱۳۸۲
چند خط درباره وي سي دات نت
در اين مقاله كوتاه با بخشي از توانائي هاي ويژوال سي دات نت آشنا خواهيد شد
.NET ,Inprise,۲۵۲۷ بار خوانده شده,۳۰ رای دارد,۳/۱/۱۳۸۲
معرفي #S
Windows ,Inprise,۵۸۷ بار خوانده شده,۳ رای دارد,۴/۱/۱۳۸۲
محيطهاي توسعه وب سرويس
در اين نوشته با مهمترين محيطهاي توسعه وب سرويس و محصولات آنها آشنا خواهيد شد
Windows ,Inprise,۵۳۹ بار خوانده شده,۱ رای دارد,۴/۱/۱۳۸۲
آنچه سي بيلدر به شما ميدهد
در اين نوشتار با بخشي از امكانات و قابليتهاي اين محيط توسعه نرم افزار آشنا خواهيد شد
Misc ,Inprise,۷۱۵ بار خوانده شده,۱ رای دارد,۷/۱/۱۳۸۲
جاوا و UML
معرفي محيط OptimalJ
Java ,Inprise,۱۸۶۰ بار خوانده شده,۲۳ رای دارد,۱۴/۱/۱۳۸۲
UML و برنامه نويسان ويژوال بيسيك
در اين نوشتار ضمن ارائه توضيحاتي مقدماتي در باب UML با ابزاري مناسب براي استفاده از اين تكنولوژي در محيط ويژوال بيسيك آشنا ميشويد
Visual Basic ,Inprise,۱۶۸۳ بار خوانده شده,۳۳ رای دارد,۱۴/۱/۱۳۸۲
فراهم كننده داده ( Data Provider ) براي بانكهاي اطلاعاتي با استفاده از تكنولوژي NET.
در اين نوشتار با مقدمات طراحي فراهم كننده داده ( Data Provider ) براي بانكهاي اطلاعاتي با استفاده از تكنولوژي NET. خواهيم پرداخت
.NET ,Inprise,۲۶۶۱ بار خوانده شده,۲۳ رای دارد,۱۰/۲/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۴۶۴ مراجعه امروز
۴۰۵۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : php class
پست الکترونيک : -
وب سايت : http://w3schools-php.blogspot.com
تاريخ عضويت : ۱۴/۱۲/۱۳۸۱
تعداد مقالات : ۱۱ مقاله
مقدمه ای بر PHP
PHP ,php class,۷۱۴ بار خوانده شده,۵ رای دارد,۱۴/۱۲/۱۳۸۱
php چيست؟
PHP ,php class,۷۹۶ بار خوانده شده,۷ رای دارد,۱۴/۱۲/۱۳۸۱
PHP چگونه کار مي کند؟
PHP ,php class,۷۰۱ بار خوانده شده,۳ رای دارد,۱۴/۱۲/۱۳۸۱
چرا PHP
PHP ,php class,۶۸۵ بار خوانده شده,۱ رای دارد,۱۴/۱۲/۱۳۸۱
نصب و پيكر بندي PHP قسمت اول
PHP ,php class,۷۹۴ بار خوانده شده,۵ رای دارد,۱۴/۱۲/۱۳۸۱
نصب و پيكر بندي PHP (قسمت دوم)
PHP ,php class,۷۲۰ بار خوانده شده,۴ رای دارد,۱۵/۱۲/۱۳۸۱
نرم افزار Easy PHP
PHP ,php class,۷۸۹ بار خوانده شده,۶ رای دارد,۱۵/۱۲/۱۳۸۱
شروع كد نويسي
PHP ,php class,۷۰۲ بار خوانده شده,۵ رای دارد,۱۵/۱۲/۱۳۸۱
ارسال اطلاعات به مرروگر
PHP ,php class,۶۴۶ بار خوانده شده,۱ رای دارد,۱۵/۱۲/۱۳۸۱
فضاهاي خالي و قرار دادن توضيحات در متن برنامه
PHP ,php class,۵۹۰ بار خوانده شده,۰ رای دارد,۱۵/۱۲/۱۳۸۱
انواع متغييرها
PHP ,php class,۶۱۲ بار خوانده شده,۲ رای دارد,۱۵/۱۲/۱۳۸۱


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۴۶۷ مراجعه امروز
۴۰۵۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : رضا براري سوادکوهي
پست الکترونيک : rezabs@noavar.com
وب سايت :
تاريخ عضويت : ۸/۱/۱۳۸۲
تعداد مقالات : ۸ مقاله
چگونه دانش دلفي را براي يادگيري ويژوال بيسيک به کار بگيريم ...
اين مقاله سعي دارد به برنامه نويسان دلفي آموزش دهد چگونه از دانش خود در جهت يادگيري VB بهره برداري کنند
Delphi ,رضا براري سوادکوهي,۲۳۱۲ بار خوانده شده,۱۶ رای دارد,۸/۱/۱۳۸۲
Windows API and API Wrappers
اين نوشته به اختصار توابع Windows API و مفاهيم مرتبط را از ديد برنامه نويسي بررسي ميکند
Windows ,رضا براري سوادکوهي,۱۱۸۶ بار خوانده شده,۲۵ رای دارد,۹/۱/۱۳۸۲
چگونه با استفاده از ويژوال بيسيک نمايه (Icon) فايلها را نمايش دهيم؟
بررسي روش پيدا کردن و نمايش نمايه (Icon) يک نوع فايل تعريف شده در ويندوز
Visual Basic ,رضا براري سوادکوهي,۹۹۸ بار خوانده شده,۱۱ رای دارد,۹/۱/۱۳۸۲
استفاده از اشاره گرها در Object Pascal (دلفي)
در اين نوشته دليل و نحوه استفاده از اشاره گرها در دلفي (Object Pascal) به اختصار بررسي ميشود.
Delphi ,رضا براري سوادکوهي,۱۹۹۰ بار خوانده شده,۱۰ رای دارد,۱۵/۱/۱۳۸۲
برنامه نويسي روالهاي غير همزمان (Asynchronous Programming) (قسمت اول) مفــــاهيم
اين نوشته مقدمه اي است جهت شرح مفاهيم برنامه نويسي آسنکرون
Misc ,رضا براري سوادکوهي,۶۶۴ بار خوانده شده,۹ رای دارد,۷/۲/۱۳۸۲
ترفندهاي دلفي شماره 001 (IDN Exclusive Collection 001)
مجموعه ترفندهاي دلفي شماره 001
Delphi ,رضا براري سوادکوهي,۳۴۷۵ بار خوانده شده,۲۱ رای دارد,۱۰/۲/۱۳۸۲
برنامه نويسي روالهاي غير همزمان (Asynchronous Programming)
در این نوشته موضوع Threadها بررسی میشود و چگونگی پیدایش آنها بیان میگردد... (قسمت دوم) |Threadها-تعريف و تاريخچه آنها|
Misc ,رضا براري سوادکوهي,۶۰۸ بار خوانده شده,۳ رای دارد,۱۴/۲/۱۳۸۲
برنامه نويسي روالهاي غير همزمان (Asynchronous Programming) (قسمت سوم) |مفاهيم جديد SMP و SMT|
در اين قسمت مفاهيم چند Threadي بررسي ميشوند...
Misc ,رضا براري سوادکوهي,۵۶۳ بار خوانده شده,۱ رای دارد,۲۰/۲/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۴۷۰ مراجعه امروز
۴۰۶۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : مهرداد تاجيک
پست الکترونيک : Tajik80@hotmail.com
وب سايت :
تاريخ عضويت : ۱۰/۲/۱۳۸۲
تعداد مقالات : ۱ مقاله
توليد اتوماتيك فرمهاي هوشمند ورود اطلاعات در محيط VB6/ SQLServer
ابزار توليد
Misc ,مهرداد تاجيک,۶۹۷ بار خوانده شده,۷ رای دارد,۱۰/۲/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۴۷۳ مراجعه امروز
۴۰۶۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : غلامرضا(عليرضا) غفوري منش
پست الکترونيک : shagholam_e_avam@yahoo.com
وب سايت : -
تاريخ عضويت : ۱۴/۲/۱۳۸۲
تعداد مقالات : ۱ مقاله
بكارگيري REAL AUDIO\VIDEO در دلفي
كنترل كامل REAL AUDIO\VIDEO د برنامه ها
Delphi ,غلامرضا(عليرضا) غفوري منش,۲۳۵۷ بار خوانده شده,۱۳ رای دارد,۱۴/۲/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۴۸۵ مراجعه امروز
۴۰۷۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : شرکت سخا روش
پست الکترونيک : Info@srco.ir
وب سايت : http://www.srco.ir
تاريخ عضويت : ۲۳/۲/۱۳۸۲
تعداد مقالات : ۴۱ مقاله
استراتژي حفاظت از اطلاعات در شبکه هاي کامپيوتري ( بخش اول )
Internet & Network ,شرکت سخا روش,۷۷۰ بار خوانده شده,۵ رای دارد,۲۳/۲/۱۳۸۲
XML در دات نت ( بخش اول )
روشهای استفاده از xml در دات نت
.NET ,شرکت سخا روش,۱۹۶۰ بار خوانده شده,۱۶ رای دارد,۲۳/۲/۱۳۸۲
XML در دات نت ( بخش دوم )
روشهای استفاده از xml در دات نت
.NET ,شرکت سخا روش,۱۷۴۵ بار خوانده شده,۱۰ رای دارد,۲۳/۲/۱۳۸۲
نمونه هائي از حملات اينترنتي توسط نامه هاي الکترونيکي
بررسی روش عملکرد چندين ويروس که از طريق نامه الکترونيکی منتقل می شوند
Internet & Network ,شرکت سخا روش,۷۴۵ بار خوانده شده,۱۵ رای دارد,۲۳/۲/۱۳۸۲
مباني زيرساخت شبکه هاي مبتني بر ويندوز
سازمان ها و موسسات بمنظور برپاسازي شبکه و اتصال هر يک از مراکز به دفاتر ....
Internet & Network ,شرکت سخا روش,۹۰۲ بار خوانده شده,۱۰ رای دارد,۲۷/۳/۱۳۸۲
مباني ويندوز و شبکه ( بخش اول )
سيستم عامل ويندوز يکي از متداولترين سيستم هاي عامل شبکه اي است که.......
Internet & Network ,شرکت سخا روش,۱۰۰۰ بار خوانده شده,۸ رای دارد,۲۷/۳/۱۳۸۲
مباني ويندوز و شبکه ( بخش دوم )
در بخش اول اين مقاله به مفاهيم اوليه ويندوز و شبکه اشاره گرديد . در اين....
Internet & Network ,شرکت سخا روش,۸۹۵ بار خوانده شده,۸ رای دارد,۲۷/۳/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش اول )
TCP/IP ، يکي از مهمترين پروتکل هاي استفاده شده....
Internet & Network ,شرکت سخا روش,۱۱۱۱ بار خوانده شده,۱۵ رای دارد,۳/۴/۱۳۸۲
معرفي اوليه VB.NET
يک برنامه کامپيوتري ، از مجموعه اي دستورالعمل که نوع و نحوه انجام ....
.NET ,شرکت سخا روش,۲۶۴۰ بار خوانده شده,۴۲ رای دارد,۳/۴/۱۳۸۲
استراتژي حفاظت از اطلاعات در شبکه هاي کامپيوتري ( بخش دوم )
در بخش اول اين مقاله به چالش هاي سازمانها و موسسات براي حرکت بسمت .......
Internet & Network ,شرکت سخا روش,۶۵۶ بار خوانده شده,۳ رای دارد,۳/۴/۱۳۸۲
مفاهيم اوليه سرويس هاي وب - بخش اول
سرويس هاي وب ، نقطه عطفي در معماري برنامه هاي توزيع شده بر روي اينترنت ....
Internet & Network ,شرکت سخا روش,۶۴۴ بار خوانده شده,۰ رای دارد,۳/۴/۱۳۸۲
مفاهيم اوليه سرويس هاي وب - بخش دوم
Internet & Network ,شرکت سخا روش,۶۵۰ بار خوانده شده,۲ رای دارد,۱۰/۴/۱۳۸۲
مفاهيم اوليه سرويس هاي وب - بخش سوم
Internet & Network ,شرکت سخا روش,۵۸۳ بار خوانده شده,۰ رای دارد,۱۰/۴/۱۳۸۲
مفاهيم اوليه سرويس هاي وب - بخش چهارم
Internet & Network ,شرکت سخا روش,۶۲۲ بار خوانده شده,۳ رای دارد,۱۰/۴/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش دوم )
در بخش اول اين مقاله ،پروتکل TCP/IP بهمراه لايه هاي آن معرفي گردييد . در اين .....
Internet & Network ,شرکت سخا روش,۹۰۲ بار خوانده شده,۱۰ رای دارد,۱۷/۴/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش سوم )
در بخش اول اين مقاله، پروتکل TCP/IP بهمراه لايه هاي آن معرفي گرديد . در بخش دوم ، به ...
Internet & Network ,شرکت سخا روش,۸۴۲ بار خوانده شده,۵ رای دارد,۱۷/۴/۱۳۸۲
طراحی برنامه ( بخش اول )
در ساليان اخير ، متدولوژی های متفاوتی بمنظور طراحی برنامه ، پياده سازی و در اختيار ....
Misc ,شرکت سخا روش,۶۸۲ بار خوانده شده,۷ رای دارد,۱۳/۵/۱۳۸۲
مبانی دا ت نت ( بخش اول )
دات نت ، پلات فرم جديد ماکروسافت بمنظور تحقق نظريه : " نرم افزار بعنوان ...
.NET ,شرکت سخا روش,۲۷۷۶ بار خوانده شده,۳۲ رای دارد,۱۳/۵/۱۳۸۲
با کرم بلستر بيشتر آشنا شويم
کرم جديدي که W32.Blaster نا ميده مي شود طي....
Misc ,شرکت سخا روش,۵۳۳ بار خوانده شده,۳ رای دارد,۲۵/۵/۱۳۸۲
مفاهيم اوليه سرويس های وب - بخش پنجم
آنچه تاکنون گفته شده است ....
Internet & Network ,شرکت سخا روش,۵۱۲ بار خوانده شده,۰ رای دارد,۲۵/۵/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش چهارم )
Internet & Network ,شرکت سخا روش,۶۳۲ بار خوانده شده,۷ رای دارد,۲۵/۵/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش پنجم )
Internet & Network ,شرکت سخا روش,۶۸۶ بار خوانده شده,۵ رای دارد,۲۵/۵/۱۳۸۲
بررسي يک برنامه نمونه دات نت
امکانات و پتانسيل هاي گسترده ارائه شده توسط دات نت ، امکان طراحي و بکارگيري........
.NET ,شرکت سخا روش,۲۱۹۳ بار خوانده شده,۱۸ رای دارد,۱۰/۶/۱۳۸۲
نقش عوامل انساني در امنيت شبکه هاي کامپيوتري
يک سيستم کامپيوتري از چهار عنصر : سخت افزار ، سيستم عامل ، برنامه هاي.......
Internet & Network ,شرکت سخا روش,۶۴۲ بار خوانده شده,۶ رای دارد,۱۰/۶/۱۳۸۲
معماري سرويس هاي وب ( بخش اول )
سرويس هاي وب يکي از مهمترين تحولات اخير در زمينه نرم افزار...
.NET ,شرکت سخا روش,۱۵۸۵ بار خوانده شده,۹ رای دارد,۱۰/۶/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش ششم )
جريان داده در شبکه اي که صرفا" شامل يک سگمنت است...
Internet & Network ,شرکت سخا روش,۶۵۴ بار خوانده شده,۶ رای دارد,۲۷/۶/۱۳۸۲
مباني دا ت نت ( بخش دوم )
در بخش اول اين مقاله به بررسي و معرفي فريمورک دانت پرداخته گرديد....
.NET ,شرکت سخا روش,۲۰۸۰ بار خوانده شده,۱۲ رای دارد,۲۷/۶/۱۳۸۲
مباني دا ت نت ( بخش سوم )
در بخش دوم اين مقاله با اولين لايه فريمورک دات نت ( CLR ) آشنا شديم . در ادامه بر روي ...
.NET ,شرکت سخا روش,۱۸۵۲ بار خوانده شده,۹ رای دارد,۲۷/۶/۱۳۸۲
ايمن سازي سرويس دهنده FTP
سرويس FTP)File Transfer Protocol) يکي از قديمي ترين و متداولترين...
Internet & Network ,شرکت سخا روش,۶۲۳ بار خوانده شده,۵ رای دارد,۲۷/۶/۱۳۸۲
طراحی برنامه ( بخش دوم )
در بخش اول اين مقاله به مسائل مرتبط با برنامه نويسي اشاره و در ادامه با مراحل متفاوت برنامه نويسي...
Misc ,شرکت سخا روش,۵۶۴ بار خوانده شده,۴ رای دارد,۱۲/۷/۱۳۸۲
امکانات شبکه اي ويندوز
سيستم عامل ويندوز، نظير ساير سيستم هاي عامل شبکه اي امکانات ...
Internet & Network ,شرکت سخا روش,۷۰۴ بار خوانده شده,۱۵ رای دارد,۱۰/۱۰/۱۳۸۲
معماري برنامه هاي مبتني بر داده
داده ها در برنامه هاي کامپيوتري داراي نقشي بسيار مهم بوده و همواره نحوه ذخيره ...
Misc ,شرکت سخا روش,۴۳۱ بار خوانده شده,۴ رای دارد,۱۰/۱۰/۱۳۸۲
ارتباط به منابع داده در ADO.NET ( بخش اول )
بمنظوراتصال به يک منبع داده ، مي بايست در ابتدا يک Net...
ADO ,شرکت سخا روش,۱۹۲۲ بار خوانده شده,۲۱ رای دارد,۱۰/۱۰/۱۳۸۲
امنيت برنامه هاي وب ( بخش اول )
هر برنامه کامپيوتري که براي اجراء در محيط شبکه، طراحي و پياده سازي مي گردد ، مي بايست توجه...
Internet & Network ,شرکت سخا روش,۶۰۰ بار خوانده شده,۵ رای دارد,۲۹/۱۰/۱۳۸۲
امنيت برنامه هاي وب ( بخش دوم )
در بخش اول اين مقاله ، به نحوه برخورد ASP.NET با کاربران ناشناس ( Anonymous ) ...
Internet & Network ,شرکت سخا روش,۴۷۴ بار خوانده شده,۱ رای دارد,۲۹/۱۰/۱۳۸۲
امنيت برنامه های وب ( بخش سوم )
در بخش سوم اين مقاله به بررسي Forms Authentication خواهيم پرداخت ...
Internet & Network ,شرکت سخا روش,۴۶۶ بار خوانده شده,۳ رای دارد,۲۹/۱۰/۱۳۸۲
نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده وب
برنامه هاي وب از معماري سرويس گيرنده - سرويس دهنده تبعيت نموده و بر...
.NET ,شرکت سخا روش,۱۴۸۳ بار خوانده شده,۸ رای دارد,۲۹/۱۰/۱۳۸۲
فن آوري اطلاعات و ارتباطات چيست ؟ ( بخش اول )
در پنجاه سال گذشته بروز تحولات گسترده در زمينه کامپيوتر و ارتباطات ، تغييرات عمده اي را در عرصه هاي متفاوت...
Misc ,شرکت سخا روش,۳۷۷ بار خوانده شده,۵ رای دارد,۲۲/۱/۱۳۸۳
کارت شناسائي بيومتريک
امروزه از کارت هاي شناسائي در ابعاد گسترده و به منظور اهداف مختلفي ...
Misc ,شرکت سخا روش,۳۱۶ بار خوانده شده,۰ رای دارد,۲۲/۱/۱۳۸۳
ذخيره و بازيابي داده توسط ADO.NET (بخش اول)
با استفاده از ADO.NET ، امکان اتصال به منابع داده متفاوت...
.NET ,شرکت سخا روش,۱۷۰۳ بار خوانده شده,۱۵ رای دارد,۲۲/۱/۱۳۸۳
با کرم Mydoom بيشتر آشنا شويم !
در ساعت نه روز چهارشنبه 28 ژانويه 2004 مطابق با هشتم بهمن 1382 ...
Misc ,شرکت سخا روش,۲۹۹ بار خوانده شده,۳ رای دارد,۲۲/۱/۱۳۸۳


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۴۸۸ مراجعه امروز
۴۰۸۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : بابک ساطلي
پست الکترونيک : babak_sateli@yahoo.com
وب سايت : http://www.arianexpress.com/babak-sateli
تاريخ عضويت : ۲۷/۲/۱۳۸۲
تعداد مقالات : ۵ مقاله
بررسي فشردن كليد توسط كاربر در هنگام اجراي يك حلقه
چگونه كاربر مي تواند با فشار دادن يك كليد اجراي يك حلقه را متوقف سازد ؟
Delphi ,بابک ساطلي,۲۴۰۵ بار خوانده شده,۳۳ رای دارد,۲۷/۲/۱۳۸۲
كدگذاري اطلاعات متني به روش Encrypt در دلفي
چگونه مي توانيم اطلاعات متني خود را به صورت كدگذاري شده منتشر كنيم ؟
Delphi ,بابک ساطلي,۲۰۵۶ بار خوانده شده,۱۲ رای دارد,۳۰/۲/۱۳۸۲
تشخيص ورود و خروج CD از CD-Rom
چگونه مي توانيم از ورود و خروج CD مطلع شويم ؟
Delphi ,بابک ساطلي,۲۲۷۸ بار خوانده شده,۱۸ رای دارد,۳۰/۲/۱۳۸۲
چرخاندن يك تصوير با زواياي مختلف
اكنون مي توانيد تصوير خود را با هر زاويه اي بچرخانيد
Delphi ,بابک ساطلي,۲۰۷۲ بار خوانده شده,۷ رای دارد,۶/۳/۱۳۸۲
DLL ها در دلفي - بخش اول ( ساخت DLL )
چگونه مي توان در دلفي يك DLL ساخت ؟
Delphi ,بابک ساطلي,۲۴۳۸ بار خوانده شده,۱۹ رای دارد,۶/۳/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۴۹۱ مراجعه امروز
۴۰۸۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : رضا کريم پور
پست الکترونيک : titanwalker@mail.com
وب سايت : -
تاريخ عضويت : ۲۸/۴/۱۳۸۲
تعداد مقالات : ۳ مقاله
دلفي و اسمبلي
برنامه نويسان دوران DOS با tasm.exe و tlink.exe آشنايي دارند.ايندو از ديرباز رقيبان masm.exe و link.exe بوده و...
Delphi ,رضا کريم پور,۲۶۱۲ بار خوانده شده,۲۶ رای دارد,۲۸/۴/۱۳۸۲
اسمبلی تحت ويندوز
حتماٌ زماني كه درس زبان ماشين را پاس ميكرديد ،در مقايسه با زبانهايي چون C++ , Object Pascal(Delphi) آنرا فوسيل ? ميناميديد ...
Assembley ,رضا کريم پور,۱۲۰۲ بار خوانده شده,۱۶ رای دارد,۲۸/۴/۱۳۸۲
چگونه از theme جديد WinXP در برنامه هاي خود استفاده كنيم
به همراه آخرين نسخه از سيستم عامل Microsoft تكنولوژي جديدي بنــــــــام Theme Engine
Misc ,رضا کريم پور,۶۴۳ بار خوانده شده,۳ رای دارد,۲۷/۷/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۴۹۴ مراجعه امروز
۴۰۸۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : عليرضا گلکاری
پست الکترونيک : a_golkari@yahoo.com
وب سايت :
تاريخ عضويت : ۱۴/۵/۱۳۸۲
تعداد مقالات : ۴ مقاله
بهينه سازي حجم كدهاي جاوااسكريپت
تكنيكهاي كاهش حجم كدهاي جاوااسكريپت
JavaScript ,عليرضا گلکاری,۲۷۵۲ بار خوانده شده,۴۴ رای دارد,۱۴/۵/۱۳۸۲
بهينه سازي حجم كدهاي جاوااسكريپت ( قسمت دوم)
تكنيكهاي كاهش حجم كدهاي جاوااسكريپت
JavaScript ,عليرضا گلکاری,۱۶۳۱ بار خوانده شده,۹ رای دارد,۱۴/۵/۱۳۸۲
بهينه سازي حجم كدهاي جاوااسكريپت ( 3 )
تكنيكهاي كاهش حجم كدهاي جاوااسكريپت با بيان يك مثال عملي
JavaScript ,عليرضا گلکاری,۱۵۹۹ بار خوانده شده,۱۱ رای دارد,۲۵/۵/۱۳۸۲
آشنايي با فيلترهاي CSS
: بوسيله فيلترها در CSS ميتوانيد به تصاوير و متنهاي درون صفحه وب افكتهاي متفاوتي را اضافه كنيد.
DHTML ,عليرضا گلکاری,۱۶۷۸ بار خوانده شده,۹ رای دارد,۱۲/۷/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۵۰۰ مراجعه امروز
۴۰۹۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : وحيد نصيري
پست الکترونيک : nasiri@persiaelearning.com
وب سايت : http://www.persiaelearning.com
تاريخ عضويت : ۱۲/۷/۱۳۸۲
تعداد مقالات : ۲۰ مقاله
مقدمه اي بر سي شارپ : قسمت اول
در طي سلسله مقالاتي مي خواهيم با C# بيشتر آشنا شويم. فرض اين مقالات بر اين است ...
.NET ,وحيد نصيري ,۲۶۰۰ بار خوانده شده,۲۴ رای دارد,۱۲/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت دوم
در اين قسمت مي خواهيم با يك سري از اصول اوليه ي شيء گرايي در سي شارپ كمي آشنا شويم. لازم به ...
.NET ,وحيد نصيري ,۱۸۷۶ بار خوانده شده,۸ رای دارد,۱۲/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت سوم
در بسياري از موارد هنگام برنامه نويسي لازم است تا از عبارات شرطي استفاده كنيم. براي انجام اينكار ...
.NET ,وحيد نصيري ,۱۷۲۱ بار خوانده شده,۷ رای دارد,۱۲/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت چهارم
هنگامي آرايه ها ايجاد مي شوند كه بخواهيم با مجموعه اي از اطلاعات همجنس ...
.NET ,وحيد نصيري ,۱۶۴۸ بار خوانده شده,۳ رای دارد,۲۷/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت پنجم
اگر نياز باشد تا قطعه اي از كد بيش از يكبار اجرا شود نياز به استفاده از حلقه ها...
.NET ,وحيد نصيري ,۱۵۲۶ بار خوانده شده,۳ رای دارد,۲۷/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت ششم
دو مورد تكميلي در مورد حلقه ها در سي شارپ...
.NET ,وحيد نصيري ,۱۴۲۹ بار خوانده شده,۲ رای دارد,۲۷/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت هفتم
در اين قسمت به يكي از مهمترين مباحث برنامه نويسي سي شارپ مي رسيم....
.NET ,وحيد نصيري ,۱۵۷۹ بار خوانده شده,۹ رای دارد,۱۱/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت هشتم
ظاهرا به نظر مي رسد كه توابع فقط مي توانند يك return داشته باشند و بلافاصله ...
.NET ,وحيد نصيري ,۱۴۳۸ بار خوانده شده,۰ رای دارد,۱۱/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت نهم
گاهي از اوقات لازم است تا نگارش هاي مختلفي از يك تابع داشته باشيم. براي مثال تعريف...
.NET ,وحيد نصيري ,۱۳۷۶ بار خوانده شده,۰ رای دارد,۱۱/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت دهم
Jagged arrays آرايه اي از آرايه ها است و همانطور كه ذكر شد لزومي ندارد كه...
.NET ,وحيد نصيري ,۱۴۳۳ بار خوانده شده,۱ رای دارد,۱۱/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت يازدهم
از اين قسمت به بعد مي خواهيم نگاهي دقيق تر به بحث شيء گرايي در سي شارپ بياندازيم؛ همانند فضاهاي......
.NET ,وحيد نصيري ,۱۳۷۰ بار خوانده شده,۴ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت دوازدهم
تا بحال در حد كاربرد ، با كلاس ها آشنا شده ايم . اما در اين قسمت مي خواهيم...
.NET ,وحيد نصيري ,۱۲۹۳ بار خوانده شده,۰ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت سيزدهم
با استفاده از ايندكسرها مي توان با يك كلاس همانند آرايه ها...
.NET ,وحيد نصيري ,۱۳۳۶ بار خوانده شده,۲ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت چهاردهم
ارث بري يكي از مفاهيم اوليه ي برنامه نويسي شيء گرا مي باشد...
.NET ,وحيد نصيري ,۱۲۹۱ بار خوانده شده,۱ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت پانزدهم
يكي ديگر از مفاهيم اوليه ي شيء گرايي پلي مرفيسم ( چند ريختي ) مي باشد....
.NET ,وحيد نصيري ,۱۳۲۵ بار خوانده شده,۳ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت شانزدهم
كلاس ها را همچنين مي توان به صورت abstract تعريف كرد. از اين نوع كلاس ها ...
.NET ,وحيد نصيري ,۱۲۵۷ بار خوانده شده,۰ رای دارد,۲۱/۹/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت هفدهم
در كلاس CCommObj كه با آن آشنا شديم ، آرايه اي Private از نوع ICommObjEvents به نام...
.NET ,وحيد نصيري ,۱۲۵۳ بار خوانده شده,۷ رای دارد,۲۱/۹/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت هجدهم
مقابله با خطاها در سي شارپ (Exception Handling in C#)
.NET ,وحيد نصيري ,۱۲۷۸ بار خوانده شده,۶ رای دارد,۲۱/۹/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت نوزدهم
سربارگذاري عملگر ها (Operator OverLoading)
.NET ,وحيد نصيري ,۱۲۴۳ بار خوانده شده,۴ رای دارد,۲۱/۹/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت بيستم
Delegates در سي شارپ روشي مطمئن و typesafe را براي بكار گيري...
.NET ,وحيد نصيري ,۱۳۵۶ بار خوانده شده,۶ رای دارد,۲۱/۹/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۵۰۳ مراجعه امروز
۴۰۹۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : ??EEی IOEی ??CI
پست الکترونيک : i@mojtaba.net
وب سايت : http://blog.mojtaba.net/
تاريخ عضويت : ۴/۹/۱۳۸۲
تعداد مقالات : ۰ مقاله


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۵۰۶ مراجعه امروز
۴۰۹۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : مجتبی دشتی نژاد
پست الکترونيک : i@mojtaba.net
وب سايت : http://blog.mojtaba.net/
تاريخ عضويت : ۴/۹/۱۳۸۲
تعداد مقالات : ۲ مقاله
ساخت منوهاي Drop Down
در اين يادداشت مي خواهم چگونگي ساخت منوهاي Drop Down را آموزش بدهم...
DHTML ,مجتبی دشتی نژاد,۱۴۸۵ بار خوانده شده,۷ رای دارد,۴/۹/۱۳۸۲
ساخت منوهاي Rollover با CSS
حتما تا به حال در حين گشت زني در اينترنت، با منوهايي برخورد کرده ايد که...
DHTML ,مجتبی دشتی نژاد,۱۳۵۵ بار خوانده شده,۱۱ رای دارد,۴/۹/۱۳۸۲


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۵۰۹ مراجعه امروز
۴۱۰۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : آراز صمدی
پست الکترونيک : araz @ tur2.com
وب سايت :
تاريخ عضويت : ۱۲/۲/۱۳۸۳
تعداد مقالات : ۱ مقاله
﻿بحث ip
در بسياري از درس‌هاي آينده از Command Prompt ...
Internet & Network ,آراز صمدی ,۷۲۸ بار خوانده شده,۱۰ رای دارد,۱۲/۲/۱۳۸۳


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۵۱۲ مراجعه امروز
۴۱۰۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : ??ی? ??C?ی
پست الکترونيک : Hossein_panahi@hotmail.com
وب سايت : http://hosseinpn.persianblog.com
تاريخ عضويت : ۲۹/۲/۱۳۸۳
تعداد مقالات : ۰ مقاله


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۵۱۵ مراجعه امروز
۴۱۰۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی : حسين پناهی
پست الکترونيک : Hossein_panahi@hotmail.com
وب سايت : http://hosseinpn.persianblog.com
تاريخ عضويت : ۲۹/۲/۱۳۸۳
تعداد مقالات : ۲ مقاله
مقایسه نحوی ۴ زبان حاضر در ویژوال استودیو(قسمت اول)
در این مقاله به بررسی و مقایسه اجمالی ۴ زبان Visual Basic, C++, C# و Java پرداخته میشود که این مقایسات به کمک مثال بیان میشود. این مقاله برای افرادی که قصد آموختن یکی از این زبانها را دارند بسیار مفید و کارآمد میباشد
Misc ,حسين پناهی,۱۲۸۸ بار خوانده شده,۲۲ رای دارد,۲۹/۲/۱۳۸۳
مقایسه نحوی ۴ زبان حاضر در ویژوال استودیو(قسمت دوم)
در این مقاله به بررسی و مقایسه اجمالی ۴ زبان Visual Basic, C++, C# و Java پرداخته میشود که این مقایسات به کمک مثال بیان میشود. این مقاله برای افرادی که قصد آموختن یکی از این زبانها را دارند بسیار مفید و کارآمد میباشد
Misc ,حسين پناهی,۸۷۴ بار خوانده شده,۱۰ رای دارد,۲۹/۲/۱۳۸۳


Authors Page ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۲۷۸ مراجعه امروز
۳۸۷۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
نام و نام خانوادگی :
۱- ??EEی IOEی ??CI
۲- Inprise
۳- ??ی? ??C?ی
۴- php class
۵- آراز صمدی
۶- احمد عدالت
۷- امير رضا قويدل
۸- بابک ساطلي
۹- بهرام وکيلي
۱۰- پويا عبادالهي واحد
۱۱- حسن الله مراد
۱۲- حسين پناهی
۱۳- رامين حيدري
۱۴- رضا براري سوادکوهي
۱۵- رضا کريم پور
۱۶- ساسان نيكوكار
۱۷- سايت ايران PHP
۱۸- سيد احمد موسوی
۱۹- شرکت سخا روش
۲۰- صادق علوی زاده
۲۱- عباس مقدس نجفيان
۲۲- عليرضا سرمدی
۲۳- عليرضا گلکاری
۲۴- غلامرضا(عليرضا) غفوري منش
۲۵- مجتبی دشتی نژاد
۲۶- مجله رايانه
۲۷- محمد امدادی
۲۸- محمد باقر معموری
۲۹- مدرسه وب
۳۰- مديريت سايت
۳۱- مهرداد تاجيک
۳۲- مهسا قنبري
۳۳- نازيلا دنيائي
۳۴- وحيد نصيري
۳۵- کاظم آقاسی


Books ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۲۸۱ مراجعه امروز
۳۸۷۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

اضافه کردن کتاب , نشريه
نام : XML and SQL Server 2000
آدرس : http://www.naghoospress.com/moshfegh/bookdetails.aspx?&isbn=964-377-014-1

توضيحات: no Comment
نام : Multimedia, The Complete Reference for Windows Programming
آدرس : http://www.naghoospress.com/moshfegh/bookdetails.aspx?group=categories&cid=7&isbn=964-5779-53-7

توضيحات: ISBN: 964-5779-53-7 Title: Multimedia, The Complete Reference for Windows Programming Author(s): Soheyl Salehi, Ahmad Pahlevan Tafti Publisher: Naghoos Publish Number: 1 Publish Year: 1380 Quantity: 2000 Number of Pages: 320
نام : آموزش کپی سی دی و برنامه neto
آدرس : http://www.chortkeh.net/books.htm

توضيحات: نحوه کپی سی دی را به نحو سلیس و آسان آموزش میدهد
نام : Mastering Delphi 7
آدرس : http://www.amazon.com/exec/obidos/ASIN/078214201X/qid=1051274109/sr=2-1/ref=sr_2_1/002-0127101-6717672

توضيحات: يكي از بهترين ها راجع به دلفي و تنها كتاب راجع به دلفي 7 تا به حال. اين كتاب نوشته يكي از معروفترين نويسندنگان به نام Marco Cantu است. Macro Cantu تا به حال از نسخه 1 دلفي براي آن كتاب نوشته است. شما چه تازه كار و چه حرفه اي دلفي باشيد اين كتاب به شما خيلي خيلي كمك مي كند. اين كتاب NET. را به طور كامل پوشش داده است. ليستي از مطالبي كه در اين كتاب پيدا مي كنيد: Creating visual web applications with IntraWeb Writing sockets-based applications with Indy Creating data-aware controls and custom dataset components Creating database applications using ClientDataSet and dbExpress Building client-server applications using InterBase Interfacing with Microsoft's ADO Programming for a multi-tiered application architecture Taking advantage of Delphi's support for COM, OLE Automation, and COM+ Taking advantage of Delphi's XML and SOAP support Implementing Internet protocols in your Delphi app Creating UML class diagrams using ModelMaker Visually preparing reports using RAVE Using the Delphi language to create your first .NET programs معموري
نام : Web Services Development with Delphi
آدرس : http://www.amazon.com/exec/obidos/tg/detail/-/1931769087/qid=1051274109/sr=1-2/ref=sr_1_2/002-0127101-6717672?v=glance&s=books

توضيحات: اين كتابه به درد برنامه نويسان حرفه اي دلفي مي خورد كه قصد دارند اطلاعات خودشان را راجع به تكنولوژي هاي جديدي مثل Web Service افزايش بدهند
در اين كتاب مي توانيد مباحثي از XML و SOAP و dbExpress و BDE و dbGO را كه به Web Services ربط پيدا مي كند مطالعه كنيد.

نام : Delphi 6 Developer's Guide
آدرس : http://www.amazon.com/exec/obidos/tg/detail/-/0672321157/qid=1051274109/sr=1-3/ref=sr_1_3/002-0127101-6717672?v=glance&s=books

توضيحات: اين كتاب يكي از بهترين ها راجع به دلفي 6 است. مي توان گفت كه يكي از بهترين مرجع ها راجع به دلفي است. و از A تاZ را در دلفي پوشش مي دهد.
به علاوه اطلاعات كامل و ذيقيمتي راجع به تكنولوژي هاي جديد مثل WebService و SOAP و XML ارائه مي دهد.
اين كتاب توسط انتشارات غزال به فارسي ترجمه شده است.
البته ترجمه اين كتاب از نظر ما قابل قبول نيست. بنابراين همه دوستان را به مطالعه نسخه انگليسي آن تشويق مي كنيم.
نام : Programming and Problem Solving with Delphi
آدرس : http://www.amazon.com/exec/obidos/tg/detail/-/0201708442/qid=1051274109/sr=1-4/ref=sr_1_4/002-0127101-6717672?v=glance&s=books

توضيحات: اين كتاب يك مرجع كامل و منحصر به فرد است. يكي از مهمترين مزاياي مطالعه اين كتاب براي شما تسلط كامل شما بر برنامه نويسي با دلفي و حل مشكلات خودتان است.
اين كتاب ديد خيلي خوبي راجع به برنامه نويسي OOP به شما مي دهد.
نام : مبانی و داس تحت ویندوز
آدرس : http://www.chortkeh.net/books.htm

توضيحات: تنها کتاب داس تحت ویندوز
نام : Programming and Problem Solving with Delphi
آدرس : http://www.amazon.com/exec/obidos/tg/detail/-/0201708442/qid=1051274109/sr=1-4/ref=sr_1_4/002-0127101-6717672?v=glance&s=books

توضيحات: اين كتاب يك مرجع كامل و منحصر به فرد است. يكي از مهمترين مزاياي مطالعه اين كتاب براي شما تسلط كامل شما بر برنامه نويسي با دلفي و حل مشكلات خودتان است.
اين كتاب ديد خيلي خوبي راجع به برنامه نويسي OOP به شما مي دهد.
نام : Delphi/Kylix Database Development DataCLX for Windows and Linux
آدرس : http://www.amazon.com/exec/obidos/tg/detail/-/067232265X/qid=1051274109/sr=1-6/ref=sr_1_6/002-0127101-6717672?v=glance&s=books

توضيحات: اين كتاب از جهاتي واقعا منحصر بفرد است.
زيرا اين كتاب تقريبا تنها كتابي است كه مباحث Database را راجع به Kylix هم تحت پوشش قرار داده است. البته مباحث مرتبط به Database و Kylix رو مي توان در كتابهاي ديگر مثل Delphi 6 Developer's Guide و يا Mastering Delphi 6 يافت. ولي هيچ كتابي به جامعي اين كتاب به اين مباحث نپرداخته است.
در نهايت اگر شما بايد برنامه Cross-Platform بنويسيد حتما بايد اين كتاب رو مطالعه كنيد.
نام : The Tomes of Delphi: Algorithms and Data Structures
آدرس : http://www.amazon.com/exec/obidos/tg/detail/-/1556227361/qid=1051274109/sr=1-7/ref=sr_1_7/002-0127101-6717672?v=glance&s=books

توضيحات: The Tomes of Delphi يكي از بهترين مجموعه ها راجع به دلفي است و كتاب Algorithms and Data Structures هم يكي از بهترين كتابهاي اين مجموعه است.
مباحث مطرح شده در اين كتاب واقعا جالب توجه است و هر برنامه نويس حرفه اي حتما بايد اين كتاب رو مطالعه كند.
نام : Advanced Delphi Developer's Guide to ADO
آدرس : http://www.amazon.com/exec/obidos/tg/detail/-/1556227582/qid=1051274109/sr=1-10/ref=sr_1_10/002-0127101-6717672?v=glance&s=books

توضيحات: كتابهاي زيادي راجع به َADO نوشته شده است. ولي اكثر آنها به درد برنامه نويسان دلفي نمي خورد.
ولي اين كتاب يكي از آن معدود كتابهايي است كه مطالبش كاملا دلفي رو تحت پوشش قرار مي دهد. اگر شما قصد داريد از اين به بعد پروژه هاي خود را با ADO اجرا كنيد يا تا به حال اين كار را انجام مي داديد اين كتاب مي تواند اطلاعات خيلي خوب و جامعي را در اختيار شما قرار بدهد.
نام : Beginning VB.NET, Second Edition
آدرس : http://www.amazon.com/exec/obidos/ASIN/1861007612/qid=1051275527/sr=2-1/ref=sr_2_1/002-0127101-6717672

توضيحات: اين كتاب از انتشارات ٌWrox است.
انتشارات Wrox يكي از اولين انتشاراتهايي است كه به NET. پرداخته است.

نام : گلچین سوال های کامپیوتر
آدرس : http://www.chortkeh.net/books.htm

توضيحات: اولین و تنها نمونه سوالهای امتحانات فنی و حرفه ای در رشته های مربی گری دانشگاه ها و امتحانات دریافت مدارک فنی و حرفه ای
نام : كتاب آموزشی ASP 3.0
آدرس : http://www.nashreoloom.com

توضيحات: اين كتاب، ترجمه‌ای از سری كتابهای from scratch از انتشارات Que می‌باشد كه توسط نيكلاس چيس تأليف شده‌است. در اين كتاب حين ساخت سايت وِبی فرضی، مطالبی از قبيل: مبانی HTML، VBScript و برنامه‌های شیءگرا برای ايجاد برنامه‌های كاربردی مبتنی بر وِب، دسترسی به بانك اطلاعاتی با استفاده از ASP، مشخص‌كردن سايت با استفاده از Cookie‏ها و اطلاعات بانك اطلاعاتی، افزودن قابليتهای مزايده فرد به فرد اجناس، ايجاد شرايط تجارت الكترونيكی و پياده‌سازی كارتهای اعتباری و... را فرا خواهيد گرفت.
نام : matlab6.5
آدرس : www.naghoospress.com

توضيحات:
نام : Delphi in a Nutshell: A Desktop Quick Reference (In a Nutshell)
آدرس : http://www.amazon.com/exec/obidos/tg/detail/-/1565926595/qid=1051274109/sr=1-5/ref=sr_1_5/002-0127101-6717672?v=glance&s=books

توضيحات: همان طور كه از اسم كتاب هم بر مي آيد اين كتاب دلفي را بسيار سريع و ساده آموزش مي دهد. در واقع اين كتاب شما را يك سنجاب فرض مي كند كه دوست داريد دلفي را فقط در قالب يك فندق نوش جان كنيد (:-
مطالعه اين كتاب به كاربران مبتدي قويا توصيه مي شود.
نام : عصر ارتباط
آدرس :

توضيحات: هفته نامه اي بسيار عالي كه به موضوعات ITمي پردازد البته وقتي مطلب كم باشد FrontPage,Flashوچيزاي ديگر هم قاطيش مي كند .. من از اين جهت از اين هفته نامه خوشم امد كه تاريخ اغلب سيمنار ها رو قبل از انجام اعلام مي كند(چون ماهنامه ها بعد از سيمنار اعلام مي كنند) از جمله حسنهاي اين هفته نامه تبليغات با شرح است بعني مادربورد فلان را علاوه بر نام و مشخصات ... كلي هم راجب به كارايش مي نويسد


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۲۸۴ مراجعه امروز
۳۸۷۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : C
تعداد مقالات : ۷۶

مقدمات زبان C
قسمت اول آموزش سي
C ,مديريت سايت,۷۸۲۶ بار خوانده شده,۱۹۱ رای دارد,۱۰/۸/۱۳۸۱
انواع داده
آموزش سي قسمت دوم
C ,مديريت سايت,۳۹۲۰ بار خوانده شده,۴۴ رای دارد,۱۰/۸/۱۳۸۱
متغير
آموزش سي قسمت سوم
C ,مديريت سايت,۳۲۹۷ بار خوانده شده,۲۶ رای دارد,۱۰/۸/۱۳۸۱
عملگرها
آموزش سي قسمت چهارم
C ,مديريت سايت,۳۰۸۷ بار خوانده شده,۲۰ رای دارد,۱۰/۸/۱۳۸۱
تبديل انواع
آموزش سي قسمت پنجم
C ,مديريت سايت,۲۹۱۲ بار خوانده شده,۱۵ رای دارد,۱۰/۸/۱۳۸۱
ساختمان زبان C و چند تابع ورودي خروجي
آموزش زبان سی قسمت ششم
C ,مديريت سايت,۲۸۷۷ بار خوانده شده,۱۵ رای دارد,۱۰/۸/۱۳۸۱
تابع ()printf
آموزش زبان سي قسمت هفتم
C ,مديريت سايت,۲۶۸۲ بار خوانده شده,۸ رای دارد,۱۰/۸/۱۳۸۱
تابع ()scanf
آموزش زبان سي قسمت هشتم
C ,مديريت سايت,۲۳۵۷ بار خوانده شده,۳ رای دارد,۱۰/۸/۱۳۸۱
خواندن يك كاراكتر از ورودي
آموزش سي قسمت نهم
C ,مديريت سايت,۲۴۳۹ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
نوشتن يك كاراكتر در خروجي
آموزش سي قسمت دهم
C ,مديريت سايت,۲۳۲۲ بار خوانده شده,۵ رای دارد,۱۰/۸/۱۳۸۱
ساختارهاي تكرار
آموزش سي قسمت يازدهم
C ,مديريت سايت,۲۴۹۵ بار خوانده شده,۱۰ رای دارد,۱۰/۸/۱۳۸۱
ساختارهاي تصميم
آموزش سي قسمت دوازدهم
C ,مديريت سايت,۲۳۳۵ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
توابع و كلاسهاي حافظه
آموزش سي قسمت سيزدهم
C ,مديريت سايت,۲۴۵۷ بار خوانده شده,۱۰ رای دارد,۱۰/۸/۱۳۸۱
توابعي كه هيچ مقداري را برنمي گردانند
آموزش سي قسمت چهاردهم
C ,مديريت سايت,۲۱۶۵ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
انواع فراخواني و مقاديري كه توابع برمي گردانند
آموزش سي قسمت پانزدهم
C ,مديريت سايت,۲۱۱۸ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
تعيين نوع تابع
آموزش سي قسمت شانزدهم
C ,مديريت سايت,۲۰۲۷ بار خوانده شده,۵ رای دارد,۱۰/۸/۱۳۸۱
كلاسهاي حافظه
آموزش سي قسمت هفدهم
C ,مديريت سايت,۲۱۶۸ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
آرايه ها
آموزش سي قسمت هجدهم
C ,مديريت سايت,۲۲۵۷ بار خوانده شده,۸ رای دارد,۱۰/۸/۱۳۸۱
ارزش دهي اوليه به آرايه ها
آموزش سي قسمت نوزدهم
C ,مديريت سايت,۱۹۹۰ بار خوانده شده,۳ رای دارد,۱۰/۸/۱۳۸۱
رشته ها
آموزش سي قسمت بيست و يکم
C ,مديريت سايت,۲۰۴۹ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
توابع ورودي خروجي رشته ها
آموزش سي قسمت بيست و دوم
C ,مديريت سايت,۱۸۳۲ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
آرايه اي از رشته ها
آموزش سي قسمت بيست و چهارم
C ,مديريت سايت,۱۸۶۷ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
بعضي از توابع رشته اي
آموزش سي قسمت بيست و پنجم
C ,مديريت سايت,۱۸۲۸ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
اشاره گرها
آموزش سي قسمت بيست و ششم
C ,مديريت سايت,۲۰۵۵ بار خوانده شده,۱۲ رای دارد,۱۰/۸/۱۳۸۱
عملگرهاي اشاره گر
آموزش سي قسمت بيست و هفتم
C ,مديريت سايت,۱۷۶۶ بار خوانده شده,۳ رای دارد,۱۰/۸/۱۳۸۱
اعمال روي اشاره گرها
آموزش سي قسمت بيست و هشتم
C ,مديريت سايت,۱۷۳۷ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
اشاره گر و آرايه
آموزش سي قسمت بيست و نهم
C ,مديريت سايت,۱۸۰۵ بار خوانده شده,۶ رای دارد,۱۰/۸/۱۳۸۱
اشاره گرها و رشته ها
آموزش سي قسمت سي
C ,مديريت سايت,۱۷۰۴ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
ارزش دهي اوليه رشته ها به عنوان اشاره گر
آموزش سي قسمت سي و يکم
C ,مديريت سايت,۱۷۲۲ بار خوانده شده,۲ رای دارد,۱۰/۸/۱۳۸۱
اشاره گر به اشاره گر
آموزش سي قسمت سي و دوم
C ,مديريت سايت,۱۶۷۶ بار خوانده شده,۶ رای دارد,۱۰/۸/۱۳۸۱
نكاتي در مورد اشاره گرها
آموزش سي قسمت سي و سوم
C ,مديريت سايت,۱۶۹۰ بار خوانده شده,۲ رای دارد,۱۰/۸/۱۳۸۱
آرگومانهاي تابع اصلي (()main)
آموزش سي قسمت سي و چهارم
C ,مديريت سايت,۱۷۶۵ بار خوانده شده,۷ رای دارد,۱۰/۸/۱۳۸۱
دستورات پيش پردازنده
آموزش سي قسمت سي و پنجم
C ,مديريت سايت,۱۶۸۱ بار خوانده شده,۴ رای دارد,۱۰/۸/۱۳۸۱
تعريف ماكرو
آموزش سي قسمت سي و ششم
C ,مديريت سايت,۱۶۴۶ بار خوانده شده,۲ رای دارد,۱۰/۸/۱۳۸۱
ضميمه كردن فايل ها (file inclusion)
آموزش سي قسمت سي و هفتم
C ,مديريت سايت,۱۷۰۸ بار خوانده شده,۷ رای دارد,۱۰/۸/۱۳۸۱
دستورات پيش پردازنده شرطي
آموزش سي قسمت سي و هشتم
C ,مديريت سايت,۱۵۴۰ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
حذف ماكروهاي تعريف شده
آموزش سي قسمت سي و نهم
C ,مديريت سايت,۱۴۸۲ بار خوانده شده,۰ رای دارد,۱۰/۸/۱۳۸۱
اسامي ماكروهاي از پيش تعريف شده
آموزش سي قسمت چهلم
C ,مديريت سايت,۱۵۰۰ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
دستور پيش پردازنده #line
آموزش سي قسمت چهل و يکم
C ,مديريت سايت,۱۵۰۴ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
دستور پيش پردازنده # error
آموزش سي قسمت چهل و دوم
C ,مديريت سايت,۱۴۵۵ بار خوانده شده,۰ رای دارد,۱۰/۸/۱۳۸۱
ساختمان ها
آموزش سي قسمت چهل و سوم
C ,مديريت سايت,۱۶۱۶ بار خوانده شده,۵ رای دارد,۱۰/۸/۱۳۸۱
تعريف نوع ساختمان
آموزش سي قسمت چهل و چهارم
C ,مديريت سايت,۱۵۸۱ بار خوانده شده,۱۳ رای دارد,۱۰/۸/۱۳۸۱
دسترسي به اجزاي ساختمان
آموزش سي قسمت چهل و پنجم
C ,مديريت سايت,۱۵۶۹ بار خوانده شده,۰ رای دارد,۱۰/۸/۱۳۸۱
ارزش دهي اوليه به ساختمان
آموزش سي قسمت چهل و ششم
C ,مديريت سايت,۱۴۷۴ بار خوانده شده,۰ رای دارد,۱۰/۸/۱۳۸۱
انتساب ساختمانها به يكديگر
آموزش سي قسمت چهل و هفتم
C ,مديريت سايت,۱۴۳۹ بار خوانده شده,۲ رای دارد,۱۰/۸/۱۳۸۱
آرايه اي از ساختمانها
آموزش سي قسمت چهل و هشتم
C ,مديريت سايت,۱۴۵۰ بار خوانده شده,۱ رای دارد,۱۰/۸/۱۳۸۱
تعريف ساختمان ها به صورت لانه اي
آموزش سي قسمت چهل و نهم
C ,مديريت سايت,۱۴۴۵ بار خوانده شده,۲ رای دارد,۲۰/۸/۱۳۸۱
انتقال ساختمان ها به توابع
آموزش سي قسمت پنجاهم
C ,مديريت سايت,۱۴۶۳ بار خوانده شده,۱ رای دارد,۲۰/۸/۱۳۸۱
اشاره گرهاي ساختمان
آموزش سي قسمت پنجاه و يکم
C ,مديريت سايت,۱۵۴۹ بار خوانده شده,۰ رای دارد,۲۰/۸/۱۳۸۱
ساختمان هاي بيتي
آموزش سي قسمت پنجاه و دوم
C ,مديريت سايت,۱۴۵۳ بار خوانده شده,۰ رای دارد,۲۱/۸/۱۳۸۱
unions
آموزش سي قسمت پنجاه و سوم
C ,مديريت سايت,۱۴۲۶ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
ساختماني از union
آموزش سي قسمت پنجاه و چهارم
C ,مديريت سايت,۱۴۵۰ بار خوانده شده,۰ رای دارد,۲۱/۸/۱۳۸۱
تغيير نام داده با typedef
آموزش سي قسمت پنجا ه و پنجم
C ,مديريت سايت,۱۴۱۴ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
نوعهاي داده شمارشي
آموزش سي قسمت پنجاه و ششم
C ,مديريت سايت,۱۳۸۲ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
فايلها
آموزش سي قسمت پنجاه و هفتم
C ,مديريت سايت,۱۵۷۱ بار خوانده شده,۵ رای دارد,۲۱/۸/۱۳۸۱
انواع فايل از نظر نوع اطلاعات
آموزش سي قسمت پنجاه و هشتم
C ,مديريت سايت,۱۵۵۳ بار خوانده شده,۱ رای دارد,۲۱/۸/۱۳۸۱
سازمان فايل
آموزش سي قسمت پنجاه و نهم
C ,مديريت سايت,۱۵۱۵ بار خوانده شده,۵ رای دارد,۲۱/۸/۱۳۸۱
باز كردن فايل
آموزش سي قسمت شصتم
C ,مديريت سايت,۱۴۶۳ بار خوانده شده,۴ رای دارد,۲۱/۸/۱۳۸۱
تابع ()fopen
آموزش سي قسمت شصت و يکم
C ,مديريت سايت,۱۴۴۱ بار خوانده شده,۱ رای دارد,۲۱/۸/۱۳۸۱
بستن فايل
آموزش سي قسمت شصت و دوم
C ,مديريت سايت,۱۳۶۲ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
ورودي خروجي كاراكترها
آموزش سي قسمت شصت و سوم
C ,مديريت سايت,۱۴۱۷ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
ورودي خروجي رشته ها
آموزش سي قسمت شصت و چهارم
C ,مديريت سايت,۱۳۹۲ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
فايل به عنوان وسيله ورودي خروجي
آموزش سي قسمت شصت و پنجم
C ,مديريت سايت,۱۴۱۵ بار خوانده شده,۱ رای دارد,۲۱/۸/۱۳۸۱
عيب يابي در ورودي خروجي فايل
آموزش سي قسمت شصت و ششم
C ,مديريت سايت,۱۳۸۶ بار خوانده شده,۱ رای دارد,۲۱/۸/۱۳۸۱
حذف فايل
آموزش سي قسمت شصت و هفتم
C ,مديريت سايت,۱۴۱۱ بار خوانده شده,۰ رای دارد,۲۱/۸/۱۳۸۱
بافر (buffer)
آموزش سي قسمت شصت و هشتم
C ,مديريت سايت,۱۵۶۳ بار خوانده شده,۴ رای دارد,۲۱/۸/۱۳۸۱
ورودي و خروجي همراه با فرمت
آموزش سي قسمت شصت و نهم
C ,مديريت سايت,۱۴۱۲ بار خوانده شده,۲ رای دارد,۲۱/۸/۱۳۸۱
ورودي خروجي ركورد
آموزش سي قسمت هفتادم
C ,مديريت سايت,۱۶۸۵ بار خوانده شده,۳ رای دارد,۲۱/۸/۱۳۸۱
حل يك مساله از طريق فايلهاي ترتيبي
C ,مديريت سايت,۱۴۵۱ بار خوانده شده,۲ رای دارد,۲۹/۸/۱۳۸۱
دسترسي تصادفي به فايل ( ورودي خروجي تصادفي )
C ,مديريت سايت,۱۴۱۹ بار خوانده شده,۲ رای دارد,۲۹/۸/۱۳۸۱
حل يك مسئله ازطريق فايل تصادفي
C ,مديريت سايت,۱۴۹۸ بار خوانده شده,۶ رای دارد,۲۹/۸/۱۳۸۱
دستگاههاي ورودي خروجي استاندارد
C ,مديريت سايت,۱۳۷۸ بار خوانده شده,۲ رای دارد,۲۹/۸/۱۳۸۱
وابع كتابخانه اي ( قسمت اول )
C ,مديريت سايت,۱۵۶۲ بار خوانده شده,۱۰ رای دارد,۲/۹/۱۳۸۱
زبان سی و پاسکال
نکاتی در مورد زبان سی و پاسکال شماره 1
C ,بهرام وکيلي,۱۹۰۸ بار خوانده شده,۱۳ رای دارد,۸/۱۲/۱۳۸۱
زبان سی و پاسکال
نکاتی در مورد زبان سی و پاسکال شماره 2
C ,بهرام وکيلي,۱۷۲۹ بار خوانده شده,۸ رای دارد,۸/۱۲/۱۳۸۱
تجربه های آقای وکيلی ( قسمت دوم)
چگونه شروع كنيم
C ,بهرام وکيلي,۲۳۱۰ بار خوانده شده,۲۵ رای دارد,۲۱/۳/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۳۲۳ مراجعه امروز
۳۹۱۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : HTML
تعداد مقالات : ۲۲

مقدمه اي بر HTML
HTML ,مدرسه وب,۵۷۳۱ بار خوانده شده,۱۳۵ رای دارد,۲۴/۸/۱۳۸۱
HTML & WWW
HTML ,مدرسه وب,۳۳۹۸ بار خوانده شده,۵۰ رای دارد,۲۴/۸/۱۳۸۱
عناصر ( Elements )
HTML ,مدرسه وب,۲۹۶۴ بار خوانده شده,۱۸ رای دارد,۲۴/۸/۱۳۸۱
تگ های اصلی ( Basic Tags )
HTML ,مدرسه وب,۳۱۹۵ بار خوانده شده,۲۷ رای دارد,۲۴/۸/۱۳۸۱
فارسی نويسی
HTML ,مدرسه وب,۵۵۴۰ بار خوانده شده,۵۹ رای دارد,۲۴/۸/۱۳۸۱
فرمت دهی ( Formatting )
HTML ,مدرسه وب,۲۴۹۷ بار خوانده شده,۹ رای دارد,۲۴/۸/۱۳۸۱
Character Entities
HTML ,مدرسه وب,۲۲۶۴ بار خوانده شده,۳ رای دارد,۲۴/۸/۱۳۸۱
پيوندهای اچتمل ( HTML Links )
HTML ,مدرسه وب,۲۳۶۵ بار خوانده شده,۸ رای دارد,۲۴/۸/۱۳۸۱
جداول ( Tables)
HTML ,مدرسه وب,۲۳۵۰ بار خوانده شده,۸ رای دارد,۲۴/۸/۱۳۸۱
فريمها ( Frames )
HTML ,مدرسه وب,۲۱۸۰ بار خوانده شده,۷ رای دارد,۲۴/۸/۱۳۸۱
فهرستها ( Lists )
HTML ,مدرسه وب,۲۱۴۸ بار خوانده شده,۴ رای دارد,۲۴/۸/۱۳۸۱
فرمها ( Forms )
HTML ,مدرسه وب,۲۳۷۳ بار خوانده شده,۱۱ رای دارد,۲۴/۸/۱۳۸۱
تصاوير ( Images )
HTML ,مدرسه وب,۲۲۷۹ بار خوانده شده,۱۴ رای دارد,۲۴/۸/۱۳۸۱
پس زمينه ( Background )
HTML ,مدرسه وب,۲۰۶۶ بار خوانده شده,۴ رای دارد,۲۴/۸/۱۳۸۱
قلم ها ( HTML Fonts )
HTML ,مدرسه وب,۲۰۳۲ بار خوانده شده,۴ رای دارد,۲۴/۸/۱۳۸۱
استایل شیتها ( Style Sheets )
HTML ,مدرسه وب,۲۰۷۳ بار خوانده شده,۹ رای دارد,۲۴/۸/۱۳۸۱
HTML Reference
HTML ,مدرسه وب,۲۰۴۶ بار خوانده شده,۶ رای دارد,۲۴/۸/۱۳۸۱
رنگها در اچ تي ام ال
HTML ,مدرسه وب,۲۰۴۳ بار خوانده شده,۱۶ رای دارد,۲۴/۸/۱۳۸۱
برگه تقلب اچتمل
HTML ,مدرسه وب,۲۲۷۲ بار خوانده شده,۲۳ رای دارد,۲۴/۸/۱۳۸۱
مرجع نکات فني وب
HTML ,مدرسه وب,۲۲۲۳ بار خوانده شده,۱۲ رای دارد,۲۵/۸/۱۳۸۱
مطالب كلي راجع به طراحي سايت
چنانچه قصد داريد برنامه نويسي را شروع كنيدمناسب است كه به نكات زير توجه نماييد
HTML ,عباس مقدس نجفيان,۵۰۵۴ بار خوانده شده,۷۲ رای دارد,۲۲/۱۱/۱۳۸۱
Cascading Style Sheet (CSS) چيست؟
آموزش مقدماتی CSS
HTML ,عباس مقدس نجفيان,۲۲۲۸ بار خوانده شده,۱۵ رای دارد,۲۲/۱۱/۱۳۸۱


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۳۵ مراجعه امروز
۳۹۲۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : DHTML
تعداد مقالات : ۴

DOM چيست ؟
DOM)Document Object Model) يک رابط برنامه نويسي....
DHTML ,مديريت سايت,۲۰۲۴ بار خوانده شده,۹ رای دارد,۲۹/۱/۱۳۸۲
آشنايي با فيلترهاي CSS
: بوسيله فيلترها در CSS ميتوانيد به تصاوير و متنهاي درون صفحه وب افكتهاي متفاوتي را اضافه كنيد.
DHTML ,عليرضا گلکاری,۱۶۷۸ بار خوانده شده,۹ رای دارد,۱۲/۷/۱۳۸۲
ساخت منوهاي Drop Down
در اين يادداشت مي خواهم چگونگي ساخت منوهاي Drop Down را آموزش بدهم...
DHTML ,مجتبی دشتی نژاد,۱۴۸۵ بار خوانده شده,۷ رای دارد,۴/۹/۱۳۸۲
ساخت منوهاي Rollover با CSS
حتما تا به حال در حين گشت زني در اينترنت، با منوهايي برخورد کرده ايد که...
DHTML ,مجتبی دشتی نژاد,۱۳۵۵ بار خوانده شده,۱۱ رای دارد,۴/۹/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۳۴۱ مراجعه امروز
۳۹۳۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : JavaScript
تعداد مقالات : ۳

بهينه سازي حجم كدهاي جاوااسكريپت
تكنيكهاي كاهش حجم كدهاي جاوااسكريپت
JavaScript ,عليرضا گلکاری,۲۷۵۲ بار خوانده شده,۴۴ رای دارد,۱۴/۵/۱۳۸۲
بهينه سازي حجم كدهاي جاوااسكريپت ( قسمت دوم)
تكنيكهاي كاهش حجم كدهاي جاوااسكريپت
JavaScript ,عليرضا گلکاری,۱۶۳۱ بار خوانده شده,۹ رای دارد,۱۴/۵/۱۳۸۲
بهينه سازي حجم كدهاي جاوااسكريپت ( 3 )
تكنيكهاي كاهش حجم كدهاي جاوااسكريپت با بيان يك مثال عملي
JavaScript ,عليرضا گلکاری,۱۵۹۹ بار خوانده شده,۱۱ رای دارد,۲۵/۵/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۳۴۴ مراجعه امروز
۳۹۳۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : VBscript
تعداد مقالات : ۰


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۴۷ مراجعه امروز
۳۹۳۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : ASP
تعداد مقالات : ۱۱

مقدمه اى بر ASP
سری آموزش asp قسمت اول
ASP ,محمد باقر معموری,۱۱۰۶۲ بار خوانده شده,۲۵۵ رای دارد,۱۷/۱۱/۱۳۸۱
ASP را در رايانه خود راه اندازي کنيد
سری آموزش asp قسمت دوم
ASP ,محمد باقر معموری,۶۸۵۴ بار خوانده شده,۸۲ رای دارد,۱۷/۱۱/۱۳۸۱
نحو ASP
سری آموزش asp قسمت سوم
ASP ,محمد باقر معموری,۴۶۸۴ بار خوانده شده,۳۲ رای دارد,۱۷/۱۱/۱۳۸۱
متغييرها در ASP
سری آموزش asp قسمت چهارم
ASP ,محمد باقر معموری,۴۱۸۵ بار خوانده شده,۱۸ رای دارد,۱۷/۱۱/۱۳۸۱
Cookie ها در ASP
ASP ,محمد باقر معموری,۳۷۰۴ بار خوانده شده,۱۸ رای دارد,۱۹/۱۲/۱۳۸۱
فرم‌ها در ASP و وردى‌هاى كاربر
ASP ,محمد باقر معموری,۴۰۳۱ بار خوانده شده,۲۶ رای دارد,۱۹/۱۲/۱۳۸۱
رويه(procedure) هاى ASP
ASP ,محمد باقر معموری,۳۳۶۶ بار خوانده شده,۱۳ رای دارد,۱۹/۱۲/۱۳۸۱
نكاتي در مورد برنامه هاي كاربردي تحت وب
سری مقالات آموزش ASP پيشرفته شماره 1
ASP ,مديريت سايت,۳۷۲۴ بار خوانده شده,۲۲ رای دارد,۲۲/۱۲/۱۳۸۱
نكاتي در مورد برنامه هاي كاربردي تحت وب 2
سری مقالات آموزش ASP پيشرفته شماره 2
ASP ,مديريت سايت,۳۲۳۰ بار خوانده شده,۱۵ رای دارد,۰/۱/۱۳۸۲
شيء Response
سری آموزش ASP
ASP ,مديريت سايت,۳۰۵۳ بار خوانده شده,۷ رای دارد,۲۹/۱/۱۳۸۲
ارسال ايميل در ASP با استفاده از آبجکت CDONTS
طريقه استفاده از CDONT در ASP
ASP ,مديريت سايت,۳۹۰۸ بار خوانده شده,۵۵ رای دارد,۳۰/۲/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۵۰ مراجعه امروز
۳۹۴۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : SQL
تعداد مقالات : ۳

آسيب‌پذيري Login ID در SQL Server 7.0
SQL ,رامين حيدري,۳۰۷۰ بار خوانده شده,۳۷ رای دارد,۸/۱۱/۱۳۸۱
شاخصها و پيوندها در SQL Server
SQL ,مهسا قنبري,۳۵۱۸ بار خوانده شده,۳۷ رای دارد,۸/۱۱/۱۳۸۱
آموزش كاربردي زبان SQL قدم به قدم
SQL ,پويا عبادالهي واحد,۱۱۵۷۴ بار خوانده شده,۳۲۳ رای دارد,۸/۱۱/۱۳۸۱


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۵۳ مراجعه امروز
۳۹۴۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : ADO
تعداد مقالات : ۲

مقايسه ADO و ADO.NET
ADO ,حسن الله مراد,۲۷۸۳ بار خوانده شده,۳۶ رای دارد,۸/۱۱/۱۳۸۱
ارتباط به منابع داده در ADO.NET ( بخش اول )
بمنظوراتصال به يک منبع داده ، مي بايست در ابتدا يک Net...
ADO ,شرکت سخا روش,۱۹۲۲ بار خوانده شده,۲۱ رای دارد,۱۰/۱۰/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۵۶ مراجعه امروز
۳۹۴۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : .NET
تعداد مقالات : ۳۲

چند خط درباره وي سي دات نت
در اين مقاله كوتاه با بخشي از توانائي هاي ويژوال سي دات نت آشنا خواهيد شد
.NET ,Inprise,۲۵۲۷ بار خوانده شده,۳۰ رای دارد,۳/۱/۱۳۸۲
فراهم كننده داده ( Data Provider ) براي بانكهاي اطلاعاتي با استفاده از تكنولوژي NET.
در اين نوشتار با مقدمات طراحي فراهم كننده داده ( Data Provider ) براي بانكهاي اطلاعاتي با استفاده از تكنولوژي NET. خواهيم پرداخت
.NET ,Inprise,۲۶۶۱ بار خوانده شده,۲۳ رای دارد,۱۰/۲/۱۳۸۲
XML در دات نت ( بخش اول )
روشهای استفاده از xml در دات نت
.NET ,شرکت سخا روش,۱۹۶۰ بار خوانده شده,۱۶ رای دارد,۲۳/۲/۱۳۸۲
XML در دات نت ( بخش دوم )
روشهای استفاده از xml در دات نت
.NET ,شرکت سخا روش,۱۷۴۵ بار خوانده شده,۱۰ رای دارد,۲۳/۲/۱۳۸۲
معرفي اوليه VB.NET
يک برنامه کامپيوتري ، از مجموعه اي دستورالعمل که نوع و نحوه انجام ....
.NET ,شرکت سخا روش,۲۶۴۰ بار خوانده شده,۴۲ رای دارد,۳/۴/۱۳۸۲
مبانی دا ت نت ( بخش اول )
دات نت ، پلات فرم جديد ماکروسافت بمنظور تحقق نظريه : " نرم افزار بعنوان ...
.NET ,شرکت سخا روش,۲۷۷۶ بار خوانده شده,۳۲ رای دارد,۱۳/۵/۱۳۸۲
بررسي يک برنامه نمونه دات نت
امکانات و پتانسيل هاي گسترده ارائه شده توسط دات نت ، امکان طراحي و بکارگيري........
.NET ,شرکت سخا روش,۲۱۹۳ بار خوانده شده,۱۸ رای دارد,۱۰/۶/۱۳۸۲
معماري سرويس هاي وب ( بخش اول )
سرويس هاي وب يکي از مهمترين تحولات اخير در زمينه نرم افزار...
.NET ,شرکت سخا روش,۱۵۸۵ بار خوانده شده,۹ رای دارد,۱۰/۶/۱۳۸۲
مباني دا ت نت ( بخش دوم )
در بخش اول اين مقاله به بررسي و معرفي فريمورک دانت پرداخته گرديد....
.NET ,شرکت سخا روش,۲۰۸۰ بار خوانده شده,۱۲ رای دارد,۲۷/۶/۱۳۸۲
مباني دا ت نت ( بخش سوم )
در بخش دوم اين مقاله با اولين لايه فريمورک دات نت ( CLR ) آشنا شديم . در ادامه بر روي ...
.NET ,شرکت سخا روش,۱۸۵۲ بار خوانده شده,۹ رای دارد,۲۷/۶/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت اول
در طي سلسله مقالاتي مي خواهيم با C# بيشتر آشنا شويم. فرض اين مقالات بر اين است ...
.NET ,وحيد نصيري ,۲۶۰۰ بار خوانده شده,۲۴ رای دارد,۱۲/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت دوم
در اين قسمت مي خواهيم با يك سري از اصول اوليه ي شيء گرايي در سي شارپ كمي آشنا شويم. لازم به ...
.NET ,وحيد نصيري ,۱۸۷۶ بار خوانده شده,۸ رای دارد,۱۲/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت سوم
در بسياري از موارد هنگام برنامه نويسي لازم است تا از عبارات شرطي استفاده كنيم. براي انجام اينكار ...
.NET ,وحيد نصيري ,۱۷۲۱ بار خوانده شده,۷ رای دارد,۱۲/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت چهارم
هنگامي آرايه ها ايجاد مي شوند كه بخواهيم با مجموعه اي از اطلاعات همجنس ...
.NET ,وحيد نصيري ,۱۶۴۸ بار خوانده شده,۳ رای دارد,۲۷/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت پنجم
اگر نياز باشد تا قطعه اي از كد بيش از يكبار اجرا شود نياز به استفاده از حلقه ها...
.NET ,وحيد نصيري ,۱۵۲۶ بار خوانده شده,۳ رای دارد,۲۷/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت ششم
دو مورد تكميلي در مورد حلقه ها در سي شارپ...
.NET ,وحيد نصيري ,۱۴۲۹ بار خوانده شده,۲ رای دارد,۲۷/۷/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت هفتم
در اين قسمت به يكي از مهمترين مباحث برنامه نويسي سي شارپ مي رسيم....
.NET ,وحيد نصيري ,۱۵۷۹ بار خوانده شده,۹ رای دارد,۱۱/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت هشتم
ظاهرا به نظر مي رسد كه توابع فقط مي توانند يك return داشته باشند و بلافاصله ...
.NET ,وحيد نصيري ,۱۴۳۸ بار خوانده شده,۰ رای دارد,۱۱/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت نهم
گاهي از اوقات لازم است تا نگارش هاي مختلفي از يك تابع داشته باشيم. براي مثال تعريف...
.NET ,وحيد نصيري ,۱۳۷۶ بار خوانده شده,۰ رای دارد,۱۱/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت دهم
Jagged arrays آرايه اي از آرايه ها است و همانطور كه ذكر شد لزومي ندارد كه...
.NET ,وحيد نصيري ,۱۴۳۳ بار خوانده شده,۱ رای دارد,۱۱/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت يازدهم
از اين قسمت به بعد مي خواهيم نگاهي دقيق تر به بحث شيء گرايي در سي شارپ بياندازيم؛ همانند فضاهاي......
.NET ,وحيد نصيري ,۱۳۷۰ بار خوانده شده,۴ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت دوازدهم
تا بحال در حد كاربرد ، با كلاس ها آشنا شده ايم . اما در اين قسمت مي خواهيم...
.NET ,وحيد نصيري ,۱۲۹۳ بار خوانده شده,۰ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت سيزدهم
با استفاده از ايندكسرها مي توان با يك كلاس همانند آرايه ها...
.NET ,وحيد نصيري ,۱۳۳۶ بار خوانده شده,۲ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت چهاردهم
ارث بري يكي از مفاهيم اوليه ي برنامه نويسي شيء گرا مي باشد...
.NET ,وحيد نصيري ,۱۲۹۱ بار خوانده شده,۱ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت پانزدهم
يكي ديگر از مفاهيم اوليه ي شيء گرايي پلي مرفيسم ( چند ريختي ) مي باشد....
.NET ,وحيد نصيري ,۱۳۲۵ بار خوانده شده,۳ رای دارد,۲۸/۸/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت شانزدهم
كلاس ها را همچنين مي توان به صورت abstract تعريف كرد. از اين نوع كلاس ها ...
.NET ,وحيد نصيري ,۱۲۵۷ بار خوانده شده,۰ رای دارد,۲۱/۹/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت هفدهم
در كلاس CCommObj كه با آن آشنا شديم ، آرايه اي Private از نوع ICommObjEvents به نام...
.NET ,وحيد نصيري ,۱۲۵۳ بار خوانده شده,۷ رای دارد,۲۱/۹/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت هجدهم
مقابله با خطاها در سي شارپ (Exception Handling in C#)
.NET ,وحيد نصيري ,۱۲۷۸ بار خوانده شده,۶ رای دارد,۲۱/۹/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت نوزدهم
سربارگذاري عملگر ها (Operator OverLoading)
.NET ,وحيد نصيري ,۱۲۴۳ بار خوانده شده,۴ رای دارد,۲۱/۹/۱۳۸۲
مقدمه اي بر سي شارپ : قسمت بيستم
Delegates در سي شارپ روشي مطمئن و typesafe را براي بكار گيري...
.NET ,وحيد نصيري ,۱۳۵۶ بار خوانده شده,۶ رای دارد,۲۱/۹/۱۳۸۲
نحوه پردازش صفحات ASP.NET بر روي سرويس دهنده وب
برنامه هاي وب از معماري سرويس گيرنده - سرويس دهنده تبعيت نموده و بر...
.NET ,شرکت سخا روش,۱۴۸۳ بار خوانده شده,۸ رای دارد,۲۹/۱۰/۱۳۸۲
ذخيره و بازيابي داده توسط ADO.NET (بخش اول)
با استفاده از ADO.NET ، امکان اتصال به منابع داده متفاوت...
.NET ,شرکت سخا روش,۱۷۰۳ بار خوانده شده,۱۵ رای دارد,۲۲/۱/۱۳۸۳


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۲۹۰ مراجعه امروز
۳۸۸۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Delphi
تعداد مقالات : ۴۴

طريقه استفاده از Microsoft Agent در دلفی
چگونگی استفاده از اجنت ميکروسافت در دلفی
Delphi ,صادق علوی زاده,۵۵۷۷ بار خوانده شده,۸۱ رای دارد,۲۶/۱۰/۱۳۸۱
DataSnap, WebSnap
Delphi ,مجله رايانه,۲۸۲۸ بار خوانده شده,۲۱ رای دارد,۸/۱۱/۱۳۸۱
بكاربردن XML در نرم‌افزارهاي بانك‌اطلاعاتي دلفي
در شماره‌هاي قبلي شما با XML آشنا شديد
Delphi ,احمد عدالت,۳۱۵۱ بار خوانده شده,۲۴ رای دارد,۸/۱۱/۱۳۸۱
دلفي 7
Delphi ,ساسان نيكوكار ,۷۳۹۷ بار خوانده شده,۱۵۳ رای دارد,۸/۱۱/۱۳۸۱
نكات ريز و درشت در دلفي
Delphi ,ساسان نيكوكار ,۵۷۷۴ بار خوانده شده,۴۰ رای دارد,۸/۱۱/۱۳۸۱
تاريخچه پاسكال
Delphi ,محمد باقر معموری,۲۲۳۵ بار خوانده شده,۳۸ رای دارد,۹/۱۱/۱۳۸۱
بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
طريقه بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
Delphi ,مديريت سايت,۶۷۸۸ بار خوانده شده,۷۶ رای دارد,۱۳/۱۱/۱۳۸۱
آموزش دلفی قسمت دوم
سری مقالات آموزشی دلفی
Delphi ,محمد باقر معموری,۶۰۸۸ بار خوانده شده,۸۶ رای دارد,۱۶/۱۱/۱۳۸۱
آشنايى با FastReport ساده‌ترين و قوى‌ترين كمپوننت گزارش‌سازى
Delphi ,محمد باقر معموری,۵۵۱۱ بار خوانده شده,۹۴ رای دارد,۲۳/۱۱/۱۳۸۱
استفاده از Flash در دلفى
در اين مقاله ياد می گيريد که چگونه از فلش در دلفی استفاده کنيد
Delphi ,محمد باقر معموری,۹۲۷۲ بار خوانده شده,۲۱۰ رای دارد,۲۴/۱۱/۱۳۸۱
اجرا كردن اپلت هاي كنترل پانل
Delphi ,محمد باقر معموری,۳۴۰۲ بار خوانده شده,۲۱ رای دارد,۲۵/۱۱/۱۳۸۱
تبديل خصوصيات فونتها به يك رشته و برعكس
Delphi ,محمد باقر معموری,۲۲۱۱ بار خوانده شده,۱۳ رای دارد,۲۵/۱۱/۱۳۸۱
روش جستجو Boyer-Moore
در اين مقاله با دو روش جستجوى Boyer-Moore آشنا مى‌شويد.
Delphi ,محمد باقر معموری,۲۲۴۱ بار خوانده شده,۶ رای دارد,۶/۱۲/۱۳۸۱
بالاترين 9 بسته Installساز
در اين مقاله با 9 برنامه Install ساز آشنا خواهيد شد!
Delphi ,محمد باقر معموری,۳۳۳۲ بار خوانده شده,۲۹ رای دارد,۶/۱۲/۱۳۸۱
مجموعه Tip شماره 1 ايران دولوپرز دات كام
8 نكته جالب و مهم راجع به دلفى!
Delphi ,محمد باقر معموری,۳۷۹۱ بار خوانده شده,۳۹ رای دارد,۶/۱۲/۱۳۸۱
مجموعه Tip شماره 2 ايران دولوپرز دات كام
5 نكته جالب و مهم راجع به دلفى!
Delphi ,محمد باقر معموری,۲۷۱۲ بار خوانده شده,۱۹ رای دارد,۶/۱۲/۱۳۸۱
مجموعه Tip شماره 3 ايران دولوپرز دات كام
3 نكته جالب و مهم راجع به دلفى!
Delphi ,محمد باقر معموری,۲۷۲۰ بار خوانده شده,۱۱ رای دارد,۶/۱۲/۱۳۸۱
چگونه از فايلهاى PDF در دلفى استفاده كنيم؟
يك مقاله مختصر راجع به نمايش PDF در برنامه‌هايتان!
Delphi ,مديريت سايت,۲۹۳۵ بار خوانده شده,۱۹ رای دارد,۶/۱۲/۱۳۸۱
دلفي و ASP.NET
دلفی و ASP.NET - ارتباطها
Delphi ,Inprise,۳۰۵۴ بار خوانده شده,۲۵ رای دارد,۳/۱/۱۳۸۲
چگونه دانش دلفي را براي يادگيري ويژوال بيسيک به کار بگيريم ...
اين مقاله سعي دارد به برنامه نويسان دلفي آموزش دهد چگونه از دانش خود در جهت يادگيري VB بهره برداري کنند
Delphi ,رضا براري سوادکوهي,۲۳۱۲ بار خوانده شده,۱۶ رای دارد,۸/۱/۱۳۸۲
Export كردن اطلاعات به XML
خيلي اوقات در برنامه نويسي اينترنت و همچنين در برنامه هاي بزرگ نياز داريد كه قابليت Export كردن يك Dataset را به XML به كاربرانتان بدهيد
Delphi ,محمد باقر معموری,۲۱۳۹ بار خوانده شده,۱۴ رای دارد,۱۱/۱/۱۳۸۲
استفاده از XML به عنوان ذخيره كننده اطلاعات
XML مي تواند دقيقا همچون يك Table براي شما عمل نمايد.....
Delphi ,محمد باقر معموری,۲۴۸۲ بار خوانده شده,۲۳ رای دارد,۱۱/۱/۱۳۸۲
نوشتن همه كمپوننتهاى در يك فايل XML با استفاده از TXMLDocument
با استفاده از اين مقاله و كدهاي ارائه شده در آن ياد خواهيد گرفت كه مشخصات كمپوننتها را در يك فايل XML بنويسيد
Delphi ,محمد باقر معموری,۱۷۶۱ بار خوانده شده,۴ رای دارد,۱۲/۱/۱۳۸۲
چرخش Bitmap
يك تصوير Bitmap را 90 درجه بچرخانيد
Delphi ,محمد باقر معموری,۲۲۸۳ بار خوانده شده,۸ رای دارد,۱۲/۱/۱۳۸۲
چگونه يك HotKey يا ميان بر سيستم درست كنيم؟
ساخت کليد مينابر در ويندوز
Delphi ,محمد باقر معموری,۲۲۴۸ بار خوانده شده,۱۳ رای دارد,۱۲/۱/۱۳۸۲
چگونه يك TRichEdit با پس زمينه Tile بسازيم؟
به نظر مي آيد راهي براي Transparent كردن يك RichEdit عادي ....
Delphi ,محمد باقر معموری,۱۹۵۰ بار خوانده شده,۶ رای دارد,۱۴/۱/۱۳۸۲
استفاده از اشاره گرها در Object Pascal (دلفي)
در اين نوشته دليل و نحوه استفاده از اشاره گرها در دلفي (Object Pascal) به اختصار بررسي ميشود.
Delphi ,رضا براري سوادکوهي,۱۹۹۰ بار خوانده شده,۱۰ رای دارد,۱۵/۱/۱۳۸۲
نحوه برقراری ارتباط با پروتکل Yahoo Messenger
در اين مقاله خواهيد آموخت که چگونه يک برنامه برای برقراری ارتباط با ياهو مسنجر بنويسيد
Delphi ,مديريت سايت,۲۹۱۵ بار خوانده شده,۲۵ رای دارد,۲۹/۱/۱۳۸۲
اجراي برنامه ها از دلفي ( دستور ShellExecute)
در اين مقاله طريقه اجرا يا باز کردن نرم افزار هاي خارج از محيط دلفي را با استفاده از تابع API ويندوز ShellExecute را ياد خواهيد گرفت
Delphi ,مديريت سايت,۲۷۴۳ بار خوانده شده,۲۱ رای دارد,۲/۲/۱۳۸۲
رجيستر کردن Activex يا Dll در دلفي
در اين مقاله ياد خواهيد گرفت که چگونه با استفاده از کد نويسي در دلفي Activex يا dll مورد نياز برنامه خود را در دستگاه کاربرانتان نصب کنيد.
Delphi ,مديريت سايت,۲۳۸۵ بار خوانده شده,۸ رای دارد,۳/۲/۱۳۸۲
اجراي فايل exe از درون دلفي
يكي از مشكلاتي كه بسياري از تازه كاران در دلفي با آن مواجه مي شوند اجراي فايلهاي ديگر يا اجراي دستورات shell است
Delphi ,محمد باقر معموری,۳۸۳۳ بار خوانده شده,۴۷ رای دارد,۵/۲/۱۳۸۲
نصب كنترلهاي DLL و ActiveX از درون كد
چگونه كنترلهاي OLE مثل (dynamic-link library (DLL يا كنترلهاي (ActiveX (OCX را از درون دلفي Register يا UnRegister بكنيم؟
Delphi ,محمد باقر معموری,۲۳۴۳ بار خوانده شده,۱۵ رای دارد,۵/۲/۱۳۸۲
ترفندهاي دلفي شماره 001 (IDN Exclusive Collection 001)
مجموعه ترفندهاي دلفي شماره 001
Delphi ,رضا براري سوادکوهي,۳۴۷۵ بار خوانده شده,۲۱ رای دارد,۱۰/۲/۱۳۸۲
بكارگيري REAL AUDIO\VIDEO در دلفي
كنترل كامل REAL AUDIO\VIDEO د برنامه ها
Delphi ,غلامرضا(عليرضا) غفوري منش,۲۳۵۷ بار خوانده شده,۱۳ رای دارد,۱۴/۲/۱۳۸۲
بررسي فشردن كليد توسط كاربر در هنگام اجراي يك حلقه
چگونه كاربر مي تواند با فشار دادن يك كليد اجراي يك حلقه را متوقف سازد ؟
Delphi ,بابک ساطلي,۲۴۰۵ بار خوانده شده,۳۳ رای دارد,۲۷/۲/۱۳۸۲
كدگذاري اطلاعات متني به روش Encrypt در دلفي
چگونه مي توانيم اطلاعات متني خود را به صورت كدگذاري شده منتشر كنيم ؟
Delphi ,بابک ساطلي,۲۰۵۶ بار خوانده شده,۱۲ رای دارد,۳۰/۲/۱۳۸۲
تشخيص ورود و خروج CD از CD-Rom
چگونه مي توانيم از ورود و خروج CD مطلع شويم ؟
Delphi ,بابک ساطلي,۲۲۷۸ بار خوانده شده,۱۸ رای دارد,۳۰/۲/۱۳۸۲
نوشتن يك DLL در دلفي
در ادامه بحثي كه مدتي پيش داشتيم بنده تصميم گرفتم كه به ساخت يك DLL بپردازم ... براي آشنايي ديگر دوستان با نحوه نوشتن DLL و ...
Delphi ,بهرام وکيلي,۲۶۳۷ بار خوانده شده,۶ رای دارد,۱/۳/۱۳۸۲
چرخاندن يك تصوير با زواياي مختلف
اكنون مي توانيد تصوير خود را با هر زاويه اي بچرخانيد
Delphi ,بابک ساطلي,۲۰۷۲ بار خوانده شده,۷ رای دارد,۶/۳/۱۳۸۲
DLL ها در دلفي - بخش اول ( ساخت DLL )
چگونه مي توان در دلفي يك DLL ساخت ؟
Delphi ,بابک ساطلي,۲۴۳۸ بار خوانده شده,۱۹ رای دارد,۶/۳/۱۳۸۲
تغيير Alpha تصاوير در دلفی
در اين مقاله ياد خواهيد گرفت که چگونه مقدار آلفا تصاوير را تغيير دهيد
Delphi ,محمد باقر معموری,۲۰۹۹ بار خوانده شده,۱۱ رای دارد,۶/۳/۱۳۸۲
نكات مفيد براي كار در محيط دلفي
Delphi IDE Tips
Delphi ,صادق علوی زاده,۳۲۴۴ بار خوانده شده,۳۱ رای دارد,۱۳/۳/۱۳۸۲
دلفي و اسمبلي
برنامه نويسان دوران DOS با tasm.exe و tlink.exe آشنايي دارند.ايندو از ديرباز رقيبان masm.exe و link.exe بوده و...
Delphi ,رضا کريم پور,۲۶۱۲ بار خوانده شده,۲۶ رای دارد,۲۸/۴/۱۳۸۲
انواع داده های Windows و دلفی
در اين مقاله انواع داده های ويندوز و مشابه آن در دلفی را خواهيد آموخت
Delphi ,مديريت سايت,۲۶۸۸ بار خوانده شده,۳۴ رای دارد,۱۷/۵/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۲۹۳ مراجعه امروز
۳۸۸۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Pascal
تعداد مقالات : ۴

آموزش پاسکال قسمت اول
سری آموزش پاسکال
Pascal ,بهرام وکيلي,۱۰۳۱۶ بار خوانده شده,۳۹۵ رای دارد,۱۶/۱۱/۱۳۸۱
آموزش پاسکال قسمت دوم
سری آموزشی پاسکال
Pascal ,بهرام وکيلي,۵۲۱۵ بار خوانده شده,۹۶ رای دارد,۱۶/۱۱/۱۳۸۱
آموزش پاسکال قسمت سوم
سری آموزشی پاسکال
Pascal ,بهرام وکيلي,۴۰۰۲ بار خوانده شده,۵۱ رای دارد,۱۶/۱۱/۱۳۸۱
آموزش پاسکال قسمت چهارم
سری آموزش پاسکال
Pascal ,بهرام وکيلي,۵۳۶۲ بار خوانده شده,۱۴۱ رای دارد,۱۶/۱۱/۱۳۸۱


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۲۹۶ مراجعه امروز
۳۸۸۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Java
تعداد مقالات : ۹۵

زمينه هاي پيدايش جاوا
Java ,مديريت سايت,۲۴۶۷ بار خوانده شده,۴۳ رای دارد,۳/۹/۱۳۸۱
انواع ساده The simple Types
Java ,مديريت سايت,۱۸۴۵ بار خوانده شده,۲۲ رای دارد,۳/۹/۱۳۸۱
integers ( اعداد صحيح )
Java ,مديريت سايت,۱۴۷۸ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اصل و نسب جاوا
Java ,مديريت سايت,۱۸۸۹ بار خوانده شده,۱۵ رای دارد,۳/۹/۱۳۸۱
انواع اعداد اعشاري
Java ,مديريت سايت,۱۴۳۷ بار خوانده شده,۷ رای دارد,۳/۹/۱۳۸۱
نگاهي دقيقتر به الفاظ
Java ,مديريت سايت,۱۳۲۳ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
متغيرها
Java ,مديريت سايت,۱۳۷۱ بار خوانده شده,۴ رای دارد,۳/۹/۱۳۸۱
ارتقائ خودكار انواع در عبارات
Java ,مديريت سايت,۱۲۳۶ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
آرايه ها
Java ,مديريت سايت,۱۲۹۱ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
چند كلمه اي درباره رشته ها (strings)
Java ,مديريت سايت,۱۲۰۴ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
يك نكته درباره اشاره گرها (pointers) به برنامه نويسان Cو C++و
Java ,مديريت سايت,۱۲۳۱ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اولين برنامه ساده
Java ,مديريت سايت,۱۵۹۲ بار خوانده شده,۱۲ رای دارد,۳/۹/۱۳۸۱
عملگرها
Java ,مديريت سايت,۱۱۷۰ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
عملگرهاي رابطه اي
Java ,مديريت سايت,۱۱۰۱ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
عملگرهاي منطقي بولي Boolean
Java ,مديريت سايت,۱۱۵۰ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
صحنه براي جاوا آماده شد
Java ,مديريت سايت,۱۳۱۵ بار خوانده شده,۷ رای دارد,۳/۹/۱۳۸۱
عملگر انتساب The Assignment Operator
Java ,مديريت سايت,۱۰۵۲ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
عملگر ?
Java ,مديريت سايت,۱۰۴۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از پرانتزها
Java ,مديريت سايت,۱۰۵۱ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
دستورات كنترلي
Java ,مديريت سايت,۱۰۸۸ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
دستورات انتخاب در جاوا
Java ,مديريت سايت,۱۱۳۹ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
دومين برنامه كوتاه
Java ,مديريت سايت,۱۰۹۰ بار خوانده شده,۴ رای دارد,۳/۹/۱۳۸۱
معرفي كلاسها
Java ,مديريت سايت,۱۲۳۶ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
بنيادهاي كلاس
Java ,مديريت سايت,۱۰۷۹ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
اعلان نمودن اشيائ
Java ,مديريت سايت,۱۰۶۹ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
انتساب متغيرهاي ارجاع شي ئ
Java ,مديريت سايت,۱۰۰۱ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
چرا جاوا براي اينترنت اهميت دارد
Java ,مديريت سايت,۱۴۸۳ بار خوانده شده,۷ رای دارد,۳/۹/۱۳۸۱
معرفي روشها
Java ,مديريت سايت,۹۷۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
سازندگان Constructors
Java ,مديريت سايت,۱۱۷۲ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
واژه كليدي This
Java ,مديريت سايت,۹۸۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
جمع آوري زباله Garbage collection
Java ,مديريت سايت,۱۰۵۳ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
روش ()finalize
Java ,مديريت سايت,۹۶۹ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
دو دستور كنترلي
Java ,مديريت سايت,۹۳۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
كلاس پشته A stack class
Java ,مديريت سايت,۹۷۸ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
نگاهي دقيق تر به روشها و كلاسها
Java ,مديريت سايت,۹۴۳ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
انباشتن روشها
Java ,مديريت سايت,۹۲۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از اشيائ بعنوان پارامترها
Java ,مديريت سايت,۹۲۲ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
نگاهي دقيق تر به گذر دادن آرگومانها
Java ,مديريت سايت,۹۱۹ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
جادوي جاوا كدهاي بايتي The Byte codes
Java ,مديريت سايت,۱۱۷۱ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
خود فراخواني يا برگشت پذيري Recursion
Java ,مديريت سايت,۹۴۰ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
تعريف كنترل دسترسي
Java ,مديريت سايت,۹۱۸ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
درك مفهوم static
Java ,مديريت سايت,۹۵۸ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
معرفي final
Java ,مديريت سايت,۸۹۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از بلوكهاي كد Blocks of code
Java ,مديريت سايت,۹۲۵ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
آرايه هاي دوباره ملاقات شده Arrays Revisited
Java ,مديريت سايت,۸۷۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
كشف كلاس رشته اي (string)
Java ,مديريت سايت,۸۸۴ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استفاده از آرگونهاي خط فرمان (Command-Line)
Java ,مديريت سايت,۸۶۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
وراثت inheritance
Java ,مديريت سايت,۹۶۶ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
مباني وراثت
Java ,مديريت سايت,۹۴۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از Super
Java ,مديريت سايت,۱۰۵۹ بار خوانده شده,۷ رای دارد,۳/۹/۱۳۸۱
خصلتهاي جاوا
Java ,مديريت سايت,۱۱۴۸ بار خوانده شده,۶ رای دارد,۳/۹/۱۳۸۱
ايجاد يك سلسله مراتب چند سطحي (Multilevel)
Java ,مديريت سايت,۸۷۹ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
وقتي كه سازندگان فراخواني مي شوند
Java ,مديريت سايت,۸۶۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
لغو ( يا جلوگيري از پيشروي ) روش
Java ,مديريت سايت,۸۵۲ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
فرهنگ لغات مطالب Lexical issues
Java ,مديريت سايت,۸۴۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
توزيع (dispatch) پوياي روش
Java ,مديريت سايت,۸۵۳ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از كلاسهاي مجرد (abstract)
Java ,مديريت سايت,۸۲۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از Final با وراثت
Java ,مديريت سايت,۸۱۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
بسته ها و رابطها
Java ,مديريت سايت,۸۳۸ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
بسته ها packages
Java ,مديريت سايت,۸۵۶ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
محافظت دسترسي Access protection
Java ,مديريت سايت,۸۳۰ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
وارد كردن بسته ها
Java ,مديريت سايت,۸۲۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
رابطها interfaces
Java ,مديريت سايت,۹۲۷ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اداره استثنائات
Java ,مديريت سايت,۷۶۷ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
كتابخانه هاي كلاس جاوا The Java class libraries
Java ,مديريت سايت,۹۰۸ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اصول اداره استثنائ
Java ,مديريت سايت,۷۹۳ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
انواع استثنائ
Java ,مديريت سايت,۸۶۵ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استثنائات گرفته نشده Uncaught Exceptions
Java ,مديريت سايت,۸۰۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از tryو catchو
Java ,مديريت سايت,۸۵۷ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
دستورات تودرتو شده try
Java ,مديريت سايت,۷۶۵ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
Throw
Java ,مديريت سايت,۸۲۱ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
finally
Java ,مديريت سايت,۸۲۴ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استثنائات توكار جاوا
Java ,مديريت سايت,۸۱۴ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
مروري بر جاوا
Java ,مديريت سايت,۸۹۵ بار خوانده شده,۴ رای دارد,۳/۹/۱۳۸۱
ايجاد نمودن زير كلاسهاي استثنائ مربوط به خودتان
Java ,مديريت سايت,۸۲۰ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
نواع داده ها ، متغيرها و آرايه ها
Java ,مديريت سايت,۸۱۵ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استفاده از استثنائات
Java ,مديريت سايت,۷۸۵ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
برنامه نويسي چند نخ كشي شده Multithreaded programming
Java ,مديريت سايت,۸۹۷ بار خوانده شده,۶ رای دارد,۳/۹/۱۳۸۱
مدل نخ در جاوا
Java ,مديريت سايت,۹۲۱ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
نخ اصلي The Main Thread
Java ,مديريت سايت,۸۳۲ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
ايجاد يك نخ
Java ,مديريت سايت,۸۶۶ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
ايجاد نخ هاي چندگانه
Java ,مديريت سايت,۸۶۵ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استفاده از ()isAlive و ()join
Java ,مديريت سايت,۷۸۶ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
استفاده از ()suspend و ()resume
Java ,مديريت سايت,۸۲۹ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
تقدمهاي نخ
Java ,مديريت سايت,۸۶۴ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
برنامه نويسي شي ئ گرا
Java ,مديريت سايت,۱۴۶۷ بار خوانده شده,۱۱ رای دارد,۳/۹/۱۳۸۱
جاوا يك زبان كاملا" نوع بندي شده است
Java ,مديريت سايت,۸۵۰ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
همزمان سازي Synchronization
Java ,مديريت سايت,۹۲۰ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
استفاده از چند نخ كشي كردن
Java ,مديريت سايت,۸۳۷ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
I/o، applets، و ساير عناوين
Java ,مديريت سايت,۸۴۶ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اصول I/o
Java ,مديريت سايت,۹۸۵ بار خوانده شده,۵ رای دارد,۳/۹/۱۳۸۱
اصول ريزبرنامه ها applets
Java ,مديريت سايت,۹۲۲ بار خوانده شده,۳ رای دارد,۳/۹/۱۳۸۱
اصلاحگرهاي ناپايدار و فرار The Transient and volatile Modifiers
Java ,مديريت سايت,۷۸۸ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
استفاده از instanceof
Java ,مديريت سايت,۸۳۱ بار خوانده شده,۱ رای دارد,۳/۹/۱۳۸۱
جاوا و UML
معرفي محيط OptimalJ
Java ,Inprise,۱۸۶۰ بار خوانده شده,۲۳ رای دارد,۱۴/۱/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۰۲ مراجعه امروز
۳۸۹۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Foxpro
تعداد مقالات : ۰


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۰۵ مراجعه امروز
۳۸۹۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Visual Basic
تعداد مقالات : ۷

آشنايي با محيط ويژوال بيسيك
آموزش ويژوال بيسيک قسمت اول
Visual Basic ,محمد امدادی,۱۶۰۵ بار خوانده شده,۲۸ رای دارد,۲۴/۸/۱۳۸۱
معرفي چند كنترل مهم
آموزش ويژوال بيسيک قسمت دوم
Visual Basic ,محمد امدادی,۱۱۵۷ بار خوانده شده,۱۴ رای دارد,۲۴/۸/۱۳۸۱
رويدادهاي مهم
آموزش ويژوال بيسيک قسمت سوم
Visual Basic ,محمد امدادی,۱۰۷۷ بار خوانده شده,۸ رای دارد,۲۴/۸/۱۳۸۱
ايجاد منوها
آموزش ويژوال بيسيک قسمت چهارم
Visual Basic ,محمد امدادی,۱۰۰۰ بار خوانده شده,۹ رای دارد,۲۴/۸/۱۳۸۱
Datatype در VB (نوع داده )
آموزش ويژوال بيسيک قسمت پنجم
Visual Basic ,مديريت سايت,۱۰۷۶ بار خوانده شده,۶ رای دارد,۲۴/۸/۱۳۸۱
چگونه با استفاده از ويژوال بيسيک نمايه (Icon) فايلها را نمايش دهيم؟
بررسي روش پيدا کردن و نمايش نمايه (Icon) يک نوع فايل تعريف شده در ويندوز
Visual Basic ,رضا براري سوادکوهي,۹۹۸ بار خوانده شده,۱۱ رای دارد,۹/۱/۱۳۸۲
UML و برنامه نويسان ويژوال بيسيك
در اين نوشتار ضمن ارائه توضيحاتي مقدماتي در باب UML با ابزاري مناسب براي استفاده از اين تكنولوژي در محيط ويژوال بيسيك آشنا ميشويد
Visual Basic ,Inprise,۱۶۸۳ بار خوانده شده,۳۳ رای دارد,۱۴/۱/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۰۸ مراجعه امروز
۳۹۰۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Visual C++
تعداد مقالات : ۱

حذف email در Server با C++
با استفاده از Indy يك برنامه براي email مي‌خواهيم بسازيم.
Visual C++ ,نازيلا دنيائي,۷۸۲ بار خوانده شده,۷ رای دارد,۸/۱۱/۱۳۸۱


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۱۱ مراجعه امروز
۳۹۰۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Assembley
تعداد مقالات : ۳۱

اسمبلي ياد بگيريم - 1
Assembley ,مديريت سايت,۱۵۷۱ بار خوانده شده,۱۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 10
Assembley ,مديريت سايت,۱۱۱۸ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 11
Assembley ,مديريت سايت,۱۰۲۰ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 12
Assembley ,مديريت سايت,۹۰۴ بار خوانده شده,۴ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي يلد بگيريم - 13
Assembley ,مديريت سايت,۸۷۴ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 14
Assembley ,مديريت سايت,۸۳۴ بار خوانده شده,۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 15
Assembley ,مديريت سايت,۸۵۴ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 16
Assembley ,مديريت سايت,۹۰۲ بار خوانده شده,۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 17
Assembley ,مديريت سايت,۸۳۸ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 18
Assembley ,مديريت سايت,۸۵۷ بار خوانده شده,۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 19
Assembley ,مديريت سايت,۷۸۷ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 2
Assembley ,مديريت سايت,۹۷۰ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 20
Assembley ,مديريت سايت,۷۸۶ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 21
Assembley ,مديريت سايت,۸۲۰ بار خوانده شده,۵ رای دارد,۳۰/۸/۱۳۸۱
برنامه نويسي در مد گرافيك
Assembley ,مديريت سايت,۸۳۰ بار خوانده شده,۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 23
Assembley ,مديريت سايت,۸۲۷ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 24
Assembley ,مديريت سايت,۸۱۲ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 25
Assembley ,مديريت سايت,۷۶۲ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 26
Assembley ,مديريت سايت,۷۸۱ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 27
Assembley ,مديريت سايت,۷۵۸ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 28
Assembley ,مديريت سايت,۸۰۱ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي
Assembley ,مديريت سايت,۹۴۴ بار خوانده شده,۸ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 3
Assembley ,مديريت سايت,۸۴۲ بار خوانده شده,۱ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 30
Assembley ,مديريت سايت,۸۳۵ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 4
Assembley ,مديريت سايت,۸۱۵ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 5
Assembley ,مديريت سايت,۱۰۴۹ بار خوانده شده,۱۲ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 6
Assembley ,مديريت سايت,۹۸۲ بار خوانده شده,۳ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 7
Assembley ,مديريت سايت,۸۷۰ بار خوانده شده,۶ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 8
Assembley ,مديريت سايت,۸۱۷ بار خوانده شده,۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلي ياد بگيريم - 9
Assembley ,مديريت سايت,۴۴۱۱ بار خوانده شده,۶۰ رای دارد,۳۰/۸/۱۳۸۱
اسمبلی تحت ويندوز
حتماٌ زماني كه درس زبان ماشين را پاس ميكرديد ،در مقايسه با زبانهايي چون C++ , Object Pascal(Delphi) آنرا فوسيل ? ميناميديد ...
Assembley ,رضا کريم پور,۱۲۰۲ بار خوانده شده,۱۶ رای دارد,۲۸/۴/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۱۴ مراجعه امروز
۳۹۰۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : FORTRAN
تعداد مقالات : ۵۰

كامپيوترهاي الكترونيكي
FORTRAN ,مديريت سايت,۵۹۱ بار خوانده شده,۸ رای دارد,۳/۹/۱۳۸۱
تاريخچه كامپيوتر
FORTRAN ,مديريت سايت,۱۱۴۴ بار خوانده شده,۳۱ رای دارد,۳/۹/۱۳۸۱
انواع كامپيوتر
FORTRAN ,مديريت سايت,۴۷۴ بار خوانده شده,۰ رای دارد,۳/۹/۱۳۸۱
قسمتهاي اصلي كامپيوتر رقمي
FORTRAN ,مديريت سايت,۴۷۲ بار خوانده شده,۲ رای دارد,۳/۹/۱۳۸۱
مراحل حل يك مسئله بكمك كامپيوتر
FORTRAN ,مديريت سايت,۴۵۵ بار خوانده شده,۰ رای دارد,۳/۹/۱۳۸۱
مراحل حل يك مسئله بكمك كامپيوتر
FORTRAN ,مديريت سايت,۴۳۳ بار خوانده شده,۰ رای دارد,۳/۹/۱۳۸۱
انتقال و تبديل اطلاعات
FORTRAN ,مديريت سايت,۵۷۷ بار خوانده شده,۵ رای دارد,۴/۹/۱۳۸۱
دستور محاسباتي
FORTRAN ,مديريت سايت,۴۸۸ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
علامتهاي زبان فرترن
FORTRAN ,مديريت سايت,۵۲۸ بار خوانده شده,۳ رای دارد,۴/۹/۱۳۸۱
دستورهاي محاسباتي
FORTRAN ,مديريت سايت,۴۸۲ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
متغيرها و ثابت ها
FORTRAN ,مديريت سايت,۴۸۶ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ترتيب انجام عملهاي اصلي
FORTRAN ,مديريت سايت,۴۶۳ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
مود
FORTRAN ,مديريت سايت,۴۳۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
تابع هاي رياضي
FORTRAN ,مديريت سايت,۶۴۵ بار خوانده شده,۱۱ رای دارد,۴/۹/۱۳۸۱
ترتيب نوشتن دستورهاي رياضي
FORTRAN ,مديريت سايت,۵۱۰ بار خوانده شده,۲ رای دارد,۴/۹/۱۳۸۱
دستورهاي ورودي و خروجي
FORTRAN ,مديريت سايت,۴۵۱ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
دستور فرمت
FORTRAN ,مديريت سايت,۴۵۲ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
طرز تنظيم برنامه
FORTRAN ,مديريت سايت,۴۳۷ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
فرم كد گذاري
FORTRAN ,مديريت سايت,۴۴۹ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
آماده ساختن برنامه براي اجرا
FORTRAN ,مديريت سايت,۴۳۵ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
انتقال كنترل
FORTRAN ,مديريت سايت,۴۴۳ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور GO TO
FORTRAN ,مديريت سايت,۴۳۹ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور IF محاسباتي
FORTRAN ,مديريت سايت,۴۰۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ميدان E
FORTRAN ,مديريت سايت,۴۵۸ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ميدان X
FORTRAN ,مديريت سايت,۴۷۰ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
جدا كردن ميدانها
FORTRAN ,مديريت سايت,۴۴۳ بار خوانده شده,۲ رای دارد,۴/۹/۱۳۸۱
دستور DO
FORTRAN ,مديريت سايت,۴۱۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
حلقه هاي DO متداخل
FORTRAN ,مديريت سايت,۳۸۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
متغيرهاي زير نويس دار
FORTRAN ,مديريت سايت,۴۳۷ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
رشته ها
FORTRAN ,مديريت سايت,۴۰۶ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
نمايش رشته ها در فرترن
FORTRAN ,مديريت سايت,۴۵۷ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
دستور DIMENSION
FORTRAN ,مديريت سايت,۴۱۶ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
حلقه DO ضمني
FORTRAN ,مديريت سايت,۴۳۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ورود و خروج رشته هاي دو بعدي
FORTRAN ,مديريت سايت,۴۳۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
صورتهاي مجاز زيرنويسها
FORTRAN ,مديريت سايت,۴۱۸ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ورود و خروج رشته ها بدون استفاده از زيرنويس
FORTRAN ,مديريت سايت,۴۱۶ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
نكات ديگر درباره انتقال رشته ها
FORTRAN ,مديريت سايت,۴۲۳ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
برنامه هاي فرعي
FORTRAN ,مديريت سايت,۴۱۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
توابع آماده شده
FORTRAN ,مديريت سايت,۴۳۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
تابع يك جمله اي
FORTRAN ,مديريت سايت,۴۳۵ بار خوانده شده,۲ رای دارد,۴/۹/۱۳۸۱
برنامه فرعي FUNCTION
FORTRAN ,مديريت سايت,۴۵۸ بار خوانده شده,۲ رای دارد,۴/۹/۱۳۸۱
برنامه فرعي SUBROUTINE
FORTRAN ,مديريت سايت,۴۴۰ بار خوانده شده,۱ رای دارد,۴/۹/۱۳۸۱
دستورهاي تعيين نوع
FORTRAN ,مديريت سايت,۴۲۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ميدان A
FORTRAN ,مديريت سايت,۴۱۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور GO TO محاسبه شده
FORTRAN ,مديريت سايت,۴۳۴ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور IF منطقي
FORTRAN ,مديريت سايت,۳۹۲ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور EQUIVALENCE
FORTRAN ,مديريت سايت,۳۸۷ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور COMMON
FORTRAN ,مديريت سايت,۴۲۵ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
دستور DATA
FORTRAN ,مديريت سايت,۴۱۶ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱
ترتيب قرار دادن دستورهاي غير قابل اجرا
FORTRAN ,مديريت سايت,۴۳۱ بار خوانده شده,۰ رای دارد,۴/۹/۱۳۸۱


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۱۷ مراجعه امروز
۳۹۰۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Internet & Network
تعداد مقالات : ۲۸

چگونگي فعاليت ديوارهاي آتش در لايه هاي مختلف و انواع آنها
Internet & Network ,کاظم آقاسی,۱۱۲۵ بار خوانده شده,۱۹ رای دارد,۱۱/۱۱/۱۳۸۱
MSN مسنجر چگونه کار می کند؟
روش کار MSN مسنجر - دستورات و روش برنامه نويسی
Internet & Network ,مديريت سايت,۳۶۱۹ بار خوانده شده,۸۰ رای دارد,۲۲/۱۱/۱۳۸۱
MSN مسنجر چگونه کار می کند؟
قسمت دوم ... ( روشهای برقراری ارتباط با سرور)
Internet & Network ,مديريت سايت,۶۴۸ بار خوانده شده,۵ رای دارد,۲۹/۱/۱۳۸۲
اتصال شبکه شما به اينترنت
در اين مقاله ياد خواهيد گرفت که چگونه کامپيوترهای شبکه خود را با استفاده از dialup به اينترنت متصل کنيد
Internet & Network ,مديريت سايت,۴۸۰۸ بار خوانده شده,۱۲۳ رای دارد,۱۶/۲/۱۳۸۲
استراتژي حفاظت از اطلاعات در شبکه هاي کامپيوتري ( بخش اول )
Internet & Network ,شرکت سخا روش,۷۷۰ بار خوانده شده,۵ رای دارد,۲۳/۲/۱۳۸۲
نمونه هائي از حملات اينترنتي توسط نامه هاي الکترونيکي
بررسی روش عملکرد چندين ويروس که از طريق نامه الکترونيکی منتقل می شوند
Internet & Network ,شرکت سخا روش,۷۴۵ بار خوانده شده,۱۵ رای دارد,۲۳/۲/۱۳۸۲
مباني زيرساخت شبکه هاي مبتني بر ويندوز
سازمان ها و موسسات بمنظور برپاسازي شبکه و اتصال هر يک از مراکز به دفاتر ....
Internet & Network ,شرکت سخا روش,۹۰۲ بار خوانده شده,۱۰ رای دارد,۲۷/۳/۱۳۸۲
مباني ويندوز و شبکه ( بخش اول )
سيستم عامل ويندوز يکي از متداولترين سيستم هاي عامل شبکه اي است که.......
Internet & Network ,شرکت سخا روش,۱۰۰۰ بار خوانده شده,۸ رای دارد,۲۷/۳/۱۳۸۲
مباني ويندوز و شبکه ( بخش دوم )
در بخش اول اين مقاله به مفاهيم اوليه ويندوز و شبکه اشاره گرديد . در اين....
Internet & Network ,شرکت سخا روش,۸۹۵ بار خوانده شده,۸ رای دارد,۲۷/۳/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش اول )
TCP/IP ، يکي از مهمترين پروتکل هاي استفاده شده....
Internet & Network ,شرکت سخا روش,۱۱۱۱ بار خوانده شده,۱۵ رای دارد,۳/۴/۱۳۸۲
استراتژي حفاظت از اطلاعات در شبکه هاي کامپيوتري ( بخش دوم )
در بخش اول اين مقاله به چالش هاي سازمانها و موسسات براي حرکت بسمت .......
Internet & Network ,شرکت سخا روش,۶۵۶ بار خوانده شده,۳ رای دارد,۳/۴/۱۳۸۲
مفاهيم اوليه سرويس هاي وب - بخش اول
سرويس هاي وب ، نقطه عطفي در معماري برنامه هاي توزيع شده بر روي اينترنت ....
Internet & Network ,شرکت سخا روش,۶۴۴ بار خوانده شده,۰ رای دارد,۳/۴/۱۳۸۲
مفاهيم اوليه سرويس هاي وب - بخش دوم
Internet & Network ,شرکت سخا روش,۶۵۰ بار خوانده شده,۲ رای دارد,۱۰/۴/۱۳۸۲
مفاهيم اوليه سرويس هاي وب - بخش سوم
Internet & Network ,شرکت سخا روش,۵۸۳ بار خوانده شده,۰ رای دارد,۱۰/۴/۱۳۸۲
مفاهيم اوليه سرويس هاي وب - بخش چهارم
Internet & Network ,شرکت سخا روش,۶۲۲ بار خوانده شده,۳ رای دارد,۱۰/۴/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش دوم )
در بخش اول اين مقاله ،پروتکل TCP/IP بهمراه لايه هاي آن معرفي گردييد . در اين .....
Internet & Network ,شرکت سخا روش,۹۰۲ بار خوانده شده,۱۰ رای دارد,۱۷/۴/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش سوم )
در بخش اول اين مقاله، پروتکل TCP/IP بهمراه لايه هاي آن معرفي گرديد . در بخش دوم ، به ...
Internet & Network ,شرکت سخا روش,۸۴۲ بار خوانده شده,۵ رای دارد,۱۷/۴/۱۳۸۲
مفاهيم اوليه سرويس های وب - بخش پنجم
آنچه تاکنون گفته شده است ....
Internet & Network ,شرکت سخا روش,۵۱۲ بار خوانده شده,۰ رای دارد,۲۵/۵/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش چهارم )
Internet & Network ,شرکت سخا روش,۶۳۲ بار خوانده شده,۷ رای دارد,۲۵/۵/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش پنجم )
Internet & Network ,شرکت سخا روش,۶۸۶ بار خوانده شده,۵ رای دارد,۲۵/۵/۱۳۸۲
نقش عوامل انساني در امنيت شبکه هاي کامپيوتري
يک سيستم کامپيوتري از چهار عنصر : سخت افزار ، سيستم عامل ، برنامه هاي.......
Internet & Network ,شرکت سخا روش,۶۴۲ بار خوانده شده,۶ رای دارد,۱۰/۶/۱۳۸۲
مفاهيم اوليه پروتکل TCP/IP ( بخش ششم )
جريان داده در شبکه اي که صرفا" شامل يک سگمنت است...
Internet & Network ,شرکت سخا روش,۶۵۴ بار خوانده شده,۶ رای دارد,۲۷/۶/۱۳۸۲
ايمن سازي سرويس دهنده FTP
سرويس FTP)File Transfer Protocol) يکي از قديمي ترين و متداولترين...
Internet & Network ,شرکت سخا روش,۶۲۳ بار خوانده شده,۵ رای دارد,۲۷/۶/۱۳۸۲
امکانات شبکه اي ويندوز
سيستم عامل ويندوز، نظير ساير سيستم هاي عامل شبکه اي امکانات ...
Internet & Network ,شرکت سخا روش,۷۰۴ بار خوانده شده,۱۵ رای دارد,۱۰/۱۰/۱۳۸۲
امنيت برنامه هاي وب ( بخش اول )
هر برنامه کامپيوتري که براي اجراء در محيط شبکه، طراحي و پياده سازي مي گردد ، مي بايست توجه...
Internet & Network ,شرکت سخا روش,۶۰۰ بار خوانده شده,۵ رای دارد,۲۹/۱۰/۱۳۸۲
امنيت برنامه هاي وب ( بخش دوم )
در بخش اول اين مقاله ، به نحوه برخورد ASP.NET با کاربران ناشناس ( Anonymous ) ...
Internet & Network ,شرکت سخا روش,۴۷۴ بار خوانده شده,۱ رای دارد,۲۹/۱۰/۱۳۸۲
امنيت برنامه های وب ( بخش سوم )
در بخش سوم اين مقاله به بررسي Forms Authentication خواهيم پرداخت ...
Internet & Network ,شرکت سخا روش,۴۶۶ بار خوانده شده,۳ رای دارد,۲۹/۱۰/۱۳۸۲
﻿بحث ip
در بسياري از درس‌هاي آينده از Command Prompt ...
Internet & Network ,آراز صمدی ,۷۲۸ بار خوانده شده,۱۰ رای دارد,۱۲/۲/۱۳۸۳


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۳ بيننده در حال حاضر
۱۳۲۰ مراجعه امروز
۳۹۱۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Misc
تعداد مقالات : ۵۰

رموز Windows
Misc ,مجله رايانه,۳۰۶۶ بار خوانده شده,۴۹ رای دارد,۸/۱۱/۱۳۸۱
Interface ويندوز را به دلخواه تغيير دهيد
Misc ,مجله رايانه,۵۶۷ بار خوانده شده,۳ رای دارد,۸/۱۱/۱۳۸۱
چگونه بينندگان Web Site خود را افزايش دهيد؟
Misc ,نازيلا دنيائي,۴۹۰ بار خوانده شده,۵ رای دارد,۸/۱۱/۱۳۸۱
مالتي بوت كردن PC
Misc ,مجله رايانه,۴۰۴۶ بار خوانده شده,۶۳ رای دارد,۸/۱۱/۱۳۸۱
RAID چيست؟
Misc ,مديريت سايت,۶۰۳ بار خوانده شده,۴ رای دارد,۸/۱۱/۱۳۸۱
ارزيابي سريع يك تيم نرم افزاري با استفاده از تست يوئل
Misc ,کاظم آقاسی,۵۵۷ بار خوانده شده,۳ رای دارد,۱۱/۱۱/۱۳۸۱
يونی کد چيست؟
Misc ,امير رضا قويدل,۴۲۷۸ بار خوانده شده,۴۷ رای دارد,۱۳/۱۱/۱۳۸۱
افزايش سرعت جستجو در مقادير هنگفتى از اطلاعات متنى
قسمت اول
Misc ,محمد باقر معموری,۵۶۸ بار خوانده شده,۵ رای دارد,۱۷/۱۱/۱۳۸۱
لينوکس و ويندوز , در کنار هم
Misc ,مديريت سايت,۷۰۶ بار خوانده شده,۹ رای دارد,۱۹/۱۲/۱۳۸۱
UDDI چيست ؟
در اين نوشتار با UDDI آشنا خواهيد شد و اندكي در مورد مفاهيم تكنيكي و فوائد آن خواهيد آموخت .
Misc ,Inprise,۶۵۰ بار خوانده شده,۱ رای دارد,۳/۱/۱۳۸۲
Web Cache
Misc ,مديريت سايت,۵۹۵ بار خوانده شده,۳ رای دارد,۴/۱/۱۳۸۲
آنچه سي بيلدر به شما ميدهد
در اين نوشتار با بخشي از امكانات و قابليتهاي اين محيط توسعه نرم افزار آشنا خواهيد شد
Misc ,Inprise,۷۱۵ بار خوانده شده,۱ رای دارد,۷/۱/۱۳۸۲
سوالات و پاسخ هاي راجع به XML
سوالات رايج راجع به XML و پاسخ آنها را در اين مقاله مختر ولي مفيد بيابيد
Misc ,محمد باقر معموری,۸۴۳ بار خوانده شده,۱۶ رای دارد,۹/۱/۱۳۸۲
ده نکته در رابطه با XSL
نکاتی در مورد xls و قابليتهای آن
Misc ,مديريت سايت,۵۳۷ بار خوانده شده,۲ رای دارد,۱۹/۱/۱۳۸۲
149 راز در Internet Explorer
قسمت اول...
Misc ,مديريت سايت,۹۹۵ بار خوانده شده,۵ رای دارد,۲۱/۱/۱۳۸۲
149 راز در Internet Explorer
قسمت دوم ...
Misc ,مديريت سايت,۹۲۷ بار خوانده شده,۱ رای دارد,۲۱/۱/۱۳۸۲
149 راز در Internet Explorer
قسمت سوم...
Misc ,مديريت سايت,۸۳۷ بار خوانده شده,۴ رای دارد,۲۱/۱/۱۳۸۲
XML چيست و چرا داراي اهميت فراوان است ؟
( بخش سوم)
Misc ,مديريت سايت,۷۵۲ بار خوانده شده,۴ رای دارد,۲۲/۱/۱۳۸۲
XML چيست و چرا داراي اهميت فراوان است ؟
بخش دوم
Misc ,مديريت سايت,۵۵۹ بار خوانده شده,۳ رای دارد,۲۷/۱/۱۳۸۲
XML چيست و چرا داراي اهميت فراوان است ؟
بخش اول
Misc ,مديريت سايت,۵۴۵ بار خوانده شده,۱ رای دارد,۲۷/۱/۱۳۸۲
برنامه نويسي روالهاي غير همزمان (Asynchronous Programming) (قسمت اول) مفــــاهيم
اين نوشته مقدمه اي است جهت شرح مفاهيم برنامه نويسي آسنکرون
Misc ,رضا براري سوادکوهي,۶۶۴ بار خوانده شده,۹ رای دارد,۷/۲/۱۳۸۲
توليد اتوماتيك فرمهاي هوشمند ورود اطلاعات در محيط VB6/ SQLServer
ابزار توليد
Misc ,مهرداد تاجيک,۶۹۷ بار خوانده شده,۷ رای دارد,۱۰/۲/۱۳۸۲
برنامه نويسي روالهاي غير همزمان (Asynchronous Programming)
در این نوشته موضوع Threadها بررسی میشود و چگونگی پیدایش آنها بیان میگردد... (قسمت دوم) |Threadها-تعريف و تاريخچه آنها|
Misc ,رضا براري سوادکوهي,۶۰۸ بار خوانده شده,۳ رای دارد,۱۴/۲/۱۳۸۲
برنامه نويسي روالهاي غير همزمان (Asynchronous Programming) (قسمت سوم) |مفاهيم جديد SMP و SMT|
در اين قسمت مفاهيم چند Threadي بررسي ميشوند...
Misc ,رضا براري سوادکوهي,۵۶۳ بار خوانده شده,۱ رای دارد,۲۰/۲/۱۳۸۲
تجربه های آقای وکيلی
قسمت اول ... تجربه های برنامه نويسی
Misc ,بهرام وکيلي,۱۱۴۶ بار خوانده شده,۱۸ رای دارد,۱۳/۳/۱۳۸۲
تجربه های آقای وکيلی ( قسمت سوم)
چگونه تحليل اطلاعات و طراحي كنيم
Misc ,بهرام وکيلي,۱۲۶۶ بار خوانده شده,۱۶ رای دارد,۳/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت چهارم)
چگونه تحليل اطلاعات و طراحي كنيم 2
Misc ,بهرام وکيلي,۶۴۱ بار خوانده شده,۷ رای دارد,۱۱/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت پنجم)
چگونه تحليل اطلاعات و طراحي كنيم 3
Misc ,بهرام وکيلي,۵۴۲ بار خوانده شده,۳ رای دارد,۱۷/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت ششم)
چگونه تحليل اطلاعات و طراحي كنيم 4
Misc ,بهرام وکيلي,۴۹۶ بار خوانده شده,۴ رای دارد,۲۱/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت هفتم)
محيط پياده سازي
Misc ,بهرام وکيلي,۶۰۰ بار خوانده شده,۳ رای دارد,۲۵/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت هشتم)
شروع پياده سازي 1
Misc ,بهرام وکيلي,۵۳۸ بار خوانده شده,۱ رای دارد,۲۵/۴/۱۳۸۲
تجربه های آقای وکيلی ( قسمت نهم)
پياده سازی - ابزارهای ما چيست؟
Misc ,بهرام وکيلي,۵۷۸ بار خوانده شده,۶ رای دارد,۷/۵/۱۳۸۲
تجربه های آقای وکيلی ( قسمت دهم)
عمليات پياده سازی
Misc ,بهرام وکيلي,۵۸۹ بار خوانده شده,۴ رای دارد,۷/۵/۱۳۸۲
تجربه های آقای وکيلی ( قسمت يازدهم)
ساخت پايگاه در Data Provider مورد نظر 2
Misc ,بهرام وکيلي,۵۲۲ بار خوانده شده,۷ رای دارد,۷/۵/۱۳۸۲
طراحی برنامه ( بخش اول )
در ساليان اخير ، متدولوژی های متفاوتی بمنظور طراحی برنامه ، پياده سازی و در اختيار ....
Misc ,شرکت سخا روش,۶۸۲ بار خوانده شده,۷ رای دارد,۱۳/۵/۱۳۸۲
با کرم بلستر بيشتر آشنا شويم
کرم جديدي که W32.Blaster نا ميده مي شود طي....
Misc ,شرکت سخا روش,۵۳۳ بار خوانده شده,۳ رای دارد,۲۵/۵/۱۳۸۲
طراحی برنامه ( بخش دوم )
در بخش اول اين مقاله به مسائل مرتبط با برنامه نويسي اشاره و در ادامه با مراحل متفاوت برنامه نويسي...
Misc ,شرکت سخا روش,۵۶۴ بار خوانده شده,۴ رای دارد,۱۲/۷/۱۳۸۲
چگونه از theme جديد WinXP در برنامه هاي خود استفاده كنيم
به همراه آخرين نسخه از سيستم عامل Microsoft تكنولوژي جديدي بنــــــــام Theme Engine
Misc ,رضا کريم پور,۶۴۳ بار خوانده شده,۳ رای دارد,۲۷/۷/۱۳۸۲
معماري برنامه هاي مبتني بر داده
داده ها در برنامه هاي کامپيوتري داراي نقشي بسيار مهم بوده و همواره نحوه ذخيره ...
Misc ,شرکت سخا روش,۴۳۱ بار خوانده شده,۴ رای دارد,۱۰/۱۰/۱۳۸۲
فن آوري اطلاعات و ارتباطات چيست ؟ ( بخش اول )
در پنجاه سال گذشته بروز تحولات گسترده در زمينه کامپيوتر و ارتباطات ، تغييرات عمده اي را در عرصه هاي متفاوت...
Misc ,شرکت سخا روش,۳۷۷ بار خوانده شده,۵ رای دارد,۲۲/۱/۱۳۸۳
کارت شناسائي بيومتريک
امروزه از کارت هاي شناسائي در ابعاد گسترده و به منظور اهداف مختلفي ...
Misc ,شرکت سخا روش,۳۱۶ بار خوانده شده,۰ رای دارد,۲۲/۱/۱۳۸۳
با کرم Mydoom بيشتر آشنا شويم !
در ساعت نه روز چهارشنبه 28 ژانويه 2004 مطابق با هشتم بهمن 1382 ...
Misc ,شرکت سخا روش,۲۹۹ بار خوانده شده,۳ رای دارد,۲۲/۱/۱۳۸۳
كامل ترين مرجع خطاهاي مودم(1)
600 . اگر سيستم در حال شماره گيري باشد ...
Misc ,مديريت سايت,۹۶۰ بار خوانده شده,۱۴ رای دارد,۱۲/۲/۱۳۸۳
كامل ترين مرجع خطاهاي مودم(2)
731 . پروتكل پيكر بندي نمي شود
Misc ,مديريت سايت,۷۳۵ بار خوانده شده,۵ رای دارد,۱۲/۲/۱۳۸۳
كامل ترين مرجع خطاهاي مودم(3)
خطاي DUNS 629
Misc ,مديريت سايت,۶۹۱ بار خوانده شده,۷ رای دارد,۱۲/۲/۱۳۸۳
كامل ترين مرجع خطاهاي مودم(4)
خطاي DUNS 678 و 679
Misc ,مديريت سايت,۳۷۶ بار خوانده شده,۱ رای دارد,۱۲/۲/۱۳۸۳
آموزش نصب لینوکس بخش 1
راهنماي پيشرفته نصب لينوكس ردهت نسخه 8
Misc ,مديريت سايت,۴۹۳ بار خوانده شده,۷ رای دارد,۱۲/۲/۱۳۸۳
آموزش نصب لینوکس بخش 2
نكته: اگر شما صفحه خوشامد گويي را...
Misc ,مديريت سايت,۳۴۴ بار خوانده شده,۱ رای دارد,۱۲/۲/۱۳۸۳
مقایسه نحوی ۴ زبان حاضر در ویژوال استودیو(قسمت اول)
در این مقاله به بررسی و مقایسه اجمالی ۴ زبان Visual Basic, C++, C# و Java پرداخته میشود که این مقایسات به کمک مثال بیان میشود. این مقاله برای افرادی که قصد آموختن یکی از این زبانها را دارند بسیار مفید و کارآمد میباشد
Misc ,حسين پناهی,۱۲۸۸ بار خوانده شده,۲۲ رای دارد,۲۹/۲/۱۳۸۳
مقایسه نحوی ۴ زبان حاضر در ویژوال استودیو(قسمت دوم)
در این مقاله به بررسی و مقایسه اجمالی ۴ زبان Visual Basic, C++, C# و Java پرداخته میشود که این مقایسات به کمک مثال بیان میشود. این مقاله برای افرادی که قصد آموختن یکی از این زبانها را دارند بسیار مفید و کارآمد میباشد
Misc ,حسين پناهی,۸۷۴ بار خوانده شده,۱۰ رای دارد,۲۹/۲/۱۳۸۳


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۲۹ مراجعه امروز
۳۹۲۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : Windows
تعداد مقالات : ۱۷

تغييرات در رجيستری ويندوز توسط فايلهای رجيستری
ساختار فايلهای رجيستری
Windows ,مديريت سايت,۸۴۶ بار خوانده شده,۷ رای دارد,۱۰/۱۱/۱۳۸۱
25 نكته امنيتی در شبكه هاي ويندوز2000
Windows ,مديريت سايت,۸۷۹ بار خوانده شده,۱۵ رای دارد,۱۳/۱۱/۱۳۸۱
نگرشی بر COM+
com+ چيست؟
Windows ,Inprise,۷۴۷ بار خوانده شده,۷ رای دارد,۸/۱۲/۱۳۸۱
لايه دوم ، كليد طلائي (2)
مباحثی در مورد COM+
Windows ,Inprise,۵۸۶ بار خوانده شده,۱ رای دارد,۱۰/۱۲/۱۳۸۱
معرفي #S
Windows ,Inprise,۵۸۷ بار خوانده شده,۳ رای دارد,۴/۱/۱۳۸۲
محيطهاي توسعه وب سرويس
در اين نوشته با مهمترين محيطهاي توسعه وب سرويس و محصولات آنها آشنا خواهيد شد
Windows ,Inprise,۵۳۹ بار خوانده شده,۱ رای دارد,۴/۱/۱۳۸۲
Windows API and API Wrappers
اين نوشته به اختصار توابع Windows API و مفاهيم مرتبط را از ديد برنامه نويسي بررسي ميکند
Windows ,رضا براري سوادکوهي,۱۱۸۶ بار خوانده شده,۲۵ رای دارد,۹/۱/۱۳۸۲
XML و ده نکته مهم
Windows ,مديريت سايت,۶۵۳ بار خوانده شده,۲ رای دارد,۱۵/۱/۱۳۸۲
ده نکته در رابطه با XML - DOM
Windows ,مديريت سايت,۴۸۲ بار خوانده شده,۰ رای دارد,۱۵/۱/۱۳۸۲
نصب Codec در ويندوز
در اين مقاله ياد خواهيد گرفت که چگونه Codec را برای کاربران نهايي خود نصب کنيد
Windows ,مديريت سايت,۸۵۱ بار خوانده شده,۵ رای دارد,۱/۲/۱۳۸۲
رجيستري چيست؟
مفاهيم اصلی رجيستری ويندوز
Windows ,مديريت سايت,۸۴۸ بار خوانده شده,۱۴ رای دارد,۱۰/۳/۱۳۸۲
تاريخچه مختصري در مورد فايلهاي پيکر بندي
فايلهای ثبت در ويندوز...
Windows ,مديريت سايت,۶۲۷ بار خوانده شده,۴ رای دارد,۱۰/۳/۱۳۸۲
Import و Export کردن تنظيمات رجيستري
طريقه کار با رجيستری ويندوز ...
Windows ,مديريت سايت,۶۰۹ بار خوانده شده,۰ رای دارد,۱۳/۳/۱۳۸۲
ساختار رجيستري
رجيستري داراي يک ساختار درختي است ...
Windows ,مديريت سايت,۶۴۱ بار خوانده شده,۲ رای دارد,۲۰/۳/۱۳۸۲
ويرايش رجيستری
ويرايش رجيستری در ويندوز ...
Windows ,مديريت سايت,۵۷۹ بار خوانده شده,۴ رای دارد,۲۰/۳/۱۳۸۲
نگهداري از رجيستري
چطور مي توان از رجيستري فايل پشتيبان تهيه کرد و در مواقع ضروري از اين فايل ها استفاده کرد؟
Windows ,مديريت سايت,۵۹۷ بار خوانده شده,۳ رای دارد,۲۰/۳/۱۳۸۲
امکان حذف اجزاء و ملحقات ويندوز ( در ويندوز XP)
در ويندوز اجزائي وجود دارد که بطور معمول در ليست Add/Remove....
Windows ,مديريت سايت,۷۹۹ بار خوانده شده,۴ رای دارد,۲۷/۳/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۳۲ مراجعه امروز
۳۹۲۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : PHP
تعداد مقالات : ۱۳

۷ دلیل برای اینكه استفاده از PHP بهتر از ASP می باشد
PHP ,سايت ايران PHP,۸۵۳ بار خوانده شده,۶ رای دارد,۱۷/۱۱/۱۳۸۱
مقدمه ای بر PHP
PHP ,php class,۷۱۴ بار خوانده شده,۵ رای دارد,۱۴/۱۲/۱۳۸۱
php چيست؟
PHP ,php class,۷۹۶ بار خوانده شده,۷ رای دارد,۱۴/۱۲/۱۳۸۱
PHP چگونه کار مي کند؟
PHP ,php class,۷۰۱ بار خوانده شده,۳ رای دارد,۱۴/۱۲/۱۳۸۱
چرا PHP
PHP ,php class,۶۸۵ بار خوانده شده,۱ رای دارد,۱۴/۱۲/۱۳۸۱
نصب و پيكر بندي PHP قسمت اول
PHP ,php class,۷۹۴ بار خوانده شده,۵ رای دارد,۱۴/۱۲/۱۳۸۱
نصب و پيكر بندي PHP (قسمت دوم)
PHP ,php class,۷۲۰ بار خوانده شده,۴ رای دارد,۱۵/۱۲/۱۳۸۱
نرم افزار Easy PHP
PHP ,php class,۷۸۹ بار خوانده شده,۶ رای دارد,۱۵/۱۲/۱۳۸۱
شروع كد نويسي
PHP ,php class,۷۰۲ بار خوانده شده,۵ رای دارد,۱۵/۱۲/۱۳۸۱
ارسال اطلاعات به مرروگر
PHP ,php class,۶۴۶ بار خوانده شده,۱ رای دارد,۱۵/۱۲/۱۳۸۱
فضاهاي خالي و قرار دادن توضيحات در متن برنامه
PHP ,php class,۵۹۰ بار خوانده شده,۰ رای دارد,۱۵/۱۲/۱۳۸۱
انواع متغييرها
PHP ,php class,۶۱۲ بار خوانده شده,۲ رای دارد,۱۵/۱۲/۱۳۸۱
سری آموزش PHP
فصل اول
PHP ,مديريت سايت,۱۱۲۸ بار خوانده شده,۸ رای دارد,۲۵/۴/۱۳۸۲


Article Catrgory, Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۲۳۶ مراجعه امروز
۳۸۲۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

موضوع : C
تعداد مقالات : ۷۶

موضوع : HTML
تعداد مقالات : ۲۲
موضوع : DHTML
تعداد مقالات : ۴
موضوع : JavaScript
تعداد مقالات : ۳
موضوع : VBscript
تعداد مقالات : ۰
موضوع : ASP
تعداد مقالات : ۱۱
موضوع : SQL
تعداد مقالات : ۳
موضوع : ADO
تعداد مقالات : ۲
موضوع : .NET
تعداد مقالات : ۳۲
موضوع : Delphi
تعداد مقالات : ۴۴
موضوع : Pascal
تعداد مقالات : ۴
موضوع : Java
تعداد مقالات : ۹۵
موضوع : Foxpro
تعداد مقالات : ۰
موضوع : Visual Basic
تعداد مقالات : ۷
موضوع : Visual C++
تعداد مقالات : ۱
موضوع : Assembley
تعداد مقالات : ۳۱
موضوع : FORTRAN
تعداد مقالات : ۵۰
موضوع : Internet & Network
تعداد مقالات : ۲۸
موضوع : Misc
تعداد مقالات : ۵۰
موضوع : Windows
تعداد مقالات : ۱۷
موضوع : PHP
تعداد مقالات : ۱۳


Calss ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۴ بيننده در حال حاضر
۱۳۵۹ مراجعه امروز
۳۹۵۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد


ContactUs ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۳۶۵ مراجعه امروز
۳۹۵۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

براي برقراري ارتباط با ما لطفا با آدرس زير مکاتبه فرمائيد
info@IranDevelopers.com


Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۲۶۹ مراجعه امروز
۳۸۶۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

IDN با هدف ايجاد بستري براي آموزش علوم تخصصي کامپيوتر افتخار دارد که با عنايت و همکاري اعضاي انجمن و پرسنل خود مجموعه اي ارزشمند از مقالات آموزشي تخصصي خود رابه شما مراجعه کننده گرامي عرضه کند اين مجموعه شامل مقالات مختلف آموزشي در زمينه هاي وب و برنامه نويسي مي باشد اميدواريم که توانسته باشيم در اين مهم قدمي مثبت برداشته باشيم.

اخبار

مقالات جديد

مقالات برگزيده

آخرين مطالب ارسال شده به محيط بحث و تبادل نظر


Download Center ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۳۶۸ مراجعه امروز
۳۹۶۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

شماره | 1
عنوان | طريقه استفاده از Microsoft Agent در دلفي
سايز فايل | 60KB
تعداد دريافت | 2190
آدرس دريافت | Download
توضيحات | no
شماره | 2
عنوان | IP Helper API, v. 1.2
سايز فايل | 62KB
تعداد دريافت | 2168
آدرس دريافت | Download
توضيحات |
شماره | 3
عنوان | Interface for the Microsoft Remote Access Service
سايز فايل | 119KB
تعداد دريافت | 1747
آدرس دريافت | Download
توضيحات |
شماره | 4
عنوان | نمايش و ساخت فايلهای avi فشرده
سايز فايل | 40KB
تعداد دريافت | 2035
آدرس دريافت | Download
توضيحات | توسط اين يونيت که نويسنده آنها هم يک ايرانی است شما می توانيد فايلهای ای وی آی فشرده شده را نمايش يا ايجاد کنيد آدرس ايميل سازنده اين يونيتهاalireza_tadayoni@iustmechanic.com هست
شماره | 5
عنوان | کامپوننت صوت برای مودم
سايز فايل | 119KB
تعداد دريافت | 3368
آدرس دريافت | Download
توضيحات | اين کامپوننت برای ساخت دستگاههای پاسخگويي خودکار تلفن و سيستمهای ارتباطی تلفنی بسيار مناسب می باشد. اين کامپوننت قادر به پخش و ذخيره فايل صوتی در خط تلفن می باشد. از ديگر قابليتها مِ توان به موارد ذيل اشاره کرد. تشخيص نوع تماس = صوتی - اطلاعات - فاکس تشخيص کليدهای زده شده بر روی تلفن پخش تونهای شماره انتظار شماره گيری و .... اين کامپوننت به طور مستقل با مودم ارتباط برقرار می کند و از tapi ويندوز استفاده نمی کند در حال حاضر اين کامپوننت مودمهای زير را پشتيبانی می کند. ZyXEL U1496 ZyXEL 2864/2864I USR Sportster series Motorola SM56 Cirrus Logic CL-MD1414XXX family Rockwell chipset based
شماره | 6
عنوان | نمايش مشخصات ويندوز
سايز فايل | 6KB
تعداد دريافت | 2666
آدرس دريافت | Download
توضيحات | اين کامپوننت مشخصات زير را در اختبار ما قرار می دهد تاريخ - نام کاربر - نام کامپيوتر نام سی پي يو و وضوح صفحه نمايش شماره نسخه ويندوز پورتهای سريال کد رجيستر ويندوز دايرکتوريهای سيستمی و....
شماره | 7
عنوان | ايجاد کليد ميانبر برای برنامه ها
سايز فايل | 3KB
تعداد دريافت | 1524
آدرس دريافت | Download
توضيحات | با استفاده از اين کامپوننت می توانيد برای نرم افزار خود در دلفی کليد ميانبر تعريف کنيد. در اين کامپوننت در صورتی که نرم افزار شما پنجره فعال هم نباشد باز هم کليدهای ميانبر به درستی عمل می کنند
شماره | 8
عنوان | ايجاد کليد ميانبر برای برنامه ها
سايز فايل | 3KB
تعداد دريافت | 1154
آدرس دريافت | Download
توضيحات | با استفاده از اين کامپوننت می توانيد برای نرم افزار خود در دلفی کليد ميانبر تعريف کنيد. در اين کامپوننت در صورتی که نرم افزار شما پنجره فعال هم نباشد باز هم کليدهای ميانبر به درستی عمل می کنند
شماره | 9
عنوان | Iranian Developers Network Chat
سايز فايل | 237KB
تعداد دريافت | 1416
آدرس دريافت | Download
توضيحات | سلام با استفاده از اين برنامه ميتوانيد به سرور اتاق گفتگو IranDevelopers متصل شويد و با دوستان خود صحبت کنيد.
شماره | 10
عنوان | نمايش مشخصات سيستم
سايز فايل | 12KB
تعداد دريافت | 1995
آدرس دريافت | Download
توضيحات | اين کامپوننت مشخصات سيستم را به نمايش می گذارد بعضی از اين مشخصات عبارتند از طول و عرض صفحه نمايش نام کامپيوتر نام کاربر فعلی دايرکتوريهای سيستم و ويندوز شماره ورژن ويندوز مقدار حافظه و ...


IranDevelopers Expert ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۳۷۴ مراجعه امروز
۳۹۶۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

1-Inprise
2-Mamouri
3-MasoodHeidarnia
4-Ramin


FAQ ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۶۳ مراجعه امروز
۵۳۷۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۰۹ مراجعه امروز
۵۳۲۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر :
تاريخ :۲۵/۷/۱۳۸۴
متن خبر:


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۳۰ مراجعه امروز
۵۳۴۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : حق انحصاري فرمت GiF منقضي شد
تاريخ :۵/۴/۱۳۸۲
متن خبر:
سرانجام روز 20 ژوئن حق انحصاري و حق امتياز فرمت تصويري GiF كه متعلق به يوني سيس بود منقضي شد. براين اساس الگوريتم متراكم سازي روي فرمت GiF يا Graphicinterchange format كه از آن LZW بود ، اسباب وجودش را از دست داد و يوني سيس هم گفت : هيچ طرحي براي بسط مجدد حق امتياز خود ندارد. اين بدان معني است كه فرمت پينگ يا Portable Network Grwphics كه رقيب عمده گيف محسوب شده و بسياري از كاربران اوپن سورس از آن استفاده مي كنند نيز ديگر ضرورتي براي دوام و بقايش ندارد و آن نيز به زودي محو خواهد شد. اما كنسرسيوم تارگستر جهاني (W3C) نيز بلافاصله گفت دومين نسخه از فرمت پينگ را در سطح اينترنت توزيع مي كند. كريس ليلاي از فعالان گرافيكي در W3C گفت : به عقيده من پينگ بسيار بهتر از گيف است و بنابراين دليلي براي نابودي آن وجود ندارد. فرمت پينگ هرچند براي مقابله با گيف آمد، اما دانستن چند نكته بد نيست. يكي اين كه كار اصلي گيف روي انيميشن سازي تصويري است و بيشتر كاربران و طراحان وب از فرمت PNG براي ذخيره تصاويرشان استفاده مي كنند و نه از Gif. از طرف ديگر پينگ يك خواهر دوقلو دارد به نام مينگ (Multiple-image Network graphic) دارد كه كاربران اوپن سورس وقتي مي خواهند روي انيميشن كار كنند از آن استفاده مي كنند. بنابراين فرمت پينگ هنوز هويت اصلي خود را سواي جوهره وجودي اش كه در رقابت با GiF آمده ، همچنان حفظ كرده است. منبع. :جام جم


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۳۳ مراجعه امروز
۵۳۴۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : بيل گيتس:Spam يک آفت است
تاريخ :۵/۴/۱۳۸۲
متن خبر:
بيل گيتس ضمن ارسال يک نامه الکترونيک براي 75 هزار نفر از کاربران خود در سراسر جهان ضمن برشمردن مضار نامه های الکترونيک ناخواسته (Spam) اعلام کرد که شرکت مايکروسافت تکنولوژي جديدي را ابداع کرده که در آن مجموعه اي از تکنولوژي هاي قديمي وجديد براي مبارزه با اين مشکل به کار رفته است. گيتس در اين نامه از همکاري مايکروسافت وديگر شرکتها براي شناسايي ومحدودکردن منبع اين نامه ها خبر داد. وي ضمن آنکه خواستار بررسي عملکرد mail server ها از سوي مديران domain ها شد تاکيد کرد که نبايد اين مساله مانعي براي تبليغات تجاري از طريق نامه هاي الکترونيک شود. وي در پايان نامه خود اسپم را افتي براي همه ناميده وبراي رفع ان اظهار اميدواري کرده است.
منبع. :Inquirer


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۳۶ مراجعه امروز
۵۳۵۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : نامهاي جديد در بازار محصولات قابل حمل
تاريخ :۵/۴/۱۳۸۲
متن خبر:
به دنبال عرضه ويندوز موبايل، نسخه جديد سيستم عامل مايکروسافت که براي کامپيوترهاي کوچک وقابل حمل ابداع شده است ، تعدادي از شرکتهاي معتبر ديگر نيز محصولات جديدي در اين زمينه توليد کرده اند. از جمله اين شرکتها Gateway است که کامپيوتر PDA جديدي به نام 100x را عرضه کرده و آن را با قيمت 350 دلار به فروش مي رساند. محصول مذکور بيشتر براي مصارف تجاري طراحي شده است. شرکت JVC نيز قصد دارد يک کامپيوتر جيبي با نام JVC io عرضه کند که قابليتهاي صوتي وتصويري فوق العاده اي دارد وحدود 500 دلار قيمت خواهد داشت. در همين راستا شرکت HP نيز به توليد مدل جديدي از PDA هاي خود با نام h1 940 خواهد پرداخت که 299 دلار قيمت دارد وبنا برادعاي مقامات اين شرکت کوچکترين PDA خواهد بود که تا منون عرضه شده است.
منبع. :informationweek


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۳۹ مراجعه امروز
۵۳۵۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : معرفي سايت irandevelopers در روزنامه همشهري
تاريخ :۵/۴/۱۳۸۲
متن خبر:
برای اطلاعات بيشتر به صفحه زير مراجعه کنيد معرفي سايت irandevelopers در روزنامه همشهري


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۴۲ مراجعه امروز
۵۳۵۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : ويروس جديد با نام tritle.c
تاريخ :۵/۴/۱۳۸۲
متن خبر:
ويروس tritle.c که از انواع کرمهاي کامپيوتري است همانند مشابهان قبلي خود پس از ايجاد تداخل دربرنامه هاي ضد ويروس و امنيتي کامپيوتر ميزبان دست به اقداماتي چون تخريب بسياري از فايلهاي موجود بر روي حافظه آلوده شده و ارسال خود به تمامي آدرسهاي موجود در ليست ميزبان مي کند.
تشخيص اين ويروس بسيار مشکل است و با وجود پيغام هاي مختلفي که برروي صفحه نمايش ظاهرمي کند پيغامي مختص خود ندارد که بتواذن بوسيله آن از ابتلا به اين ويروس آگاه شد.
منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۴۵ مراجعه امروز
۵۳۶۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : گفت و گو با نماينده وزارت ارشاد در کميته فيلترينگ
تاريخ :۵/۴/۱۳۸۲
متن خبر:
تير 82 - بخش کامپيوتر ابرار اقتصادي - تشكيل كميته سه نفره نظارت بر اينترنت و متعاقب آن اعلام مسدودشدن تعدادي از سايت هاي اينترنتي بازتاب گسترده اي در رسانه هاي داخلي و خارجي داشت•
پس از چندين سال گسترش اينترنت در كشور اين براي نخستين بار بود كه صحبت از مسدود شدن و پالايش اينترنت صحبت به عمل مي آمد•
اما نحوه مسدودسازي و نبود امكانات فني و متعاقب آن حجم گسترده اي از ناتواني فيلترينگ اينترنت باعث بروز انتقادهايي از اين موضوع شد• در زمينه فيلترينگ اينترنت با بهمن صالحي نماينده وزارت ارشاد در جلسات كميته نظارت بر اينترنت گفت وگويي انجام داده ايم كه مي خوانيد:

ما مطلع شديم كه يك شورايي قبل از تشكيل كميته 3 نفره براي نظارت بر اينترنت وجود داشته، شرح وظايف اين شورا و نحوه عملكرد آنها به چه شكل بوده است؟
جلساتي به منظور نظارت بر اجراي مصوبه مقررات و ضوابط شبكه هاي اطلاع رساني رايانه اي با سرپرستي دكتر حسن غفوري فرد به امضاي دكتر كي نژاد دبير شوراي عالي انقلاب فرهنگي تشكيل شد كه دراين جلسات براي تشكيل كميته 3 نفره تصميم گيري شد كه در اين كميته نمايندگاني از وزارت اطلاعات، فرهنگ و ارشاد اسلامي و صدا و سيما حضور دارند•
توسط مسوول اين جلسات از تمامي وزارتخانه هاي ذيربط نمايندگاني دعوت شدند كه بنده به عنوان نماينده وزارت ارشاد در اين جلسات حضور داشتم• و وظيفه كميته 3 نفره پيگيري مصاديق فيلترگذاري از جهت اجرايي و ابلاغ آن به شركت مخابرات است•

آيا ساختار روشني براي اين جلسات وجود دارد؟
خير؛ زيرا مسوولين اين طرح فعلا بطور جدي اين جلسات را پيگيري نمي كنند، به همين دليل هيچ ساختاري كه به عنوان يك كميته و يا شورا معرفي شود، در اين جلسات وجود ندارد•

با توجه به فراهم نبودن زيرساخت هاي بخش فني مخابرات، چرا شما براي فيلتر كردن سايت ها زودتر اقدام كرديد و آيا بهتر نبود ابتدا زيرساخت هاي فني بهبود مي يافت تا حداقل فيلترينگ به شكل هماهنگ قابل انجام بود؟
اين درست است كه ما بايد قبل از اقدامات اجرايي، امكانات فني و نظارتي را بررسي مي كرديم، ولي اجراي طرح فيلترينگ وابستگي كاملي به بخش فني مخابرات ندارد و فقط مخابرات مسوول فيلتركردن سايت ها نيست و خود خانواده ها، ISPها و ICPها هم مي توانند اين طرح را اجرا كنند، به همين دليل ما نمي توانستيم منتظر بخش فني مخابرات باشيم•
از طرفي اگر ما جنبه رسيدگي به بعضي از ابعاد صريح اين موضوع را بپذيريم، ضعف ابعاد اجرايي اين قضيه امري قابل قبول است و متاسفانه اين ضعف باعث نكات بحث و چالش هايي در اين خصوص شده است•

با توجه به اينكه اينترنت تكنولوژي روز است و هر روز ما شاهد پيشرفت آن هستيم، آيا محدوديت براي آن مفيد واقع مي شود وفيلترينگ در حالي در كشور ما تجربه مي شود كه ما تجربه ويدئو و ماهواره داريم كه به نظر نمي رسد چندان موفق بوده باشد؟
اين موضوع به موقعيت زماني و وجود عطش استفاده از يك تكنولوژي جديد برمي گردد و ما بايد محدوديت ها و حساسيت هايي را براي آن قايل شويم، ولي پس از گذشت اين مشكلات و حساسيت ها برطرف مي شود، از طرفي در يك بازه زماني كه اين گونه محصولات به بازار مي آيد، هيچ محتوايي براي رقابت با اين مساله نداريم، ولي اگر بعد از گذشت زماني بتوانيم محصولاتي را در بازارهاي جهاني ارايه دهيم و به نوعي با آنها رقابت كنيم، اين محدوديت ها از بين مي رودو اينترنت نيز به همين شكل است• به همين دليل ما تصميم داريم با استفاده از طرح تكفا و بودجه هاي آن يك شبكه اينترانت با تمامي اطلاعات علمي، فرهنگي كشور در قالب شبكه اينترنت ايجاد كنيم و در يك فضا بين كاربران و اينترنت جهاني واسطه اي ايجاد مي شود تا كاربران داخلي از اين شبكه استفاده كنند و نيازهاي خود را برطرف كنند• اگر نيازهاي آن در اين شبكه قابل دستيابي نبود، از طريق اين شبكه به شبكه اينترنت جهاني وصل شوند•
در همين زمينه كشور انگليس نيز در نظام آموزشي مدارس چنين مكانيزمي را اجرا كرده است و ما نيز در ايران براي شبكه ملي فرهنگ، در برنامه هاي گام دوم رياست جمهوري و با سرمايه گذاري و بودجه تكفا در سال 28 فاز اول و در سال آينده اين طرح را اجرا مي كنيم و بعد اين شبكه را به صورت يارانه اي و حتي به صورت مجاني در دسترس عموم مردم قرار مي دهيم• محدوديت اينترنتي در حال حاضر در خصوص فيلترگذاري سايت ها در كشور ما لازم بوده است و ما فقط 3 شاخص سايت هاي ضداخلاقي، سايت هاي موهن و سايت هاي ضدامنيت ملي از جمله گروهك هاي محارب را بررسي و اسامي اينگونه سايت ها را براي فيلتر كردن اعلام كرديم•

نحوه شناسايي، ارزيابي و نتيجه گيري سايت ها در كميته به چه شكل است و اگر از بين اعضاي كميته كسي مخالف باشد، تكليف چه خواهد بود؟
كميته پيگيري مصاديق اجرايي با سرپرستي و نظارت وزارت اطلاعات فعاليت مي كند و شناسايي اسامي سايت هايي كه در دسته بندي آن 3 شاخص وجود دارد نيز به عهده وزارت اطلاعات است و در كنار اين وزارتخانه هر كدام از اعضا نيز تعدادي از سايت ها را معرفي مي كنند• معيار و نحوه ارزيابي سايت ها بر اساس مصوبات شوراي عالي انقلاب فرهنگي است و نتيجه گيري در مورد اين سايت ها نيز در حال حاضر به صورت اقناعي است و هر 3 عضو كميته بايد يكديگر را قانع كنند•
اما اگر يك نظام اصلي در اين طرح شكل گيري شود، بايد با اتكا به آراٌ و مكانيزم خاص نظرات مختص به فيلتركردن هر سايت ارايه و به طور كلي بررسي شود•

ما شاهد فيلترشدن برخي از سايت ها هستيم كه تعدادي از اين سايت هاي فيلتر شده سايت هاي سياسي بوده اند، آيا اين سايت ها جزو شاخص هاي شما در خصوص فيلترگذاري هستند؟
با توجه به شاخص هاي اعلام شده، ما هيچ بخثي در خصوص سايت هاي سياسي نداشته ايم و اصلا جزو اين دسته سايت هاي فيلترشده نبوده اند، مگر اينكه اين فيلترگذاري يا به دليل مشابهت اسمي بوده و يا اشكال از جانب مخابرات بوده است• زيرا بسياري از سايت ها با IPهاي مجازي بر IPهاي vاصلي قرار گرفته اند• به همين دليل اگر IP اصلي فيلتر شود، IPهاي مجازي آن نيز فيلتر مي شوند و تعداد اين سايت مطمئنا از يك يا دو سايت بيشتر نبوده است• در هر صورت ما هيچ تعريفي از سياسي بودن سايت ها نداريم و در حال حاضر هيچ طيفي براي آن تعريف نكرده ايم•

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

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


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۴۸ مراجعه امروز
۵۳۶۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : CeBIT،اين بار در آمريكا
تاريخ :۵/۴/۱۳۸۲
متن خبر:
پنجشنبه 5 تير 82 - نمايشگاه CeBIT آمريكا كه در حقيقت نسخه آمريكايي يكي از بزرگترين نمايشگاه هاي فناوري جهان است كه همه ساله در هانوور آلمان برگزار مي گردد، در كشور آمريكا در حال برگزاري است. رايانه هاي كيفي جديد، دستيارهاي ديجيتال و شبكه هاي بي سيم از جمله فناوري هايي محسوب مي شوند كه در اين نمايشگاه بزرگ به رقابت مي پردازند. اين نمايشگاه كه در نيويورك بر پا شده است بر خلاف نمايشگاه هاي بزرگي چون Comdex و CeBIT هانوور، صدها هزار بازديد كننده ندارد. عمده بازديد كنندگان اين نمايشگاه عوامل و دست اندركاران دنياي تجارت مي باشند. CeBIT آمريكا درست پس از نمايشگاه آمريكايي ديگري با نام Pc Expo برگزار مي گردد. با اين حال گردانندگان آن هرگز انتظار شلوغي نمايشگاه PcتExpo را در اين نمايشگاه ندارند و حداكثر تعداد بازيدكنندگان را بين ?? تا ?? هزار نفر تخمين مي زنند كه اغلب اين افراد عوامل اجرايي شركت هاي معظم و يا متوسط مي باشند. مارك دينن مدير نمايشگاه CeBIT آمريكا، هدف از برپايي آن را فراهم آوردن امكان مناسب براي شركت هاي حاضر در اين رخداد جهت عقد قراردادهاي جذاب تجاري ذكر مي كند و شما بازديد كنندگان نمايشگاه را پارامتر چندان مهمي نمي داند. او مي گويد: «ما قصد نداريم تا يك رخداد بزرگ باشيم، هدف ما تنها آن است كه نمايشگاه تجاري با كيفيتي را برگزار كنيم. هدف ما رقابت با نمايشگاه هاي پرسابقه و قدرتمند نيست بلكه انتظار داريم شركت هاي شركت كننده در اين نمايشگاه از ملاقات مديران تجاري و عقد قراردادهاي كلان با آنها در اين نمايشگاه راضي و خرسند شوند.» در CeBIT آمريكا حدود ??? شركت رايانه اي در زمينه هاي مختلفي چون سخت افزار، نرم افزار و شبكه به ارائه محصولات خود پرداخته اند. بخش هاي كوچكتري نيز در اين نمايشگاه به مسائلي چون فناوري تلفن هاي همراه، امنيت رايانه اي، شبكه هاي بي سيم و حافظه هاي عظيم مي پردازند. برخي از شركت هاي بزرگ رايانه اي چون Dell در اين رخداد حضور كمرنگي دارند درحالي كه شركت هاي ديگري چون HP آن را عرصه مناسبي براي معرفي محصولات جديد خود دانسته و حضوري چشمگير را در آن تجربه مي كنند. شركت هاي IBM و SUN نيز از جمله فعالان نمايشگاه CeBIT آمريكا به شمار مي آيند. شركت هاي بزرگ ديگري چون اينتل، Gateway، مايكروسافت، اوراكل، توشيبا و زيراكس نيز از جمله شركت كننده هاي بزرگ ديگر در اين نمايشگاه به حساب مي آيند.

منبع روزنامه همشهری


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۵۱ مراجعه امروز
۵۳۶۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : SSL، مدعي تامين امنيت ارتباطات
تاريخ :۵/۴/۱۳۸۲
متن خبر:
پنجشنبه 5 تير 82 - SSL مخفف Secure Socket Layer و يكي از پروتوكل هاي مهم در ايجاد امنيت ارتباطات راه دور از طريق اينترنت ميباشد. بيشتر سايتهاي كه در زمينه تجارت الكترونيكي فعاليت دارند و يا بانكهاي اينترنتي كه پولها را بواسطه كارتهاي اعتباري به سراسر اينترنت انتقال ميدهند از اين پروتوكل استفاده ميكنند. در دهه اخير و مخصوصا از سال 1998 به بعد، دنيا با رشد روز افزون تجارت الكترونيكي روبرو بوده و اين سرويس Online نيازمند سيستم امنيتي مناسبي ميباشد. زيرا شخصي كه با استفاده از شماره كارت اعتباري خود اقدام به خريد Online مينمايد، بايد از سيستم خريد اطمينان كامل داشته باشد. اين سيستم در محيط وب توسط پروتكلي با نام SSL فراهم ميگردد. در واقع مسئولين IT و مخصوصا ICT كه در زمينه تجارت الكترونيكي فعاليت ميكنند، ميبايست با طرز كار اين پروتكل آشنايي خوبي داشته باشند. اين پروتوكل توسط شركت Netscape ساخته شده و هم اكنون نسخه 3 (آخرين نسخه) آن در دسترس ميباشد. با استفاده از اين پروتوكل، اطلاعاتي كه از طرف كاربر بصورت رمزگذاري شده ارسال ميشود و بعد از دريافت از طريق سرور ، رمزگشايي شده و اطلاعات اصلي بازيابي ميشود. در ضمن SSL با سيستم امنيتي مناسب خود، تضمين ميكند كه فقط شركت يا سايتي كه كاربران از آن خريد ميكنند از اطلاعات كارت اعتباري آنها باخبر هستند. به عنوان مثال شخصي كه قصد خريد Online با استفاده از Credit Card را دارد، ميبايست از طريق HTTP (پورت 80) و پروتوكل TCP/IP بواسطه مرورگر وب عمل نمايد. در واقع TCP/IP قادر به انتقال اطلاعات در سراسر جهان ميباشد كه پروتكلهاي HTTP ، IMAP ، LDAP و غيره ، زير مجموعه TCP/IP ميباشند و از قوانين مربوط به آن استفاده ميكنند. ولي پروتوكل TCP/IP به تنهايي قادر به مخفي كردن داده ها بين كاربر و سرور نيست و از طرفي پورت 80 مربوط به ارتباطات معمولي (غير ايمن) ميباشد و يك هكر با استفاده از Packet Sniffing قادر به بررسي و مشاهده محتواي Packet هاي پروتوكل است. از اين رو براي ارتباطات ايمن، SSL از طريق پورت 443 ولي با پشتيباني از پروتوكل TCP/IP اقدام به ارسال و دريافت بسته هاي اين پروتوكل مينمايد. از اين رو SSL بين يك پروتوكل سطح بالا مانند HTTP يا SMTP و يك پروتوكل سطح پايين مانند TCP قرار ميگيرد و ارتباط ايمن را برقرار مينمايد. اين پروتوكل جديد در استاندارد TLS (Transport Layer Security) نيز بكار ميرود كه از معروفترين اجزاي اين استاندار امنيتي، ميتوان به WTLS كه در براي امنيت WAP و ارتباطات بي سيم بكار برده ميشود اشاره كرد.

مشكلات تجارت الكترونيكي در ايران :
اولين نكته اينكه هيچگاه به همه سايتها اعتماد نكنيد و شماره اعتباري خود را در اختيارشان قرار ندهيد. بعضي سايتها به بهانه Adult Check و بهانه هايي از اين قبيل، شماره كارت اعتباري شما را گرفته و از آن سوء استفاده ميكنند. حتي بعضي سايتها گواهينامه هاي ديجيتالي صحيح و تثبيت شده اي به شما نشان ميدهند ولي امكان بروز مشكل همچنان وجود دارد. هميشه از سايتهاي معتبر كه سيستم هاي تست شده اي را ارائه ميدهند و مورد استفاده عموم قرار گرفته اند استفاده كنيد. در اين بين، امكان كلاهبرداري از كاربران ايراني در اينترنت چند برابر ميباشد. زيرا قوانيني براي حمايت از كشورهايي كه در اقتصاد جهاني داراي محدوديت هستند وجود ندارد و نظارتي به روي اين معاملات انجام نميگيرد. همچنين خيلي از اجناس خريداري شده به ايران ارسال نميگردد، ولي در كشورهاي خارجي در صورتي كه كالايي بعد از خريد Online به مقصد نرسد بلافاصله توسط مراجع قانوني مورد پيگيري بين المللي قرار خواهد گرفت. يكي از مشكلات مهم ديگر عدم دسترسي به كارتهاي اعتباري بين المللي است، اگرچه گامهاي موثر و مثبتي در جهت رفع اين مشكل توسط سازمانهاي خصوصي و واسطه اي انجام گرفته و حتي در بعضي معاملات از كارتهاي اعتباري داخلي استفاده ميشود ولي تجارت الكترونيكي در ايران نيازمند حمايت بيشتري از طرف مسئولين امر ميباشد.

تشخيص هويت :
يكي از مباحث مهم و اصولي در ارتباطات ايمن، تشخيص هويت متقابل از هر دو طرف Client و Server ميباشد. در يك ارتباط، ميبايست هويت اصلي سرور براي كاربر و برعكس مشخص شود زيرا در غير اين صورت هر سروري قادر به ايجاد اعتماد در كاربران خواهد بود. هر سرور بايد داراي گواهينامه ديجيتالي باشد كه اين گواهينامه، نشاندهنده هويت اصلي آن است و توسط شركتهايي مانند VeriSign و Thawte ارائه ميگردد. در اين گواهينامه الكترونيكي اطلاعاتي از قبيل : كليد عمومي (براي مخفي سازي اطلاعات) ، شماره سريال ، نام دامنه ، امضاي ديجيتالي و تاريخ شروع و انقضاي اعتبار گواهينامه درج ميشود. كاربر به راحتي ميتواند مشخصات گواهينامه سرور را بررسي نمايد. به عنوان مثال فرض كنيد كه براي خريد يك كالا به صورت On-Line به يكي از سايتهاي مربوطه متصل شده ايد، در ابتدا پيغامي مبني بر ايجاد يك ارتباط با استفاده از SSL را ملاحظه ميكنيد، كه بعد از تاييد آن، اگر به پايين پنجره مرورگر خود از سمت راست (درStatus Bar) دقت نماييد، آيكوني (به شكل يك قفل) را مبني بر يك ارتباط ايمن مشاهده خواهيد كرد كه با دوبار كليك كردن بر روي آن ميتوانيد اطلاعاتي گواهينامه سرور را بطور كامل مشاهده نماييد. البته بايد توجه داشته باشيد كه حتما مرورگر وب شما قابليت پشتيباني از SSL را داشته باشد و يا آن را غير فعال نكرده باشيد. براي اطمينان از فعال بودن اين پروتوكل، در Internet Explorer از منوهاي بالا به منوي Tools > Internet Options رفته و از پنجره ظاهر شده، Tab مربوط به Advanced را انتخاب كرده و از انتخاب گزينه اي با عنوان Use SSL 3.0 اطمينان حاصل كنيد. پيشنهاد ميكنم كه حتما قبل از استفاده از Credit Card خود در اينترنت، گواهينامه سرور را از نظر تاريخ انقضا و نام دامنه مورد بررسي قرار دهيد.

تكنيكهاي امنيت در SSL :
استاندارد SSL از تكنيكهاي زيادي براي رمزگذاري و رمزگشايي بسته هاي پروتوكل TCP/IP استفاده ميكند. اين تكنيكها در نسخه هاي مختلف SSL متفاوت است و روز به روز در حال پيشرفت و بهينه شدن ميباشد. دو تكنيك رمزگذاري كه اغلب در اين پروتوكل انجام ميگيرد روشهاي متقارن و نامتقارن است.

1- روش متقارن :
در اين روش SSL هر دو طرف ميبايست فقط از طريق يك كليد، داده ها را رمزگذاري و يا رمزگشايي نمايند. اين روش از سرعت مناسبي برخوردار است البته اگر هكر بتواند كليد اصلي را بدست آورد امكان بروز مشكلاتي در امنيت داده ها وجود دارد. روش متقارن در الگوريتمهاي RC4 و DES (Data Encryption Standard) نيز مورد استفاده قرار گرفته است.

2- روش نامتقارن :
در اين روش كه از سرعت كمتري نسب به روش متقارن برخوردار است، بجاي يك كليد، داراي دو كليد خصوصي و عمومي (1 كليد خصوصي و 1 كليد عمومي) ميباشد كه كليد عمومي در اختيار تمام SSL هايي كه اقدام به ارسال داده ها ميكنند قرار ميگيرد ولي كليد خصوصي فقط در اختيار پروتوكلي است كه اقدام به دريافت داده ها ميكند. اين روش در الگوريتمهاي مختلفي از جمله RSA و MD4 مورد استفاده قرار ميگيرد. در ضمن پروتوكل SSL از دو زير پروتوكل به نامهاي SSL Record و SSL Handshake تشكيل شده است كه مسئوليت Handshake SSL برقراري ارتباط اوليه بين كاربر و سرور ميباشد و SSL Record اطلاعات مربوطه را در بسته هاي 16 كيلوبايتي به مقصد ارسال ميكند. در اين بسته ها اطلاعاتي از جمله الگوريتم كدگذاري ، پيغام خطا مبني بر مشكلي در شناسايي Packet و همچنين خود داده هاي اصلي قرار دارد.

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

1- در مرحله اول كامپيوتر كاربر اقدام به ارسال اطلاعاتي در مورد نسخه SSL ، تنظيمات تكنيك مخفي سازي و فشرده سازي داده ها ، ID جلسه (Session) و اطلاعات ساعت و تاريخ به كامپيوتر سرور ميكند. اگر كاربر براي اولين بار از سرور مورد نظر استفاده كند، ID جلسه، صفر خواهد بود.

2- بعد از ارسال اطلاعات از طرف كاربر ، سرور نيز اطلاعاتي از جمله نسخه SSL و تنظيمات مخفي سازي و غيره .. را به ماشين كاربر ارسال ميكند. در اين مرحله، گواهينامه سرور براي تشخص هويت نيز به كاربر ارسال ميشود.

3- در اين مرحله ، ماشين كاربر اقدام به تشخص هويت سرور ميكند كه در صورت وجود مشكلاتي در گواهينامه سرور، ارتباط برقرار نخواهد شد.

4- در صورتي كه مرحله قبل با موفقيت انجام گيرد و كاربر و سرور يكديگر را تاييد نمايند. در اين مرحله توسط ماشين كاربر، يك كليد Premaster Secret براي جلسه تهيه ميگردد، لازم به ذكر است كه Premaster Secret با استفاده از كليد عمومي كه در مرحله دوم توسط گواهينامه سرور به ماشين كاربر ارسال شده بود، رمزگذاري (Encrypt) ميشود، در ضمن اين كليد 48 بايتي به صورت تصادفي ايجاد ميشود. در اين مرحله مشخصات ماشين كاربر نيز براي تشخيص هويت به همراه Premaster Secret به ماشين سرور انتقال داده ميشود.

5- در اين مرحله در صورتي كه هويت كاربر براي سرور مشخص گرديد، ماشين سرور با استفاده از كليد خصوصي كه در اختيار دارد اقدام كه رمز گشايي Premaster Secret مينمايد كه در نهايت كليد Master Secret ايجاد ميشود. اين رمزگشايي را ماشين كاربر نيز انجام ميدهد. در اين مرحله هر دو طرف ارتباط داراي كليد Master Secret ميباشند. اگر توجه كرده باشيد تا اين مرحله هر دو طرف كليد Master Secret را بدون اينكه به روي خط براي يكديگر ارسال كنند در اختيار دارند، در واقع تمام اين مراحل براي امنيت بالاتر و عدم ارسال كليد اصلي به روي خط ارتباطي بود. بعد از انجام تمام مراحل فوق ارتباط SSL Handshake بطور كامل برقرار ميگردد و هر دو طرف با استفاده از كليدهاي جلسه، اقدام به رمزگذاري و رمزگشايي بسته هاي ارسالي و دريافتي مينمايند.

مشكل امنيتي در SSL :
با وجود اينكه اين پروتوكل امروزه در سايتهاي تجارت الكترونيكي مورد استفاده گسترده قرار ميگيرد ولي نميتوان منكر معايب و نواقص آن شد. همانطور كه ميدانيد كليد اصلي مربوط به ارتباطات SSL بصورت تصادفي ايجاد ميشود، متاسفانه طراحي سيستم ايجاد كنند كليد جلسه (Session Key) اين پروتوكل كه توسط شركت NetScape ايجاد شده، ضعيف ميباشد، و يك هكر ماهر به راحتي قادر به پيدا كردن اين كليد خواهد بود. نسخه هاي قبلي SSL از كليدهاي 40 بيتي استفاده ميكردند و نسخه 3 اين پروتوكل از كليد 128 بيتي استفاده ميكند، لازم به ذكر است كه تمامي نسخه ها اين پروتوكل به غير نسخه 3 ، توسط مهاجمان، Crack شده و ناامن است، البته هنوز نسخه 3 كرك نشده ، ولي كارشناسان احتمال وقوع اين امر را در آينده اي نزديك ميدهند كه در اين صورت ميبايست تحولات بنيادي در زيربناي اين پروتوكل ايجاد شود.

فرشاد فكري نجات
http://www.fekrinejat.com
منبع itiran به نقل از ايرنا


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۱۲ مراجعه امروز
۵۳۲۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : رايانه ها در دست شما خم مي شوند
تاريخ :۶/۴/۱۳۸۲
متن خبر:
6 تير 82 - جام جم آنلاين - وقتي كه رايانه ها بسيار كوچك شده و انجام عمليات هاي گوناگون با دگمه هاي ريز مشكل مي شود چگونه قادر به كنترل آن مي شويم؟ به گفته مهندسان در لابراتوار سوني ، تنها راه اين است كه با ملايمت آنها را كج يا خم كنيم.
مثلا مرورگرهاي نقشه (MapBrowser) براي توريست ها توسط موس يا كيبورد كنترل نمي شوند اما با يك خم كردن ساده و البته ماهرانه مي توان از آنها استفاده نمود.
سوني با در نظر گرفتن اين كه مردم در آينده نزديك ابزارهاي رايانه اي قابل انعطاف در كارتهاي اعتباري با خود حمل خواهند كرد بسيار كوچكتر از آنچه امروز همراه شخصي ديجيتالي (PDA) مي خوانيم قصد دارد دست به خلق اولين رايانه هاي خم شدني با توجه به مشخصات ذكر شده بزند.
ايوان پوپيروف يكي از محققان برجسته در لابراتوار سوني در توكيو مي گويد اولين نمونه اين محصول نامش گومي به معني كائوچو است كه مخترع آلماني اش به نام كارشتن شويزيگ معروف است.
به گفته وي گومي هرچند خام است اما نكات ضروري در ساخت چنين پروژه اي را داراست.
گومي به عنوان اولين ابزار رايانه اي خم شدني با همكاري شويزيگ و طراحي ايجيرو موري ساخته شده است.
همان طوري كه در تصوير مي بينيد گومي هيچ قلم ، دگمه يا موسي ندارد و با داشتن يك ال سي دي به همراه حسگر و تاچ پد روي يك پلاستيك اكريليك منعطف كار مي كند.
اطلاعات روي نمايشگر ال سي دي به وسيله تاچ پد و حركت دست كاربر تحت كنترل قرار مي گيرد. وقتي توسط دست ابزار و حسگرها خم مي شوند سيستم دستورات را اجرا مي كند.
فيزوالكتريك و حسگرهاي فشاري مسوول توليد نيرو هنگام خم كردن ابزار مذكور است كه داخل گوي از خم شدگي پشتيباني مي كند.
پوپيروف مي گويد كاربر مي تواند به وسيله نرم افزار نصب شده روي گيم سيستم حركات كاملا پيچيده را بدون فشار روي دگمه و تنها با خم كردن گوشه هاي گومي انجام دهد.
به گفته وي يكي از دلايلي كه از كليد در اين وسيله استفاده نمي شود حجم بسيار كوچك آن است كه نياز به دگمه را به دليل ريز بودن منتفي مي كند. شويزيگ يكي ديگر از مبدعان سيستم گومي تاكنون چندين ابزار متنوع از جمله مرورگر نقشه ، آلبوم تصويري و يك بازي ساده و نيز سيستم قراردهي متن در گومي را ساخته است.
به گفته وي در آينده نزديك توريست ها نقشه هاي رايانه اي خم شونده خواهند داشت و يا روي كليد درب هتل يك بازي رايانه اي نصب شده كه كاربر مي تواند از آن بهره بگيرد و يا بليط مسافرت خود را مجهز به بازي يافته و با آن سرگرم شود.
طرح ايده آل سوني ساخت ابزار رايانه اي خم شدني به اندازه ضخامت ورق كاغذ است كه از چندين لايه تشكيل شود:
يك صفحه اسكرين موسوم به OLED ، مدارات و جريان برق خم شدني ، يك پانل هوشمند در پشت ابزار مورد نظر و يك حسگر فيزوالكتريك جزو ضروريات نسل آينده رايانه هاي خم شدني است.
مكان نما با دست از پشت ميني پي سي مذكور هدايت شده و وقتي به وسط آن اشاره مي شود منوها ظاهر مي گردد.
زوم كردن روي تصاوير نقشه ، كنترل سرعت نمايش تصوير و اديت آن توسط لايه ويديويي ازجمله ويژگي هاي رايانه هاي خم شدني است.
شويزيگ خوش بينانه مي گويد نمونه اوليه و نهايي آن تا 3 سال ديگر به دست مصرف كننده مي رسد و داخل كيف جيبي جا مي گيرد.
يك همراه شخصي ديجيتالي (PDA) آينده با نمايشگر لرزشي ، مهندسي لمسي روي ابزارهاي رايانه اي بدون استفاده از كليد يا كيبورد تا جايي كه كاربر خيال كند در حال زدن روي كليد است به بازار خواهد آمد ، در اين ابزار اسكرين هاي لرزشي از نوار كريستالي روي ال سي دي بهره مي گيرد و با فشار يك حركت دگمه مجازي روي نوار ايجاد كرده و نوك انگشت فرد را قلقلك مي دهد.
اگر اين فناوري توسعه يابد گرفتن احساس از تصوير يا فيلم ويدئويي روي اسكرين به واقعيت تبديل خواهد شد


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۱۵ مراجعه امروز
۵۳۳۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : سرويس پک 4 ويندوز 2000 آمد
تاريخ :۶/۴/۱۳۸۲
متن خبر:
شرکت ميکروسافت سرويس پک شماره 4 ويندوز 2000 را منتشر کرد.
شايان ذکر است که اين سرويس پک هيچ قابليت جديدی به
ويندوز اضافه نمی کند و فقط شامل تمامی اصلاح کننده های بعد از سرويس پک شماره 3 می باشد.
کاربران می توانند از سايت ميکروسافت اين نسخه از سرويس پک را دريافت کنند.
http://www.microsoft.com/windows2000/downloads/servicepacks/sp4/


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۱۸ مراجعه امروز
۵۳۳۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آغاز ثبت نام مركز آموزش الكترونيكي پرشيا
تاريخ :۹/۴/۱۳۸۲
متن خبر:
به تاييد بسياري از صاحب نظران مسايل آموزشي ، امروزه استفاده از آموزش الكترونيكي در كنار آموزشي سنتي يك انتخاب نبوده بلكه يك ضرورت مهم ميباشد .

در اين راستا شركت پيشگامان فناوري (پرشيا) بعد از راه اندازي موفقيت آميز سايت برنامه نويسان ايراني (http://www.barnamenevis.net) در جهت تحقق شعار "آموزش براي همه افراد ، همه جا ، همه وقت" و گسترش هرچه بيشتر دانش فناوري اطلاعات (IT) در بين قشر عظيم جوانان كشور ، اقدام به راه اندازي مركز آموزش الكترونيكي پرشيا (http://www.persiaelearning.com) جهت تشكيل دوره هاي آموزشي كوتاه مدت كاربردي نموده است تا بتواند قدمي هر چند كوچك در جهت بالا بردن سطح دانش نيروهاي جوان و مستعد كشورمان بردارد .

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

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

در ضمن كليه موسساتي كه خواهان حركت در مسير تكنولوژي روز و تغيير روشها و محيط هاي آموزشي خود هستند ميتوانند با استفاده از امكانات خوب اين مركز اقدام به برگزاري دوره هاي آموزشي مورد نظر خود با كمترين هزينه و بهترين كيفيت بنمايند.

علاقمندان به هر نوع همكاري ميتوانند براي اطلاعات بيشتر به سايت مركز مراجعه نموده و يا با شماره 5676 - 208 - 0913 تماس گرفته و يا با پست الكترونيكي info@persiaelearning.com مكاتبه نمايند .

آدرس سايت مركز آموزش الكترونيكي پرشيا : http://www.persiaelearning.com


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۲۱ مراجعه امروز
۵۳۳۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : گزارش نيويورک تايمز از محدوديتهای اينترنتی در ايران
تاريخ :۹/۴/۱۳۸۲
متن خبر:
9 تير 82 - بي بي سي - نيويورك تايمز روز يكشنبه در مقاله اى با عنوان "ايران مى خواهد جلوى هرزه نگارى و سياست را در اينترنت بگيرد" مفصلاً به تصميم هاى اخير دولت اسلامى در مورد مسدود كردن بخش بزرگى از سايت هاى اينترنتى پرداخته است.
در اين مقاله به نقل از رضا پارسا، رئيس انجمن صنفي كارفرمايان خدمات اينترنتى، آمده است "بعد از محدوديت هاى روزنامه ها و رسانه هاى عمومى دولت مى داند كه مردم به دنبال خبر در اينترنت هستند و طبيعى است كه بخواهد دسترسى به آن را محدود كند."
نيويورك تايمز مى نويسد اما مثل همه قوانين ديگر در ايران در اين قانون هم فاصله ميان ممنوع و مجاز و درست وغلط نامشخص و سيال است و به همين خاطر موش و گربه بازى ميان محافظه كاران حاكم و نسل جوانتر ايرانى ها كه دائماً توانائى هاى فنى بهترى پيدا مى كنند شروع شده است.
حتي حاميان اعمال محدوديت هاى اينترنتى هم اميدى به موفقيت اين كار ندارند و مى گويند براى نزديك به پنجاه ميليون جوان ايرانى كه به دنبال وسيله اى براى تفريح و سرگرمى هستند توفيق بستن سايت هاى اينترنت بيش از توفيق ممنوع كردن دستگاه هاى ويدئو و آنتنهاي ماهواره اي نخواهد بود.

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

نيويورك تايمز مى نويسد غير از بيش از صد هزار سايت پورنوگرافي (سکسي) و سايت هاى مخالفان رژيم كه از پيش دستور جلوگيرى از پخش آنها به شركت هاى خدمات اينترنتى در ايران داده شده بود اخيراً نود و چهار سايت ديگر نيز كه اكثراً سايت هاى خبرى آزاد هستند از طرف وزارت ارشاد ممنوع اعلام شده اند.
بسيارى در ايران معتقدند كه اين محدوديت ها مقدمه محدوديت هاى وسيعترى است. اين روزنامه به نقل از الهه كولائى، نماينده مجلس، مى نويسد: "آنچه مهم است اينست كه تبادل آزاد افكار در جامعه محدود نشود؛ در حال حاضر اين نگرانى وجود دارد كه اين نحوه فيلتر گذارى بر اينترنت نه فقط آنچه را با فرهنگ و اخلاق ما مغايرت دارد بلكه تمام منابع توزيع اطلاعات را هم در بر بگيرد."
منبع:ITIRAN.com


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۲۴ مراجعه امروز
۵۳۴۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : اينتل رقيب سرسخت خود را ازپاي درآورد
تاريخ :۹/۴/۱۳۸۲
متن خبر:
9 تير 82 - جام جم آنلاين - اينك پنتيوم 4 عنوان پرسرعت ترين پردازنده را از آن خود کرده است.
پردازنده 2/3 گيگاهرتزي اينتل در اولين آزمايش موفقيت آميز وي PC ، رقيب عمده خود آتلون ايكس پي 3200+ را دو شقه كرد.
فناوري فرانت سايد باس 800 مگاهرتزي اينتل برگ برنده اي بود كه وقتي در سري جديد رو شد عملا AMD را به زوال سرعت كشاند.
چرا كه آتلون 3200+ تنها 400 مگاهرتز سرعت فرانت سايدباس را در خود جاي داده است.
در آزمايش دو محصول ديده شد سرعت تصاوير رزولوشن 1024 در 768 در محصول اينتل 128 فريم در ثانيه است و در آتلون 102 فريم در ثانيه تصاوير يك بازي رايانه اي تقريبا سنگين به نمايش درمي آيد.
شركت Xis اينك دسكتاپ خود مجهز به 2/3 را 3778 دلار و سيستم مجهز به آتلون را 3319 دلار به فروش مي رساند.
به گفته كارشناسان ، انتقال قسمتي از پردازش به فرانت سايد سيستم فناوري منحصر به فرد اينتل محسوب مي شود كه به عنوان برگ برنده ، آتلون را ميخكوب سرجايش نشاند.
بدين صورت كه با فروكش سيستم توانايي بالاتري پيدا كرده و پردازش عملياتهاي سنگين گرافيكي را سريعتر به انجام مي رساند.
به گفته كوين كريول از كارشناسان برجسته در ميكروپراسسور محصول 2/3 گيگاهرتزي آخرين مدل از نسل پنتيوم 4 قبل از ورود «پرسيكات» است. در استراتژي اينتل نسل جديد پردازنده هاي پرسيكات بايد در نيمه دوم سال 2004 به بازار عرضه شود.
پرسيكات تراشه اي جديد مبتني بر90 نانومتر به همراه يك مگابايت L2cache (يعني دو برابر 5.2 كيلوبايت كنوني) است. محصول ديگري كه اينتل قصد توليد آن را دارد از سوي پردازنده هاي 13 تحت نام SS3 خواهد بود كه تمركز اصلي روي اين پردازنده بحث توسعه امنيتي تراشه است.
به گفته كريول در همه اين موارد اينتل يك نكته را يعني فناوري Hyperthreading در نظر گرفته و شروع به توسعه آن كرده است.
در اين فناوري يك پردازنده مجرد 2 كار و عمليات را با هم انجام مي دهد كه محصول پرسيكات با توسعه buffering خود اين كار را به معرض تماشا مي گذارد.
با توجه به مجموعه ويژگي هاي جديد اينتل در نظر دارد پنتيوم 4 را تا همين جا ختم كند و محصولي مانند پرسيكات را به عنوان پنتيوم 5 و نسل جديد پردازنده هاوارد بازار كند.
اگر چنين اتفاقي بيفتد سري بعد از پرسيكات يعني Tejas نيز تحت عنوان پنتيوم 5 به دست مصرف كنندگان خواهد رسيد.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۲۷ مراجعه امروز
۵۳۴۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : هکرها آخر اين هفته اينترنت را ويران خواهند کرد
تاريخ :۱۲/۴/۱۳۸۲
متن خبر:
برطبق گزارشات شرکتهاي امنيتي عده زيادي ازهکرها قصد دارند تا آخراين هفته در يک رقابت بزرگ براي خرابکاري در وب سايتهاي اينترنتي شرکت کنند. برطبق اطلاعات کسب شده، خرابکاري درسايتهايي که از طريق سرورهاي کمتر متداول، اداره مي شوند امتياز بيشتري خواهد داشت. برنده اين رقابت نيزهکري خواهد بود که بتواند در کوتاه ترين زمان شش هزار سرور را از کار بيندازد. کارشناسان ضمن جدي دانستن خطر مذکور از اشخاص حقيقي و حقوقي خواسته اند تا اقدامات لازم براي مقابله با حملات احتمالي انجام دهند و گرنه فعاليتهاي معمول در اينترنت نيز با اشکال مواجه خواهد شد. ازسوي ديگر برخي شرکتها نيز از افزايش فعاليتهاي خرابکارانه طي چند روزاخير خبر داده اند که اين امر صحت ادعاهاي موجود را تأييد مي کند. کارشناسان انتظار دارند تا در جريان اين رقابت خرابکارانه عملکرد 20 تا سي هزار وب سايت با اختلال مواجه شود. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۱۷ مراجعه امروز
۵۴۳۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آخرين مصوبات کنفرانس جهاني WRC
تاريخ :۱۲/۴/۱۳۸۲
متن خبر:
کنفرانس جهاني ارتباطات راديويي با حضور نمايندگان کشورها و شرکتهاي مختلف در ژنو آغاز به کار کرد. در جريان اين کنفرانس طول موج 455 مگاهرتز تا 5 گيگاهرتز به ارتباطات بي سيم مختلف عريض اختصاص يافت. دراين کنفرانس کشورهاي اروپايي وايالات متحده از گسترش اينترنت بي سيم دفاع کردند، درحاليکه که کشورهاي در حال توسعه که از زيرساختهاي ارتباطي ضعيفي برخوردارند از گسترش اين پديده بيشتر سود مي برند. گفتني است که در جريان اين کنفرانس هرگونه ارتباطات بي سيم خارج از دامنه مذکور به منظور جلوگيري از تداخل با ارتباطات ماهواره اي ممنوع اعلام شد. گفتني است که اين کنفرانس تا فردا جمعه ادامه خواهد يافت. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۲۰ مراجعه امروز
۵۴۳۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : کدهاي بازويندوز NT انتقام جويي از لينوکس؟
تاريخ :۲۱/۴/۱۳۸۲
متن خبر:
در 30 ژوئن 2003 ، شرکت مايکروسافت مجموعه پشتيباني هاي خود را از ويندوز NT متوقف نمود . از اين تاريخ به بعد ديگر کاربران اين سيستم عامل قادر نخواهند بود تا مرورگر اينترنت خود را به روز نمايند و يا در صورت پيدا شدن حفره امنيتي جديد ، نسبت به دريافت اصلاحيه هاي آن از طريق سايت مايکروسافت اقدام نمايند . با توجه به اينکه هم اکنون تعداد اندکي از شرکتها از ويندوز NT بر روي کامپيوتر هاي حياتي شرکت خود بهره مي برند ، بنابراين پايان يافتن اين اين پشتيباني توسط مايکروسافت چندان باعث نارضايتي اين شرکتها نخواهد شد . با وجود آنکه ديگر ويندوز NT کنار گذاشته شده است و برنامه جديدي نيز براي کدهاي اين سيستم عامل ساخته نخواهد شد مايکروسافت با کدهاي آن چه خواهد کرد ؟! اکنون پس از صرف هزينه اي بالغ بر ميليونها دلار چه پيش خواهد آمد ؟ تصور اين مطلب که مايکروسافت کدهاي ويندوز خود را به آساني حذف نمايد قدري غير واقعي است . شايد برخي از شرکتهاي بزرگ توليد کننده نرم افزار مايل باشند تا فراموش کنند که چندي پيش سيستم عاملي به نام NT وجود داشته است -- و همگان را به استفاده از ويندوز سرور 2003 ترقيب نمايند -- اما قدر مسلم هزاران شرکت توسعه دهنده نرم افزار وجود دارند که مشتاقانه خواستار دريافت سورس کدهاي اين سيستم عامل هستند . بنابراين چرا مايکروسافت نبايد با ارائه سورس کدهاي ويندوز NT 4.0 به اين اشتياق پاسخ دهد و علاوه بر گام نهادن در دنياي کدهاي باز انتقامي سخت از لينوکس بگيرد ؟

منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۲۳ مراجعه امروز
۵۴۳۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : سه Patch جديد از مايکروسافت
تاريخ :۲۴/۴/۱۳۸۲
متن خبر:
شرکت مايکروسافت اعلام کرد که سه Patch (بسته نرم افزاري اصلاح کننده) جديد براي رفع اشکالات موجود در سيستم عامل ويندوزعرضه کرده است. يکي ازاشکالات بسيارمهم و2 اشکال ديگرمهم ارزيابي شده اند. اشکال بسيارمهم که تقريباً تمامي نسخه هاي ويندوز را تحت تأثيرقرار داده است به مهاجمان اجازه مي دهد تا کدهاي مورد نظر خود را در کامپيوتر کاربرپياده کنند. يکي از اشکالات مهم که به نسخه هاي XP، 2000 و NT ويندوز مربوط مي شوند از نوع موسوم به buffer Overun هستند و همان اشکال قبلي را ايجاد مي کنند. اشکال مهم ديگر نيز که تنها ويندوز 2000 را آلوده مي کند به مهاجمان اجازه مي دهد تا اولويت هاي خود را بر روي کامپيوتر کاربران پياده کنند. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۲۶ مراجعه امروز
۵۴۴۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آمريكايي‌ها به دنبال جذب متخصصان فناوري اطلاعات هندي هستند
تاريخ :۲۴/۴/۱۳۸۲
متن خبر:
24 تير 82 - ايرنا - تا سال ‌٢٠١٥ شركت‌هاي آمريكايي ‌٣/٣ ميليون فرصت شغلي را به خارج از آمريكا صادر خواهند كرد كه ‌٧٠ درصد اين مشاغل متعلق به متخصصان هندي خواهد بود. به گزارش خبرگزاري دانشجويان، نشريه <بوستون گلوب> از نگراني شديد محافل كارگري آمريكا از انتقال ده‌ها هزار فرصت شغلي در زمينه IT در دو سال اخير خبر داد. بنا بر اين گزارش، بانك‌هاي اصلي آمريكايي، شركت‌هاي سرمايه‌گذاري و بيمه نيز قصد دارند ‌٥٠٠ هزار فرصت شغلي ديگر را به خارج از آمريكا منتقل كنند. دليل اين امر تخصص يكسان و نرخ ارزان‌تر كارمندان وارداتي است؛ به طوري كه يك فارغ‌التحصيل رشته IT با درجه فوق ليسانس مديريت از هندوستان با ‌١٢ هزار دلار در سال در مشاغلي قابل استخدام است كه يك فارغ‌التحصيل همان رشته از دانشگاه‌ هاروارد با ‌١٠٢ هزار دلار استخدام مي‌شود. اولين شركت‌هايي كه به استخدام ارزان و با كيفيت بالا در زمينه IT در آسيا اقدام كردند IBM و مايكروسافت بودند. تحقيقات حاكي از افزايش اين روند است به طوري كه بسياري از شركت‌هاي آمريكايي حتي براي كارهايي نظير تحقيقات، آماده كردن برگه‌هاي مالياتي و سنجش بيمه، تحليل داده‌هاي آماري، تحليل Catscan و ده‌ها مورد ديگر، متخصصان هندي داراي اين مهارت‌ها را استخدام مي‌كنند. شركت سرمايه‌گذاران <جي پي مورگان چيپس> قصد دارد كه دفتر تحقيقاتي خود را با تعداد زيادي پرسنل در بمبئي ايجاد كند. ده‌ها شركت آمريكايي، بانك‌ها، شركت‌هاي سرمايه‌گذاري، موسسات تحقيقاتي و خطوط هوايي نظير <مورگان استنلي>، <گلدمن ساكس> و <سيتي گروپ> تصميم دارند كه دفاتري در هندوستان داير كنند. يك كارشناس هندي فارغ‌التحصيل رشته IT يا تجارت با كمتر از يك دهم حقوق يك فارغ‌التحصيل مشابه از نيويورك يا لس‌آنجلس استخدام مي‌شود. جنرال الكتريك نيز دپارتمان نرم‌افزار و برخي دفاتر ديگر خود را به هندوستان منتقل كرده است. مهندسان هندي قادرند حساس‌ترين تحليل مهندسي و علمي را بر روي هواپيماهاي جت جديد انجام دهند. برخي شركت‌ها مانند <امريكن اكسپرس> از افراد هندي براي تماس تلفني با مشتريان خود استفاده مي‌كنند. آنها اسامي خود را به آساني به آمريكايي تغيير داده و با گذراندن دوره‌هاي مخصوص نحوه صحبت و لهجه آمريكايي را مي‌آموزند. اداره مهاجرت آمريكا با اعطاي ويزاي 11 ماهه به صاحبان مشاغل اين اجازه را مي‌دهد كه متخصصان هندي را وارد آمريكا كرده و به استخدام شركت‌هاي بزرگ IT درآورند. شركت‌هاي آمريكايي در مقام پاسخگويي به اين اتهام هستند كه چرا فرصت‌هاي شغلي را از آمريكاييان گرفته و به هندي‌ها مي‌دهند. البته مساله تبعيض سني فاكتور مهمي را در اخراج شهروندان آمريكايي بازي مي‌كند؛ به طوري كه اخراج كارمندان بالاتر از ‌٤٠ سال، ده برابر بيشتر از درصد اخراج كارمندان زير ‌٤٠ سال است. با اين حال حتي افراد ‌٣٥ ساله هم با خطر اخراج شدن مواجه هستند. شركت عظيم <سان مايكروسيستم> در معرض اين اتهام واقع شده است. به اين صورت كه ادعا مي‌شود اين شركت دو هزار و پانصد نفر از كاركنان خود را اخراج كرده و آنان را با كاركنان جوان‌تر و ارزان‌تر از كشور هند تعويض كرده است. به اين ترتيب مرتكب تبعيض بر مبناي سن و مليت شده است؛ زيرا كه كاركنان هندي معمولا سر به ‌راهتر و ارزان‌تر هستند و در ضمن براي رؤساي خود مشكل ايجاد نمي‌كنند. تصور كلي بر اين است كه ادعاي شركت‌هاي فناوري مبني بر اين‌ كه آمريكا از كمبود نيروي كار لازم در زمينه مهندسي و برنامه‌نويسي كامپيوتر در مضيقه بوده و كاركنان وارداتي از تخصص بالاتري در اين زمينه‌ها برخوردار هستند كاملا بي‌اساس است و صرفا نرخ ارزان‌تر كارمندان وارداتي است كه سبب جذب آنها توسط شركت‌هاي آمريكايي مي‌شود.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۲۹ مراجعه امروز
۵۴۴۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : روبوت جديد MSN
تاريخ :۲۴/۴/۱۳۸۲
متن خبر:
• MSN روبوت جديد خود را آزمايش مي کند. اين روبوت جديد که MSNBOT نام دارد، تنها يک نسخه آزمايشي است و در حال حاضر تاثيري برنتايج جستجوي MSN ندارد


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۳۲ مراجعه امروز
۵۴۴۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : 81 درصد کامپيوترهاي جهان در معرض هک هستند
تاريخ :۲۴/۴/۱۳۸۲
متن خبر:
برطبق تحقيقات جديدي که توسط يک شرکت امنيتي بلژيکي انجام شده است بخش اعظم کامپيوتهاي جهان «اهداف بالقوه اي» براي هکرها محسوب مي شوند. شرکت ScanIT با پژوهش از بيش از صدهزار کاربربه اين نکته پي برده که 45 درصد از کامپيوترهاي اين کاربران به ميزان بالايي در معرض خطر قرار دارد و دستگاههاي 36 درصد ديگر نيز در مقياس متوسط در معرض خطر قرار دارد. کارشناسان معتقدند که حتي هکرهاي مبتدي نيزمي توانند به چنين سيستمهايي نفوذ کنند و در کارکردشان اختلال ايجاد کنند. گفتني است که برمبناي نتايج اين تحقيق کاربران چيني بيش ازهر کشور ديگر در معرض چنين حملاتي قرار دارند و آسيب پذيري اين کشور از تمام کشورها بالاتراست. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۳۵ مراجعه امروز
۵۴۵۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : Google هم بالاخره هک شد!
تاريخ :۱۳/۵/۱۳۸۲
متن خبر:
اين رو سريعا قبل از اينکه گوگل درستش کنه امتحان کنين:
۱. برين به Google.com
۲. بدون اينکه Enter را فشار دهيد تايپ کنيد: "
weapons of mass destruction" ۳. دگمه "I'm Feeling Lucky" را به جاي "Google
Search" کليک کنيد. ۴. به دقت پيغام خطا رو بخونين!
(از وبلاگ انوري)


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۳۸ مراجعه امروز
۵۴۵۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : ابزارمديريت مايکروسافت عرضه شد
تاريخ :۱۸/۶/۱۳۸۲
متن خبر:
محصول جديد که Microsoft Windows Rights Management Client 1.0 نام دارد از روز پنجشنبه به طور رايگان قابل بارگذاري است. خود مايکروسافت اين محصول را از تکنو لوژي هاي مر تبط به ويندوز سرور 2003 مي داند که به صاحبان مشاغل اجازه مي دهد تا اطلاعات تجاري خود مانند اسناد مالي را از دسترس مهاجمان و هکرها دور نگه دارند. اين محصول که با برنامه هاي مختلف مايکروسافت سازگار است مي تواند دسترسي اشخاص مخاطب به اطلاعات و سطح دسترسي آنان را مديريت کند. اين محصول بر روي ويندوز 2000 همراه با Service Pack 3 ، ويندوز 98 نگارش دوم، ويندوز ME، ويندوز سرور 2003 و ويندوز Xp قابل اجرا است. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۴۱ مراجعه امروز
۵۴۵۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : علمي طراحي اولين نرم افزار شبيه سازي مولکولي با برنامه جاوا در دنيا
تاريخ :۱۸/۶/۱۳۸۲
متن خبر:
قابليت اين نرم افزار نسبت به نرم افزار CHem3D از لحاظ سرعت و قابليتهاي ديگر برتري داشت و نزديک به 10 برابرسرعت شبيه سازي شده اين نرم افزاربيشتر است. وي درباره قابليتهاي اين نرم افزار گفت: مولکول را به حالت پايدار بدست مي آورد و آنرا به ما نشان مي دهد. همچنين نشان دادن خواص ترموديناميکي، نشان دادن حرکت مولکولي در دماهاي مختلف و نمايش حالتهاي مختلف مولکول از قابليتهاي ديگر اين نرم افزاراست. وي گفت: مهمترين قابليت اين نرم افزار اين است که با برنامه جاوا نوشته شده و بر روي هر سيستمي قابل اجرا است وسعت بالاي اين برنامه برتري آن را نشان مي دهد. منبع. :باشگاه خبرنگاران جوان


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۴۴ مراجعه امروز
۵۴۶۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : گوشي Orange با استفاده از تکنولوژي مايکروسافت
تاريخ :۱۸/۶/۱۳۸۲
متن خبر:
قراراست تا اين گوشي تا اواخرماه سپتامبر به بازارعرضه شود. بنابراعلام برخي منابع نرم افزارهاي ساخت مايکروسافت بر روي گوشي قابل اجرا خواهد بود. اين گوشي همچنين قابليت دسترسي بي سيم به اينترنت را نيز داراست. گفتني است که Orange چند سالي است که همکاري نزديکي با مايکروسافت در زمينه ساخت تلفن هاي همراه هوشمند دارد. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۴۷ مراجعه امروز
۵۴۶۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : همايش استفاده از فن آوري اطلاعات در فرآيندهاي شهرسازي امروز برگزار شد.
تاريخ :۱۸/۶/۱۳۸۲
متن خبر:
دراين همايش که با حضور استانداران، شهرداران، معاونان وزارت خانه هاي مرتبط با شهرسازي و فناوري اطلاعات ، متخصصان و مسئولان سازمان هاي کامپيوتري تبادل تجربيات دربه کارگيري ابزار فناوري اطلاعات در مديريت شهري و جايگاه مديريت شهري مبتني بر IT در دولت الکترونيک نيز مورد بررسي قرار مي گيرد. براساس اين گزارش، در مراسم افتتاحيه اين همايش که با حمايت شوراي اطلاع رساني انجمن شرکت هاي انفورماتيک و توسط شرکت مارليک کامپيوتر بر گزار مي شود مهندس نصرالله جهانگرد، نماينده ويژه رئيس جمهو ر و دبير شوراي عالي اطلاع رساني و دکتر صديقي مدير کل امور پژوهشي سازمان مديريت و برنامه ريزي سخنراني نمودند. ارائه مقالات بر گز يده، تبادل نظر مديران شهرداري ها، کار شناسان شهر سازي و مديران شرکت هاي انفورماتيک در حرکت به سمت شهرالکترونيکي وبرگزاري کارگاه تخصصي فناوري اطلاعات در فرآيندهاي شهرسازي و آ شنايي با مديريت شهري « شهرآذين» از ديگر برنامه هاي اين همايش بود. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۵۳ مراجعه امروز
۵۴۶۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : جاسوسي از طريق فايلهاي کراک
تاريخ :۱۲/۸/۱۳۸۲
متن خبر:
بر طبق برخي گزارشها فايلهاي کراک چند بازي مشهور که طي چند روز اخير از طريق نرم افزا مشهور کازا که براي به اشتراک گذاري فايل و برنامه در اينترنت مورد استفاده قرار مي گيرد در بين کاربران رد و بدل شده است حاوي يک برنامه خرابکارانه است. ظاهراً اين فايلها برنامه هاي کراک بازيهاي مشهوري مانند fifa2003 و battle field 1942 هستند، اما باز کردن آنها برنامه اي مزاحم با نام Spybot.gen بر روي کامپيوتر شخصي نصب و اجرا مي شود که خود را بر روي ديسک سخت کامپيوتر کاربر نصب مي کند و به خواندن فايلهاي Word و ارسال آنها براي نفوذگر مي پردازد. اين برنامه همچنين اطلاعات کليدي مانند شماره کارت هاي اعتباري و ديگر جزئيات شخصي افراد را ذخيره مي کند. اين برنامه حتي مي تواند به کامپيوتر دستور دهد تا ديسک گردان خود را باز و بسته کند. گفتني است که تمام اين کارها بدون آگاهي کاربر انجام مي شود. بر طبق اعلام شرکتهاي ضدويروس اين برنامه ظرف چهارماه اخير 20 هزار کامپيوتر را در سراسر جهان آلوده کرده است و مشخص نيست که اين ابزار جاسوسي در حال حاضر در چند کامپيوتر در حال اجراست. گفتني است ويروس مذکور که در آمريکا توليد شده در حال سرايت به کشورهاي اروپايي است. برخي شرکتهاي ضدويروس از جمله web sense فيلترهايي را براي مقابله با اين برنامه خرابکارانه عرضه کرده اند. منبع. :رويتر


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۵۶ مراجعه امروز
۵۴۷۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : نسخه بروز شده QuickTime تحت جاوا عرضه شد
تاريخ :۱۲/۸/۱۳۸۲
متن خبر:
شركت اپل كامپيوتر، QuickTime تحت جاوا را بروزرسانى كرده است. بروز رسانى مزبور مجموعه اى از Cross-Platform API هايى را ارائه مىكند كه توسعه دهندگان جاوا امكان ايجاد مالتى مديا از جمله افزودن صوت و صوت- تصوير بر برنامه هاى كاربردى و اپلت ها را خواهند داشت. نسخه بروز شده شامل پشتيبانى از بكارگيرى QuickTime 6.4 يا با J2 1.4.1 يا با J2SE 1.3.1 مىباشد. نسخه پيشين QTJava، تنها ويندوز و نه J2ESE 1.4.1 را پشتيبانى مى‌كرد. در دفترچه راهنماى آن اپل اظهار مى‌كند: به سبب بسيارى از ويژگى هاى QTJava كه در حال حاضر در جاواى استاندارد موجود مى‌باشد، چنين اصلاح و ساده سازى از معمارى QTJava ضرورى مى‌نمايد. هر فردى كه از QuickTime 6.4 استفاده مىكند به جهت حفظ سازگارى برنامه كاربردى بايد نسخه بروز رسانى را نصب كند. پشتيبانى نسخه 1.4.1 در QuickTime تحت جاوا بعنوان بخشى از QuickTime 6.4 تحت ويندوز و Mac OS X 10.3 ارائه مىشود. پشتيبانى QTJava با J2SE 1.4.1 تحت Mac OS X 10.2 از طريق بروزرسانى نرم افزار در دسترس مى‌باشد. منبع. :IRITN


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۶۲ مراجعه امروز
۵۴۷۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : Worldcom مجدداً باز مي گردد
تاريخ :۱۲/۸/۱۳۸۲
متن خبر:
شرکت Worldcom که سال گذشته به دنبال يک رسوايي ورشکست شده بود موافقت دادگاهي در آمريکا را براي سازماندهي مجدد خود جلب کرد. مايکل کاپلاس رئيس اين شرکت اعلام کرد که Worldcom که در زمينه ساخت و عرضهMCI (تجهيزات صوتي مناسب براي سيستم عامل ويندوز) فعال بوده است، براي کسب سهم بيشتري از بازار مجدداً تلاشهاي خود را از سر مي گيرد و اين تلاشها در بازار تجهيزات کامپيوتري و ارتباطات تلفني و مخابراتي بيشتر خواهد بود. در همين راستا اين شرکت هيأت مديره و تيم اجرايي جديدي را به خدمت گرفته است تا از خدمات ناشي از کلاهبرداري اعضاي قبلي هيات مديره رهايي يابد. گفتني است که شرکت Worldcom سال گذشته با 5/3 ميليارد دلار بدهي ورشکست شد. منبع. :Pcworld.com


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۶۵ مراجعه امروز
۵۴۸۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : تغيير در قسمت Enterprise ياهو
تاريخ :۱۲/۸/۱۳۸۲
متن خبر:
شرکت ياهو اعلام کرد که ايجاد تغيير و تقسيم گروه نرم افزاري خود که به توليد برنامه هاي کاربردي براي شرکتهاي بزرگ مي پرداختند را آغاز کرده است. شرکت ياهو اين اقدام را برنامه اي در جهت ايجاد بخش جديدي اعلام کرد که توليد کليه محصولات مربوط به شرکتهاي بزرگ تجاري در آن صورت بگيرد. اين شرکت اينترنتي در اولين قدم تعداد نامعلومي از کارکنان بخش Enterprise Solution را اخراج کرد. گفتني است که اين بخش دو سال پيش شکل گرفته بود و وظيفه آن فروش محصولات تجاري ياهو و بازاريابي براي آنها بود. عمده فعاليت اين بخش ساخت و عرضه سرويس پيام رسان تجاري ياهو بوده که امکانات بسيار پيشرفته اي نسبت به سرويس مرسوم ياهو داشته است. منبع. :eweek.com


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۲۵ مراجعه امروز
۵۵۴۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : موتور جستجوي جديد آمازون موثر واقع شد
تاريخ :۱۲/۸/۱۳۸۲
متن خبر:
بر طبق اعلام مسئولان سايت آمازون تسهيلات جديد جستجو فروش کتاب در سايت آمازون را تا 9 درصد افزايش داده است. به تازگي شرکت آمازون تسيهلاتي را ايجاد کرده که علاوه بر جستجو در عناوين کتابها و نام نويسندگان آنها مي توان محتويات کتابها را نيز جستجو کرد. تعداد کتابهاي قابل جستجو 120 هزار جلد است. در پنج روز پس از راه اندازي سرويس جديد ميزان فروش کتابهاي سايت آمازون تا 9 درصد افزايش يافت. مقامات اين شرکت ابراز اميدواري کرده اند که اين روند همچنان ادامه يابد. منبع. :Internet magazine.com


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۲۸ مراجعه امروز
۵۵۴۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : تمهيدات امنيتي سيمانتک مشکل آفريد
تاريخ :۱۲/۸/۱۳۸۲
متن خبر:
شرکت سيمانتک سازنده نرم افزارهاي معروف ضدويروس اخيراً ويژگي جديد را به ضد ويروس سال 2004 خود افزوده تا مانع کپي برداري غيرقانوني از روي آن شود. بدين شکل که کاربران بايد پس از خريد محصولات اين شرکت يک کاغذ فعال سازي را به همين نصب برنامه و به هنگام آغاز به کار کامپيوتر خود وارد نمايند و کد مذکور بايد از وب سايت اين شرکت دريافت شود. سيمانتک روز پنجشنبه اعلام کرد که استفاده از اين روش مشکلاتي را ايجاد مي کند و شرکت در حال تحقيق براي حل اين مشکل است. مشکل ايجاد شده آن است که پس از نصب ضد ويروسي جديد و فعال ساختن آن با استفاده از کد فعال سازي پس از هر بار روشن کردن کامپيوتر، تا مدتي ضدويروس کار مي کند. اما پس از چند بار روشن کردن کامپيوتر پيامي با اين مضمون ظاهر مي شود که مدت زمان استفاده از نسخه آزمايشي به پايان رسيده است. و پس از آن استفاده از ضدويروس جديد ناممکن است. کارشناسان سيمانتک فعلاً در حال بررسي مشکل هستند. منبع. :Pcworld.Com


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۳۱ مراجعه امروز
۵۵۴۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : بلوجک و ويروس هاي جديد
تاريخ :۲۸/۸/۱۳۸۲
متن خبر:
کاربران بدانديش مي توانند از طريق بلوجک ، دست به انتشار ويروس روي تلفن همراه بزنند. کارشناسان شرکت ضدويروس sophos.com با اعلام خطر نسبت به شيوع بلوجک که از طريق بلوتوث SMS ناخواسته به وسيله تلفن همراه کاربر قرباني دريافت مي شود، گفتند با اين روش به آساني مي توان ويروس ها را وارد ابزارهاي داراي بلوتوث کرد و آن را از کار انداخت. کلمه بلوجک از ترکيب 2کلمه Bluetooth و hijacked ساخته شده که به وسيله آن صاحبان تلفن همراه داراي بلوتوث ، به طور ناشناس ، پيام ناخواسته به ساير ابزار بلوتوث در شعاع کمتر از 30فوتي (حدود 10متر) مي فرستند. گراهام کلولي از مشاوران ارشد شرکت ضدويروس sophos مي گويد: بلوجک مي تواند يک شوک براي کاربر ناوارد تلقي شود که در حالت توسعه يافته مي تواند از محتواي اسپم خارج شده و به صورت ويروس تلفن همراه قرباني را از کار بيندازد و يا رايانه يا PDA قرباني را تخريب کند. پيام طبقه بندي نشده مي تواند مستقيم سيستم عامل را مورد هدف قرار دهد و يا با ارسال يک دستور خودکار اطلاعات شخصي را پاک کند. حتي شايد روزي ويروس روي بلوتوث بتواند ديتاهاي بيزينس افراد را upload کند که آن وقت موضوع کاملا مصيبت بار مي شود. به گفته کلولي ، به شوخي ارسال کنندگان مي گويند پيامشان ويروس دارد؛ اما در حال حاضر اين طور نيست ؛ ولي مي تواند اين طور شود! از آنجايي هم که موضوع ارسال غيرقانوني شناخته نمي شود، توسعه وب سايت هايي در اين زمينه به گفته وي مي تواند خطرآفرين باشد. منبع. :جام جم


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۳۴ مراجعه امروز
۵۵۵۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : SCO شرکتهاي بيشتري را به دادگاه مي کشاند
تاريخ :۲۸/۸/۱۳۸۲
متن خبر:
گروه Sco که مدعي است با ابداع کدهاي يونيکس حقوق مالکيت معنوي سيتسم عامل لينوکس را نيز در اختيار دارد ديروز اعلام کرد که نبرد حقوقي خود با شرکتهاي مختلفي که حق Copyright اين شرکت را نپردازند ادامه خواهد داد. دارل مک برايد مدير اين شرکت اعلام کرد با يک موسسه حقوقي به توافق رسيده تا علاوه بر پيگيري شکايت آن برضد IBM، شکايت Sco برضد ديگر شرکتهاي نقض کننده حقوق آن را بررسي نمايند. Sco اعلام کرده که ظرف چند ماه آينده دادخواست هاي فراواني را برضد شرکتهاي مختلفي که نسبت به ساخت و عرضه لينوکس هاي اختصاصي خود اقدام کنند، به جريان خواهد انداخت. در حال حاضر منازعه حقوقي 3 ميليارد دلاري IBM و Sco برسر همين مساله در جريان است و اين شرکت مدعي است که IBM بدون اجازه آن کدهاي يونيکس تحت کنترل Sco را در نسخه ساخت خود از لينوکس به کار برده است. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۴۰ مراجعه امروز
۵۵۵۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : گسترش شبکه بي سيم AT&T
تاريخ :۲۸/۸/۱۳۸۲
متن خبر:
شرکت AT&T که به ارائه سرويس هاي بي سيم مخابراتي در آمريکا مي پردازد اعلام کرد که خدمات ارائه شده در شبکه EDGE خود را ارتقاء خواهد داد تا سرعت انتقال داده در شبکه خود را نسبت به کليه رقبا افزايش دهد. تغييرات ايجاد شده در شبکه EDGE به کاربران اجازه مي دهد تا اطلاعات را با سرعتي بين 100 کليوبيت در ثانيه و 130 کيلوبيت در ثانيه منتقل نمايند. اين رقم حداقل دو برابر سريع تر از سرعت انتقال داده در ديگر شبکه هاي مخابراتي بي سيم آمريکاست. رئيس AT&T ضمن خرسندي از تحول حاصل شده در اين شرکت مدعي شد که موانع موجود در اين حوزه از پيش رو برداشته شده و در آينده سرعت انتقال اطلاعات به صورت بي سيم باز هم افزايش خواهد يافت. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۴۳ مراجعه امروز
۵۵۵۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : Sun تراشه هاي AMD را در سرورهاي خود به کار مي برد
تاريخ :۲۸/۸/۱۳۸۲
متن خبر:
شرکت سان روز دوشنبه اعلام کرد که در سرورهاي جديد خود از تراشه هاي پيشرفته شرکت AMD استفاده خواهد کرد. سان اعلام کرده که از عرضه سرورهاي پيشرفته مجهز به تراشه هاي خود و نسخه سولاريس سيستم عامل يونيکس خودداري خواهد کرد و از سيستم هاي سخت افزاري ارزان قيمت تر که در آنها نرم افزارهاي ارزان قيمت تري نيز به کار روند استفاده خواهد کرد. مقامات اين شرکت عامل اين مسأله را کاهش ده درصدي سهم خود از بازار کامپيوترهاي سرور عنوان کرد. اسکات مک نيلي رئيس سان به حاضران در کنفرانس Comdex گفت که سرورهاي جديد اين شرکت که مجهز به پردازنده هاي 64بيتي Opteron ساخت AMD هستند همراه با نرم افزارهاي ساخت سولاريس و همچنين سيستم عامل لينوکس به زودي عرضه خواهد شد. سيستم عامل OpenSource لينوکس جدي ترين رقيب محصولات مايکروسافت محسوب مي شود. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۴۶ مراجعه امروز
۵۵۶۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : ياهو مايل به سرمايه گذاري در ايران نيست
تاريخ :۲۸/۸/۱۳۸۲
متن خبر:
«محسن الصفي»، طراح سايت «ياهو براي اصفهان» گفت: به رغم مکاتبه متخصصان ايراني با مديران سايت ياهو، به دلايل سياسي و عدم وجود تجارت الکترونيک در ايران ،آنها تمايلي به راه‌اندازي اين سايت به زبان فارسي ندارند. الصفي ، مدير عامل شرکت وبسازان نقش جهان اصفهان ، روز شنبه افزود: يکي از بزرگترين سايت‌هاي اينترنتي سايت ياهو در دنيا است که براي اکثر زبان‌ها و مليت‌ها سايتي طراحي کرده و در اختيار آنها قرار داده است ولي تا کنون، اين سايت به زبان فارسي طراحي نشده است . «الصفي» گفت : عوامل شبکه وبسازان نقش جهان ،بعد از عدم پذيرش سايت ياهو در طراحي اين سايت به زبان فارسي ، با در جريان گذاشتن آنها، سايتي را با «گرافيکي مستقل از سايت ياهو طراحي کردند.ياهو براي اصفهان به آدرس www.yahoo4esf.com طراحي شده است. وي تاکيد کرد: هدف اصلي ما در طراحي اين سايت، اطلاع‌رساني بوده است و با توجه به اينکه تنها حدود 6 ماه است که اين سايت راه‌اندازي شده، توانسته ارتباط بسيار خوبي با مخاطبان ايراني در سراسر دنيا داشته باشد. الصفي ادامه داد: رسانه‌هاي جمعي کشور با اطلاع‌رساني صحيح و دولت و دانشگاه‌ها با حمايت از طراحان سايت‌هاي فارسي زبان، مي‌توانند فرهنگ استفاده صحيح از اينترنت را در جامعه ايجاد کنند. وي تصريح کرد : نبود تجارت الکترونيک در ايران ، تنها دليل غيرفعال بودن بخش تجارت اين سايت است چرا که سياست بانک‌هاي ايران با بانک‌هاي خارج از کشور متفاوت است و کارت‌هاي اعتباري که در حال حاضر در کشور موجود است از درجه اعتبار برخوردار نيست. طراح سايت «ياهو براي اصفهان» گفت: تا زماني که کارت اعتباري به معناي واقعي آن وجود نداشته باشد، بحث تجارت الکترونيک در ايران بي‌فايده است. سايت «ياهو براي اصفهان» داراي بخش‌هاي متنوعي از جمله سرويس ايميل فارسي ، اخبار، فرهنگ و هنر، مذهب، راهنماي سايت‌هاي فارسي، اطلاعات و آمار ايران ،اقتصاد ،آموزش نرم‌افزارها، روزنامه‌ها وموارد ديگر است و روزانه بين 10 تا40 هزار ديدار از آن مي‌شود. منبع. :It iran


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۴۹ مراجعه امروز
۵۵۶۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : وب سايت بانکي جعلي در سنگاپور
تاريخ :۱۰/۱۰/۱۳۸۲
متن خبر:
دولت هنگ کنگ در تلاش است تا يک وب سايت جعلي را که تلاش مي کند خود را به وب سايت بانکDBS سنگاپور نشان دهد، تعطيل نمايد. اين وب سايت مدعي است که نمايندگي انجام خدمات بانکي Online اين بانک را بر عهده دارد. اين چهارمين باري است که يک وب سايت جعلي در هنگ کنگ ايجاد مي شود و خود را نماينده يک بانک معتبر در هنگ کنگ معرفي مي کند. سايت مذکور با آدرس www.db shk.net که ظاهري آراسته دارد، از لوگو و اسم اين بانک استفاده مي کند و از کاربران مي خواهد تا شماره کاربري و کلمه عبور خود را وارد کنند تا بتوانند به اطلاعات حسابهاي بانکي خود دسترسي يابند. بانک DBS اعلام کرده که هيچ رابطه اي با اين سايت ندارد و هنوز هم گزارشي مبتني بر سرقت مالي از طريق اين سايت دريافت نکرده است. در حال حاضر مسئولان بانک با همکاري پليس هنگ کنگ به دنبال پيدا کردن عاملان اين کلاهبرداري هستند. مقامات پليس پس از تحقيقات اوليه اعلام کردند که اين سايت از خارج از هنگ کنگ اداره مي شود. منبع. :رويتر


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۵۲ مراجعه امروز
۵۵۶۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : فروش پررونق اينترنتي در ايام کريسمس
تاريخ :۱۰/۱۰/۱۳۸۲
متن خبر:
صاحبان سايتهاي فروش Online در اينترنت از درآمد بالايي که طي چند روز اخير کسب کرده اند بسيار خرسند هستند. به عنوان مثال سايت آمازون تنها در يک روز از طريق فروش Online بيش از دو ميليون دلار درآمد کسب کرده است. عليرغم آمارهاي وزارت بازرگاني آمريکا مبتني بر وضعيت نامناسب اقتصادي اين کشور در ماههاي دسامبر و نوامبر فروش سايت آمازون نشان مي دهد که پيش بيني هاي قديمي صحيح بوده و امسال در زمينه فروش هاي اينترنتي Online رکورد ساز خواهد بود. شرکت آمازون کريسمس امسال را از نظر ميزان استقبال عالي توصيف کرد و گزارش کرد که 1/2 ميليون کالاي مختلف را تنها در يک روز به فروش رسانده است. اين بدان معناست که اين سايت در هر ثانيه 24 کالاي مختلف را به فروش رسانده است. علاوه بر آمازون ديگر سايتهاي فروش Online نيز با استقبال فراواني روبرو شده اند و تخمين زده مي شود کل رقم فروش Online طي 25 روز اخير،13ميليارد دلار باشد که اين به غير از رقم خريد بليط هواپيماست. عدد مذکور با مدت مشابه سال قبل 46 درصد افزايش يافته است. منبع. :zdnet.com


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۵۵ مراجعه امروز
۵۵۷۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : سايت اطلاع رساني و تبليغات انتخابات راه اندازي مي شود
تاريخ :۱۰/۱۰/۱۳۸۲
متن خبر:
به منظور افزايش آگاهي ها و اطلاعات عموم مردم، سايت اطلاع رساني و تبليغات انتخابات، راه اندازي مي شود. به گزارش باشگاه اينترنتي سيب، همزمان با نزديک شدن به زمان برگزاري هفتمين دوره انتخابات مجلس شوراي اسلامي و لزوم مشارکت تمامي اقشار جامعه در جهت برگزاري هر چه بهتر و قدرتمتندتر اين امر کانون هنري آفتاب براي اولين بار اقدام به ايجاد سايت اطلاع رساني اخبار و فعاليتهاي انتخاباتي در جهت معرفي گروهها، احزاب و نامزدها و همچنين وقايع مربوطه نموده است. هدف از ايجاد اين وب سايت، تسيهل در دسترسي کاربران اينترنتي به اطلاعات لازم و فراهم نمودن امکانات بيشتر براي شناسايي بهتر و انتخاب مناسب تر در گزينش افراد، معيارها و برنامه هاي معرفي شده بوده است. در آخر بايد يادآور شد اين سايت از روز شنبه 13ديماه از طريق آدرسهاي www.entekhab.org و www.entekhabat.com قابل دسترسي خواهد بود. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۵۸ مراجعه امروز
۵۵۷۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : اولين کنفرانس بين المللي فناوري اطلاعات و دانش گشايش يافت
تاريخ :۱۰/۱۰/۱۳۸۲
متن خبر:
به گزارش باشگاه اينترنتي سيب در مراسم افتتاحيه اين کنفرانس دکتر فهيمي فر رييس کنفرانس و رياست دانشگاه صنعتي اميرکبير گفت :رويکرد دانش گرا و دانايي محور فناوري اطلاعات و ارتباطات عرصه جديدي است که ايرانيان مي توانند با تکيه بر توانايي قديم، ابزارهاي فناوري جديد را به خدمت بگيرند و فاصله زياد کشور را با قافله جهاني کاهش دهد. در ادامه دکتر اکبري دبير کنفرانس با بيان اينکه تاکنون کنفرانس علمي و تخصصي در زمينه IT در کشور وجود نداشته اظهار داشت. دانشکده مهندس کامپيوتر و IT دانشگاه اميرکبير بر آن شد تا با توجه به پيش قدمي در ارائه دوره هاي IT در مقاطع مختلف سنگ بناي کنفرانس را پي ريزي کند. در آخر دکتر يوشوشو نماينده قائم مقام مسئول برنامه توسعه سازمان ملل متحد (UNDP) نيز به ارائه سخنراني پرداخت. گفتني است در طول سه روز برگزاري کنفرانس مقالات متعددي طي نشست هاي مختلف برگزار خواهد شد که نشست تجارت الکترونيکي، آموزش الکترونيکي و ارتباطات و فناوري اطلاعات، خدمات الکترونيکي، تجارت الکترونيک و پردازش و شناسايي گفتار در روز اول بر گزار مي شود. منبع. :باشگاه سيب


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۶۱ مراجعه امروز
۵۵۷۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : مايكروسافت درباره‌ى لينوكس لب مى‌گشايد
تاريخ :۲۴/۳/۱۳۸۳
متن خبر:
24 خرداد 1383 - همکاران سیستم - مايكروسافت همايش‌هاى خود را براى «كمك به مشتريان براى درك بهتر بحث‌هاى مرتبط با مايكروسافت و نرم افزارهاى Open Source» آغاز كرده است كه همايش دهم ژوئن (بيست و يكم خردادماه) در لندن، از آن جمله بود. يكى از تحليل گران به نام Philip Dawson از Meta Group، اين بحث را در ميزگرد به ميان كشيده است كه هزينه‌هاى پشتيبانى، آموزش و يكپارچه سازى بالاتر به رايگان بودن لينوكس مى‌ارزد. او همچنين به رشد بلوغ لينوكس و به چنگ آوردن بازار سنتى يونيكس توسط هر دو رقيب اشاره كرده است. او گفته است: «از آن جايى كه فروشندگان كاركردهاى بيشترى را به نرم افزار مى‌افزايند، ديگر بازار چند ميليونى سازمان‌ها ميدان جنگ سيستم عامل نيست، بلكه عرصه نبرد امكانات است». بنا بر ادعاى Nick McGrath، رييس استراتژى پلاتفورم مايكروسافت انگلستان، پژوهش‌گران مستقل دريافته اند كه به طور مثال، ويندوز 2003 ، ارزان‌تر از Red Hat يا SuSE است. او هچنين اين افسانه كه لينوكس رايگان است را به شدت مورد حمله قرار داده است. وى همچنين اشاره كرده است كه لينوكس قدرت‌مند است. اما ويندور محيط فراگيرترى دارد. Nick Barely ، مدير كسب و كار و بازاريابى مايكروسافت انگلستان در همايش يادشده، گفته است اين يك نگاه جنجالى است كه نزاع ميان مايكروسافت و لينوكس را، چالش ميان دنياى رايگان و يك انحصارگر بزرگ به رهبرى ثروت‌مندترين مرد جهان مى‌دانند. وى اين نكته را بيان كرده است كه جهاد فناورى ميان رقباى سيستم عامل، موجب غفلت از اين موضوع شده است كه مديران ارشد سازمان‌ها چندان دل خوشى از فناورى اطلاعات ندارند و بايد ارتباط ميان فناورى اطلاعات و كسب و كار را تقويت كرد. در بحث‌هاى اين همايش، موافقان و مخالفان مايكروسافت حضور داشتند. جالب است كه Nick Barely روزى خود طرف دار لينوكس در اوراكل بوده است. اما اكنون اعتراف كرده است كه سياست‌هاى Licensing مايكروسافت براى مشتريان سودمند شده است. مايكروسافت بر اين باور است كه اگر مشتريان فريب خورده‌ى افسانه‌ى Open Source از حقايق با خبر شوند، مى‌توانند همچون اين مايكروسافت بيانديشند


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۶۴ مراجعه امروز
۵۵۸۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : تلاش مايكروسافت براى محافظت از كاربران
تاريخ :۲۴/۳/۱۳۸۳
متن خبر:
24 خرداد 1383 - همکاران سیستم - شركت مايكروسافت، در نشستى كه طى روزهاى گذشته برگزار شده، فناورى‌هايى جديدى را معرفى كرده كه دربرگيرنده‌ى راه‌هاى نوينى براى محافظت از كاربران در برابر Wormها و Spamهاى شبكه خواهد بود. در اين جلسه چندين فناورى‌ جديد شركت، نشان داده شده است. ابزارى كه اطلاعات اضافى به تصاوير ديجيتالى افزوده تا تصويرها، ساده‌تر هويدا شوند، فناورى به خصوصى كه امكان استفاده از تصاوير بزرگ را در ويندوز ساده كرده و نيز سيستمى كه با استفاده از آن مى‌توان از چند داستان با موضوع يكسان، مطلب خلاصه دريافت كرد، از فناورى‌هاى نشان داده شده در اين جلسه بوده‌اند. هلن ونگ، يكى از پژوهش‌گران شركت مايكروسافت در جلسه‌ى يادشده، در باره‌ى جرييات اين طرح توضيح داده و آن را "فناورى محافظ" ناميده است. هلن ونگ انگيزه‌ى ارايه‌ى فناورى‌هاى نوين شركت را، محافظت از رايانه‌ها در فاصله‌ى زمانى آغاز فعاليت هر يك از مخرب‌هاى نرم‌افزارى و زمان آماده شدن patchهاى آنها معرفى كرده است. اين در حالى‌ست كه مدير ارشد اجرايى مايكروسافت تاكيد كرده كه اين فناورى هنوز در مرحله‌ى كلام بوده و اجرا نشده، اما تاكنون جزيياتى در اين باره ارايه گرديده است. هلن ونگ در ادامه توضيح داده كه اين محافظ، برنامه‌ى به خصوصى از firewall بوده كه با اطلاعات مربوط به آسيب پذيرى‌هاى ويژه‌يى روزآمد شده است. اين برنامه با كنترل ترافيك از رايانه محافظت كرده و در صورت مشاهده‌ى ترافيك مشكوك، وارد عمل خواهد شد. از آن‌جايى كه Update سيستم‌ها نياز به تست دارد، كاربران هميشه در استفاده از patchها، به كندى عمل مى‌كنند. اما محافظ مايكروسافت مشكل ساز نبوده و به سادگى تست مى‌شود و نيز قابل برگشت خواهد بود. امكانات اين برنامه به گونه‌يى‌ست كه برخلاف patch نرم افزارها، محافظ به خودى خود نصب خواهد شد. هلن ونگ هم‌چنين گفته است كه اين طرح با استقبال بى نظير گروه‌ محصول مايكروسافت روبه‌رو شده، اما هنوز برنامه‌يى ملموس براى اجراى اين كار ارايه نشده است. مايكروسافت هم اكنون بر روى Longhorn، نسخه‌ى جديد ويندوز، SQL Server و Windows Server ، كار مى‌كند. مبارزه با spam ، يكى ديگر از اولويت‌هاى مايكروسافت است. در حالى كه تاكيد شركت بر از بين بردن spam در ايميل‌هاست، گروهى از پژوهش‌گران مايكروسافت برنامه‌يى تشكيل شده از تحليل‌هاى آمارى اريه داده‌اند كه نشان مى‌دهد شركت چه چيزى را spam وب، مى‌نامد. دنيس فترلى، يكى از پژوهش‌گران فعال در برنامه‌ى بالا، گفته است كه spam وب، صفحه‌يست كه موجب انحراف موتور جست‌وجو مى‌شود. بيشتر spamهاى وب سعى مى‌كنند به كاربران، برنامه‌ى نامشروع، نرم‌افزار و خدمات مالى بفروشند و در رده‌هاى بالاى جست‌وجو قرار بگيرند. براى شناسايى Spamهاى وب، مى‌توان تكنيك‌هاى فرد ارسال كننده‌ى آن را به عنوان سرنخ دنبال كرد. مايكروسافت نكاتى مانند، تعداد نام‌هاى دامينى كه به وب سايت مشابه اشاره كرده، طول نام دامين و تعداد لينك‌هايى كه در صفحه‌ى وب به يك سايت ختم مى‌شوند را دنبال مى‌كند. با تحليل اطلاعات به‌دست آمده، spamهاى وب شناخته شده و در نهايت به كلى از بين خواهند رفت و يا به رده‌هاى پايين تر جست و جو فرستاده خواهند شد. صفحه‌هاى spam وب، براى گروه MSN مايكروسافت مفيد خواهد بود، زيرا آنان بر روى موتور جست وجوى جديدى كار مى‌كنند و در آستانه‌ى گشودن درى از رقابت با گوگل هستند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۶۷ مراجعه امروز
۵۵۸۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : علايم جديد از يک تهديد جدی در اينترنت
تاريخ :۲۴/۳/۱۳۸۳
متن خبر:
24 خرداد 1383 - بخش خبر آی تی ایران - سيستم هشدار مجازى آمريكا هفته گذشته بازهم به صدا درآمد. اين سيستم تنها زمانى وارد عمل شده و به‌كاربران هشدار مى‌دهد كه علائم گسترش جدى يك تهديد در اينترنت احساس شود. مقامات امنيت داخلى آمريكا هفته گذشته با استفاده از سيستم هشدار مجازى كاربران را نسبت به وجود آسيب‌هاى امنيتى جديد در نرم‌افزارهاى اوراكل 11 و همچنين E-Business 11i كه هر دو متعلق به شركت اوراكل هستند، آگاه كردند. در اين هشدار به كاربران گفته شده كه هكرها با استفاده از ضعف‌هاى موجود در نرم‌افزارهايى كه رفع اشكال نشده‌اند، مى‌‌توانند به كاربران اين نرم‌افزارها آسيب وارد كنند. اين در حالى است كه شركت اوراكل نيز در هشدار مذكور وصله‌هاى امنيتى مورد نياز كاربران را براى Download و رفع اشكال فراهم كرده بود.استفان كاست كارشناس امنيتى كه ضعف‌هاى اوراكل را شناسايى كرده مى‌گويد: پايگاه‌هاى داده اوراكل مساله دارند و آماده پذيرش هر نوع حمله‌اى هستند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۷۰ مراجعه امروز
۵۵۸۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : نقش‌ شبكه‌هاى‌ الكترونى‌ در تعميق‌ فعاليت‌هاى‌ سازمان‌هاى‌ غيردولتى‌
تاريخ :۲۴/۳/۱۳۸۳
متن خبر:
24 خرداد 1383 - ایران و جامعه اطلاعاتی - كاربرد اينترنت‌ امكانات‌ قدرتمندى‌ در اختيار جامعه‌ مدنى‌ قرار داده‌ است‌ و در اين‌ ميان ‌سازمان‌هاى‌ غيردولتى‌ ايرانى‌ به‌ تدريج‌ از فرصت‌هايى‌ كه‌ اينترنت‌ در اختيار آن‌ها گذاشته‌است‌، استفاده‌ مى‌برند. در اين‌ ميان‌، «شبكه‌هاى‌ الكترونى» ابزار نيرومندى‌ براى‌ گسترش‌ وتعميق‌ فعاليت‌هاى‌ سازمان‌هاى‌ غيردولتى‌ به‌ حساب‌ مى‌آيند و بايد پذيرفت‌ كه‌ هنوزسازمان‌هاى‌ غيردولتى‌ از مزاياى‌ شبكه‌سازى‌ استفاده‌ چندانى‌ نكرده‌اند، ولى‌ روند تحول ‌فعاليت‌ سازمان‌هاى‌ غيردولتى‌ در طول‌ سال‌هاى‌ اخير نشان‌ مى‌دهد كه‌ گرايش‌ قدرتمندى‌ براى‌ايجاد شبكه‌ها وجود دارد.(1) مريلين‌ كلى‌ در چند جمله‌ مفيد ويژگى‌هاى‌ منطق‌ شبكه‌سازى‌ را چنين‌ شرح‌ و بسط مى‌دهد: «عصر اتم‌ گذشته‌ است‌. نماد علم‌ در قرن‌ آينده‌ شبكه‌ ديناميك‌ است‌. در حالى‌ كه‌ اتم‌ نمايانگر سادگى‌ منظم‌ است‌، شبكه‌، قدرت‌ به‌ هم‌ ريخته‌ پيچيدگى‌ را هدايت‌ مى‌كند. تنهاسازمانى‌ كه‌ قادر است‌ رشد بدون‌ جهت‌گيرى‌ از پيش‌ تعيين‌شده‌ با يادگيرى‌ بدون‌ راهنما داشته‌باشد، شبكه‌ است‌. همه‌ توپولوژى‌هاى‌ ديگر آن‌چه‌ را كه‌ ممكن‌ است‌ رخ‌ دهد، محدودمى‌كنند. يك‌ ازدحام‌ شبكه‌اى‌ مرزهاى‌ متعددى‌ دارد و لذا از هر دو طرف‌ باز و نامحدوداست‌. در واقع‌، شبكه‌ سازمانى‌ است‌ با كم‌ترين‌ ساختار و حتى‌ مى‌توان‌ گفت‌ كه‌ اصلا بدون‌ساختار است‌. در حقيقت‌، مجموعه‌اى‌ از اجزاى‌ حقيقتا واگرا، تنها در يك‌ شبكه‌ مى‌توانند منسجم‌ باقى‌ بمانند. هيچ‌ آرايش‌ ديگرى‌ ــ زنجيره‌، هرم‌، درخت‌، دايره‌، كانون‌ ــ نمى‌تواند حاوى‌ تنوع‌ راستينى‌ باشد كه‌ به‌ عنوان‌ يك‌ كل‌ عمل‌ مى‌كند.»(2) اين‌ تعريف‌ بسيار قابل‌ تأملى‌ است‌، زيرا در بستر يك‌ جامعه‌ اطلاعاتى‌ پيچيده‌ كاركرد مؤثر شبكه‌ يعنى‌ «همگرايى‌» را تصوير مى‌كند و با نگاهى‌ دقيق‌تر، جامعه‌ تركيبى‌ است‌ ازشبكه‌هاى‌ متعدد: شبكه‌هاى‌ ميان‌ سازمان‌ها، شبكه‌ درون‌ سازمانى‌، شبكه‌هاى‌ شخصى‌، شبكه‌هاى‌ رايانه‌اى‌ و علاوه‌ بر اين‌ها شبكه‌هاى‌ فرامرزى‌. اساسا اطلاعات‌ از طريق‌ همين ‌بزرگراه‌ها جارى‌ مى‌شود. برخى‌ از محققان‌ از شبكه‌ها و شبكه‌سازى‌ به‌ عنوان‌ عوامل‌ تحولات‌ و تغييرات‌ اجتماعى‌ياد كرده‌اند و تأكيد داشته‌اند كه‌ شبكه‌ها نقش‌ مهمى‌ در ارتقاى‌ اصلاحات‌ و تضمين‌ پايدارى‌آن‌ها در جوامع‌ دارند، زيرا شبكه‌ها ابزار قدرتمندى‌ براى‌ تبادل‌ اطلاعات‌ و دانش‌ و ايجاداجماع‌ در خصوص‌ رهيافت‌هاى‌ جديد هستند.(3) از آن‌جا كه‌ شبكه‌ها گروه‌هاى‌ ذى‌نفع‌ را درعرصه‌هاى‌ مختلف‌ حول‌ يك‌ موضوع‌ گرد مى‌آورند، ميزان‌ نفوذ و تأثيرگذارى‌ آن‌ها براجتماع‌ بيش‌تر از يك‌ سازمان‌ غيردولتى‌ منفرد خواهد بود. به‌ نظر مى‌رسد كه‌ منطق‌ شبكه‌اى‌ عزمى‌ اجتماعى‌ فراهم‌ مى‌آورد و مى‌تواند منابع‌ حياتى‌ تغيير و تحول‌ در جامعه‌ باشد.(4) شبكه‌نوعى‌ همگرايى‌ در عين‌ پذيرش‌ تفاوت‌ موجود ميان‌ اعضاى‌ شبكه‌ است‌. سازمان‌هاى‌ غيردولتى‌ ايرانى‌ به‌ تدريج‌ قدم‌ به‌ عرصه‌ اينترنت‌ مى‌گذارند. برخى‌ از داشتن‌ تنها يك‌ پست‌ الكترونى‌ آغاز كرده‌اند و برخى‌ ديگر داراى‌ پايگاه‌ اختصاصى‌ مى‌باشند. برخى‌ از اين‌ حد پيشتر رفته‌اند و بخشى‌ از فعاليت‌هاى‌ شبكه‌اى‌ خود را به‌ صورت‌ الكترونى‌ به‌پيش‌ مى‌برند. مجموعه‌ دوره‌هاى‌ آموزشى‌ كه‌ در مركز توانمندسازى‌ سازمان‌هاى‌ جامعه‌ مدنى ‌ايران‌ در طول‌ پنج‌ ماه‌ گذشته‌ در خصوص‌ استفاده‌ از اينترنت‌ و كاربردهاى‌ آن‌ برگزار شد، حاكى‌ از آن‌ است‌ كه‌ اين‌ سازمانها علاقه‌ بسيار زيادى‌ به‌ حضور فعال‌ در اينترنت‌ دارند، اماعلاقه‌ كافى‌ نيست‌ زيرا شبكه‌سازى‌ يك‌ هنر است‌. سازمان‌هاى‌ غيردولتى‌ بايد دانش‌ لازم‌ رابراى‌ كاركردهاى‌ شبكه‌اى‌ اينترنت‌ به‌ منظور اطلاع‌ رسانى‌ و اطلاع‌گيرى‌ در اختيار داشته‌ باشند. اصول‌ اوليه‌ شبكه‌هاى‌ افقى‌ يا عمودى‌ شبكه‌سازى‌ يك‌ فعاليت‌ ارتباطى‌ افقى‌ است‌ كه‌ در آن‌ اعضا توانايى‌ ارسال‌ اطلاعات‌ به‌ يكديگر را دارا هستند. آنان‌ مى‌توانند اطلاعات‌ جمع‌آورى‌ كنند وبر يك‌ پايه‌ برابر به‌ تبادل‌ اطلاعات‌ بپردازند. شبكه‌هايى‌ هستند كه‌ در آن‌ گاه‌ اطلاعات‌ ميان‌همه‌ اعضا تبادل‌ نمى‌شود(5) تا شبكه‌ كوچك‌ترى‌ در ميان‌ يك‌ شبكه‌ بزرگ‌تر شكل‌ گيرد.(6) اين‌ واقعيتى‌ است‌ كه‌ سازمان‌هاى‌ غيردولتى‌ با استفاده‌ از امكانات‌ شگفت‌انگيزشبكه‌سازى‌ در دهه‌ آخر قرن‌ بيستم‌ موفق‌ شدند دست‌آوردهاى‌ گران‌بهايى‌ از خود به‌ جاى‌بگذارند. مبارزه‌ با مين‌هاى‌ ضد نفر، تلاش‌ براى‌ از ميان‌ برداشتن‌ بدترين‌ اشكال‌ كار كودكان‌ وايجاد ديوان‌ كيفرى‌ بين‌المللى‌ عرصه‌هايى‌ بوده‌اند كه‌ سازمان‌هاى‌ غيردولتى‌ نقش‌ به‌سزايى‌ درپيش‌برد هدف‌هاى‌ آن‌ها داشته‌اند. نكته‌ مهم‌ ، نوع‌ فعاليت‌ ارتباطى‌ اطلاعاتى‌ اين‌ سازمان‌هااست‌ كه‌ با تكيه‌ بر شبكه‌هاى‌ افقى‌ صورت‌ گرفته‌ است‌. همه‌ در تبادل‌ اطلاعات‌ سهيم‌ هستند وحاصل‌ كار قدرت‌ دوچندانى‌ به‌ تماميت‌ شبكه‌ مى‌دهد. تنها سازوكار عمودى‌ در اين‌ شبكه‌هايك‌ كميته‌ هماهنگى‌ براى‌ تامين‌ مالى‌ و هماهنگى‌ امور براى‌ حضور در كنفرانس‌ها و به‌ منظورانعكاس‌ نتايج‌ مباحثات‌ بوده‌ است‌.(7) نكته‌اى‌ كه بارها در اين‌ سال‌ها خاطر نشان‌ شده‌ اين‌ كه‌پاينترنت‌ يك‌ وسيله‌ متصل‌كننده‌ است‌ و نه‌ يك‌ ابزار تسلط.(8) و چنان‌كه‌ «فار» خاطر نشان‌كرده‌ است‌، اگر شبكه‌سازى‌ به‌ يك‌ امر نفرت‌انگيز تبديل‌ شود، هرگز باعث‌ افزايش‌ سرمايه‌اجتماعى‌ نمى‌شود.(9) شبكه‌سازى‌ در بستر جريان‌ سيال‌ و آزاد اطلاعات‌ . شبكه‌سازى‌ در بستر يك‌ جامعه‌اطلاعاتى‌ رخ‌ مى‌دهد. بنابراين‌، جريان‌ آزاد و سيال‌ اطلاعات‌ در درون‌ شبكه‌ها بايد تضمين‌گردد. در واقع‌ شبكه‌ها نوعى‌ نمودار سازمانى‌ جديد در يك‌ جامعه‌ اطلاعاتى‌اند. موهانبرساونى‌ و دوال‌ پاريخ‌ هوشمندى‌ هر شبكه‌ را در كارآيى‌ آن‌ يعنى‌ در توان‌ توزيع‌ كردن‌، انباركردن‌ و پردازش‌ اطلاعات‌ مى‌دانند(10) و اين‌ مقدور نيست‌ مگر آن‌كه‌ جريان‌ آزاد و برابراطلاعات‌ در شبكه‌ ميسر باشد. بنابراين‌، احترام‌ به‌ حرمت‌ فضاى‌ خصوصى‌ فردى‌ - كه‌ ازحقوق‌ بنيادين‌ بشر است‌ (11)، تضمين‌ كارآيى‌ يك‌ شبكه‌ اطلاعاتى‌ است‌. برخى‌ از مزاياى‌ شبكه‌سازى‌ (در تعميق‌ فعاليت‌هاى‌ سازمان‌هاى‌ غيردولتى‌) به‌ اين‌ شرح‌اند: ـ كار در فضاى‌ اينترنت‌ بسيار ساده‌ و مؤثر است‌; ـ جريان‌ سريع‌ اطلاعات‌ يكى‌ از ويژگى‌هاى‌ مهم‌ اينترنت‌ و شبكه‌هاى‌ الكترونى‌ است‌ وسرعت‌ يكى‌ از عوامل‌ موفقيت‌ است‌، به‌ويژه‌ در موقعيتهايى‌ كه‌ سازمان‌هاى‌ غيردولتى‌ نياز به «اقدام‌ فورى‌» دارند يا «اطلاع‌رسانى‌ عمومى» بايد صورت‌ گيرد. سازمان‌هاى‌ غيردولتى‌ مى‌توانند از اين‌ ويژگى‌ بسيار استفاده‌ برند; (12) ـ شبكه‌ها زمينه‌ همكارى‌ سازمان‌هاى‌ غيردولتى‌ را به‌ ويژه‌ در يك‌ حوزه‌ خاص‌ فراهم‌مى‌آورند و به‌ اين‌ ترتيب‌ باعث‌ مى‌شوند كه‌ اين‌ سازمان‌ها بهتر بتوانند مقاصد انسانى‌ خود راپيش‌ ببرند; ـ شبكه‌سازى‌ و حضور در شبكه‌ها باعث‌ افزايش‌ توانايى‌ مى‌شود، زيرا پدانش‌پ به‌ سرعت ‌توسط اعضاى‌ شبكه‌ تبادل‌ مى‌شود و سازمانها با فراگيرى‌ دانش‌، مهارتها و تجربيات‌ توانمند مى‌شوند; ـ شبكه‌ها ضريب‌ نفوذ سازمان‌هاى‌ غيردولتى‌ را افزايش‌ مى‌دهند، به‌ويژه‌ شبكه‌هاى ‌موضوعى‌ (مانند تشكيل‌ يك‌ شبكه‌ براى‌ مبارزه‌ با ايدز در كشور و يا شبكه‌اى‌ براى‌ حفاظت ‌از محيط زيست‌ درياى‌ خزر) مى‌توانند به‌ عنوان‌ عناصر قدرتمند ايجاد تغيير در جامعه‌ ظاهرشوند، زيرا سازمانها با علائق‌ و تجربيات‌ متفاوت‌ كنار هم‌ گرد مى‌آيند و تخصص‌ها و توانايى‌هاى‌ خود را به‌ مشاركت‌ مى‌گذارند تا راه‌حل‌هاى‌ عملى‌ براى‌ ايجاد تغييرات‌ مثبت ‌فراهم‌ سازند. برخى‌ از انديشمندان‌ از شبكه‌ها به‌ عنوان‌ ابزارهاى‌ قدرتمند اصلاحات‌ نام‌برده‌اند، زيرا شبكه‌ داراى‌ كاركرد ايجاد گردهم‌آيى‌ در طى‌ زمان‌ است‌; ـ شبكه‌هاى‌ گروه‌هاى‌ ذى‌نفع‌ كه‌ نوعى‌ همكارى‌ در عين‌ پذيرش‌ تفاوت‌ها هستند، به‌پيش‌برد اهداف‌ حداقلى‌ سازمان‌هاى‌ غيردولتى‌ كمك‌ بسيارى‌ مى‌كنند. در شبكه‌هاى ‌ناهمگون‌، سازمان‌هاى‌ غيردولتى‌ يكى‌ از گروه‌هاى‌ ذى‌نفع‌ هستند و كارشناسان‌ دولتى‌، مديران‌ شركت‌هاى‌ خصوصى‌، اساتيد دانشگاه‌ها و محققان‌، سياست‌گذاران‌ در كنار سازمان‌هاى‌ غيردولتى‌ به‌ تبادل‌ نظر مى‌پردازند; ـ شبكه‌ها مى‌توانند مشاركت‌ سازمان‌هاى‌ غيردولتى‌ را در همايش‌ها و كنفرانس‌هاى ‌جهانى‌ (به‌ويژه‌ مجموعه‌ كنفرانس‌هاى‌ جهانى‌ كه‌ سازمان‌ ملل‌ متحد برگزار مى‌كند)، تسهيل‌ نمايند(13); ـ اعتبار به‌دست‌آمده‌ از عضويت‌ جمعى‌ عموما به‌ مراتب‌ بيش‌تر از اعتبار ناشى‌ از فعاليت‌ يك‌ سازمان‌ به‌ تنهايى‌ است‌; ـ شبكه‌ها مى‌توانند ابزارى‌ براى‌ حمايت‌ از اعضاى‌ خود باشند، به‌ويژه‌ براى‌ سازمان‌هايى ‌كه‌ به‌ واسطه‌ فعاليت‌هاى‌ خود آسيب‌پذيرند; ـ از آن‌جا كه‌ شبكه‌ها در دسترس‌ همگان‌ هستند، مى‌توانند در افزايش‌ آگاهى‌ عمومى‌ نقش‌ مهمى‌ را ايفا نمايند; ـ شبكه‌هاى‌ الكترونى‌ مى‌توانند در تأمين‌ مالى‌ فعاليت‌هاى‌ سازمان‌هاى‌ غيردولتى‌ مؤثرباشند، «كمك‌دهنده‌ها» (14) به‌ مجموعه‌ فعاليت‌هاى‌ سازمان‌ها دسترسى‌ و شناخت‌ بهترى‌ از فعاليت‌هاى‌ آنها داشته‌ باشند، به‌ شبكه‌ها بهتر از سازمان‌هاى‌ منفرد كمك‌ مى‌كنند; ـ سرانجام‌ اين‌كه‌ شبكه‌ها باعث‌ افزايش‌ نوآورى‌ مى‌شوند، زيرا يك‌ بستر ارتباط دائمى ‌ميان‌ اجزاء برقرار مى‌شود و همواره‌ اين‌ احتمال‌ وجود دارد كه‌ از ميان‌ گفت‌وگوهايى‌ كه‌ درفضاى‌ شبكه‌ صورت‌ مى‌گيرند، ديدگاه‌هاى‌ نوآورانه‌ جديدى‌ مطرح‌ شوند. اشكال‌ شبكه‌ها شبكه‌ها مى‌توانند شكل‌هاى‌ مختلفى‌ داشته‌ باشند و هر شكل‌ توانمندى‌هاى‌ خاص‌ خود رادارد. برخى‌ شبكه‌ها با عضويت‌ باز (در اين‌ شبكه‌ها، علاوه‌ بر سازمان‌هاى‌ غيردولتى‌، رسانه‌هاو افراد نيز مى‌توانند حضور يابند) و برخى‌ ديگر با عضويت‌ بسته‌ هستند (مانند شبكه‌هاى ‌خاصى‌ كه‌ ميان‌ سازمان‌هاى‌ غيردولتى‌ و فقط با عضويت‌ اين‌ سازمان‌ها شكل‌ مى‌گيرد) برخى‌داراى‌ دسترسى‌ باز هستند (اطلاعات‌ درون‌ شبكه‌ قابل‌ استفاده‌ براى‌ تمام‌ بازديدكنندگان‌ است‌) و برخى‌ ديگر داراى‌ دسترسى‌ بسته‌ هستند (اطلاعات‌ درون‌ شبكه‌ فقط براى‌ افراد داراى‌ رمز عبور قابل‌ استفاده‌ است‌). شبكه‌ مى‌تواند در درون‌ يك‌ سازمان‌ غيردولتى‌ شكل ‌گيرد و اعضاى‌ سازمان‌ مى‌توانند اعضاى‌ فعال‌ شبكه‌ باشند. براى‌ مثال‌، در حال‌ حاضرسازمان‌هاى‌ در ايران‌ وجود دارند كه‌ بيش‌ از پنج‌ هزار عضو دارند، اما هنوز يك بستر مناسب‌ ارتباطى‌ براى‌ اطلاع‌رسانى‌ به‌ اعضاى‌ خود و نيز تسهيل‌ مشاركت‌ اعضا در برنامه‌هاى‌ سازمان ‌ندارند. شبكه‌هاى‌ درون‌ سازمانى‌ قدرت‌ و توان‌ سازمان‌ را چندين‌ برابر مى‌كنند. برخى‌ ازشبكه‌ها ناهمگون‌ هستند و مجموعه‌اى‌ از صاحبان‌ منافع‌ در آن‌ها عضو مى‌شوند. شبكه‌ها مى‌توانند حول‌ اجراى‌ يك‌ برنامه‌ يا حول‌ يك‌ موضوع‌ (توافق‌ بر سر حداقلها يا حداكثرها)شكل‌ گيرند. برخى‌ از شبكه‌ها ملى‌ و برخى‌ ديگر منطقه‌اى‌ و قدرتمندترين‌ شبكه‌ها، شبكه‌هاى‌جهانى‌ هستند.(15) با توجه‌ به‌ مطالب‌ ذكر شده‌، مى‌توان‌ شبكه‌ها را بر اساس‌ تركيب‌ اعضاء، نوع‌ عضويت‌، ميزان‌ دسترسى‌ به‌ آن‌ها ، موضوع‌ شبكه‌ و جغرافياى‌ تحت‌ پوشش‌ تقسيم‌بندى‌ نمود; هر يك‌ به‌فراخور داراى‌ ميزان‌ نفوذ و تأثيرگذارى‌ متفاوتى‌ هستند. گاه‌ برخى‌ از سازمانها در شبكه‌هاى‌ متعددى‌ عضو هستند و از مزاياى‌ مختلف‌ اين‌ تكثر استفاده‌ مى‌برند. ويژگى‌هاى‌ اصلى‌ برخى‌ ويژگى‌هاى‌ اصلى‌ يك‌ شبكه‌ الكترونى‌ به‌ شرح‌ زير است‌: - ايجاد فهرست‌هاى‌ توزيع‌ پست‌ الكترونى (16)(خبرنامه‌هاى‌ الكترونى‌) يا ايجاد گروه‌هاى‌مباحثه‌ الكترونى‌ با هدف‌ توزيع‌ اطلاعات‌. ضمنا جالب‌ توجه‌ است‌ كه‌ در برخى‌ از پايگاه‌ها،امكان‌ كنفرانس‌هاى‌ الكترونى‌ هم‌ ايجاد شده‌ است‌; - تشكيل‌ كتابخانه‌هاى‌ مجازى (17) اسناد و بانك‌هاى‌ اطلاعاتى (18) در يك‌ شبكه‌ از ضرورت‌هاست‌ به‌ ويژه‌ بانك‌ اطلاعاتى‌ اعضاى‌ شبكه‌; - ارائه‌ خدمات‌ الكترونى‌ به‌ اعضا و از جمله‌ مشاوره‌هاى‌ حقوقى‌; - ارائه‌ خدمات‌ هماهنگى‌ براى‌ شركت‌ در كنفرانس‌ها و مجامع‌ بين‌المللى‌; - صفحات‌ پيوند(19) مى‌توانند به‌ عنوان‌ درگاهى (20) براى‌ استفاده‌ همه‌ صاحبان‌ منافع‌ و علاقه‌مندان‌ عمل‌ مى‌كنند; - هر سازمان‌ غيردولتى‌ مى‌تواند داراى‌ صفحه‌ يا صفحات‌ خاص‌ خود در پايگاه‌ شبكه‌باشد و از يك‌ پست‌ الكترونى‌ اختصاصى‌ بهره‌ گيرد. به‌ اين‌ صورت‌، سازمان‌ها مى‌توانند خودرا در مجموعه‌ شبكه‌ معرفى‌ نمايند. - تأسيس‌ يك‌ بخش‌ «سمينارها و كنفرانس‌ها» مى‌تواند اعضا را از فعاليت‌هاى‌ سازمان‌هاى‌ غيردولتى‌ ديگر مطلع‌ كند. اعضا مى‌توانند همايش‌هاى‌ خود را در اين‌ بخش‌ معرفى‌ كنند; - تأسيس‌ بخش‌ «بهترين‌ تجربيات‌» (21) در يك‌ شبكه‌ الكترونى‌ سازمان‌هاى‌ غيردولتى‌ دريك‌ شبكه‌ الكترونى‌ سازمان‌هاى‌ غيردولتى‌ مى‌تواند باعث‌ شود تا تجربيات‌ موفق‌سازمان‌هاى‌ غيردولتى‌ به‌ همه‌ اعضا منتقل‌ شود. - بخش‌ آموزش‌ يك‌ پايگاه‌ شبكه‌اى‌ اهميت‌ بسيارى‌ دارد، زيرا در عين‌ حال‌ مى‌تواند در مباحث‌ خاص‌ سازمان‌هاى‌ غيردولتى‌ مسائل‌ آموزشى‌ را مطرح‌ سازد (نظير دروس‌ پايه‌ و تعاريف‌، پويايى‌ گروه‌، روش‌هاى‌ حمايت‌گرى (22)، مديريت‌ منابع‌ انسانى‌، مديريت‌ منابع‌ مالى‌،روش‌هاى‌ تأمين‌ مالى‌، شيوه‌هاى‌ رهبرى‌، ويژگى‌هاى‌ روابط عمومى‌، شيوه‌هاى‌ حضور در عرصه‌هاى‌ بين‌المللى‌ و يك‌ سلسله‌ آموزش‌هاى‌ موضوعى‌ نظير آموزش‌ در زمينه‌ مباحث‌ توسعه‌ پايدار، زيست‌ محيطى‌، حقوق‌ بشر و حقوق‌ شهروندى‌، مباحث‌ تحليل‌ جنسيتى‌، موضوعات‌ ويژه‌ جوانان‌ و غيره‌ و علاوه‌ بر اين‌ آموزش‌هاى‌ خاص‌ فن‌آورى‌ ارتباطات‌ واطلاعات (23). - گاه‌ پيش‌ مى‌آيد كه‌ برخى‌ افراد از مجموعه‌ اطلاعات‌ فراهم‌ شده‌ در يك‌ شبكه‌سوءاستفاده‌ مى‌كنند. به‌ نظر مى‌آيد كه‌ لازم‌ باشد نوعى‌ تفاهم‌نامه‌ كه‌ اصول‌ كار در شبكه‌ در آن ‌ترسيم‌ شده‌ باشد تنظيم‌ شود تا بتواند روابط بين‌ اعضا را در آن‌ تعريف‌ كند. تجربه‌ كارشبكه‌سازى‌ در برخى‌ از كشورهاى‌ اروپاى‌ شرقى‌ نشان‌ داده‌ كه‌ لازم‌ است‌ حداقل‌ مقرراتى ‌ناظر بر كليت‌ كار شبكه‌ باشد، زيرا «سرقت‌ انديشه‌ها»، «ارائه‌ اطلاعات‌ غلط يا ناموثق‌» و «تخريب‌ تصوير يك‌ سازمان‌ غيردولتى» تهديد هستند كه‌ سازمان‌هاى‌ غيردولتى‌ با آن‌هامواجه‌اند. وجود يك‌ تفاهم‌نامه‌ مى‌تواند به‌ شفاف‌سازى‌ روابط كمك‌ به‌سزايى‌ كند. فهرست‌ سرورها يا فهرست‌هاى‌ مباحثه‌ فهرست‌ سرورها يا فهرست‌هاى‌ مباحثه‌ (اطلاع‌ رسانى‌) الكترونى‌، يكى‌ از اشكال‌ موفق‌ وبسيار مفيد فعاليت‌ شبكه‌اى‌ در اينترنت‌ مى‌باشد. جوانب‌ مثبت‌ اين‌ فعاليت‌ اطلاعاتى‌، عبارت‌اند از: جريان‌ سريع‌ اطلاعات‌، هزينه‌هاى‌ به‌ حداقل‌ رسيده‌، صرفه‌ جويى‌ در زمان‌،امكان‌ بحث‌ و مباحثه‌ الكترونى‌، تبادل‌ اطلاعات‌، ايجاد اعتماد ميان‌ سازمان‌ها، اجراى‌ طرح‌هاى‌ مشترك‌، در دسترس‌ بودن‌، جذب‌ آسان‌تر منابع‌ مالى‌، افزايش‌ ظرفيت‌هاى‌سازمان‌هاى‌ غيردولتى‌، امكان‌يابى‌ و چانه‌زنى‌. از طرفى‌ اين‌ امكان‌ داراى‌ جوانب‌ منفى‌ است‌كه‌ سازمان‌هاى‌ غيردولتى‌ بايد در نظر داشته‌ باشند، نظير شك‌ و ترديد نسبت‌ به‌ اطلاعات ‌دريافت‌ شده‌ استفاده‌ از منابع‌ غيرموثق‌، تفسير بد از اطلاعات‌ رسيده‌، شكل‌گيرى‌ عدم‌ اعتماد،سرقت‌ آراء و انديشه‌ها، نبود مهارت‌هاى‌ حرفه‌اى‌ در كار با اطلاعات‌، تخريب‌ آسان‌ تصوير يك‌ سازمان‌ غيردولتى‌، فروش‌ اطلاعات‌ يا استفاده‌ نابه‌ جا از اطلاعات‌. با تمام‌ اين‌ تفاسير، فهرست‌ سرورها امكان‌ فوق‌العاده‌ بى‌ نظيرى‌ براى‌ گسترش‌ و تعميق‌ فعاليت‌هاى‌ سازمان‌هاى ‌غيردولتى‌ به‌ حساب‌ مى‌آيد و توان‌ شبكه‌ سازى‌ آنها را چندين‌ برابر مى‌كند. شبكه‌ها در نقاط دورافتاده‌ در سال‌هاى‌ اخير شاهد آن‌ بوده‌ايم‌ كه‌ برخى‌ از سازمان‌هاى‌ غيردولتى‌ توسعه‌اى‌ درقسمت‌هاى‌ دورافتاده‌ كشور شروع‌ به‌ فعاليت‌ كرده‌اند. يكى‌ از مزاياى‌ بسيار شگفت‌انگيز شبكه‌هاى‌ مجازى‌ اين‌ است‌ كه‌ مى‌توان‌ با استفاده‌ از روش‌هاى‌ ماهواره‌اى‌، ارتباطى‌ را ميان‌سازمان‌ غيردولتى‌ مربوطه‌ (كه‌ براى‌ مثال‌ در روستاهاى‌ سيستان‌ و بلوچستان‌ فعاليت‌ مى‌كند) باسازمان‌هاى‌ ديگر يا اعضاى‌ خود در مركز مرتبط نمود. به‌ اين‌ طريق‌ سازمانى‌ كه‌ در مناطق‌ دورافتاده‌ يا دور از مركز فعاليت‌ مى‌كند، به‌ همان‌ سرعتى‌ كه‌ در مناطق‌ مركزى‌ مى‌تواند درتبادل‌ اطلاعات‌ شركت‌ جويد، از تحولات‌ مطلع‌ مى‌گردد و اين‌ امر در توانمند شدن‌ اين‌سازمان‌ مؤثر است‌. يك‌ پيشنهاد اگر بپذيريم‌ كه‌ وجود شبكه‌هاى‌ الكترونى‌ ضرورتى‌ اجتناب‌ناپذير براى‌ تعميق‌فعاليت‌هاى‌ سازمان‌ غيردولتى‌ است‌، انجام‌ يك‌ ارزيابى‌ از وضع‌ موجود براى‌ تعيين‌ نقاطضعف‌ و قوت‌، تهديدها و فرصت‌ها، تقاضا و امكانات‌ موجود ضرورى‌ است‌ تا بر اساس‌مطالعات‌ صورت‌ گرفته‌ بتوان‌ شيوه‌هاى‌ شبكه‌ سازى‌ سازمان‌هاى‌ غيردولتى‌ را در ايران‌تدوين‌ كرد. علاوه‌ بر اين‌، طراحى‌ نرم‌افزارهاى‌ مديريت‌ محتوا براى‌ ايجاد پايگاه‌هاى‌ پويا،از جمله‌ مسائل‌ اساسى‌ ديگرى‌ است‌ كه‌ مى‌تواند كمك‌ فزاينده‌اى‌ به‌ اين‌ سازمان‌ها به‌ حساب‌آيد، زيرا ابزار مناسبى‌ براى‌ گسترش‌ فعاليت‌هاى‌ شبكه‌اى‌ سازمان‌هاى‌ غيردولتى‌ خواهد بود. بر اساس‌ تحقيقات‌ صورت‌ گرفته‌ در مركز توانمندسازى‌ سازمان‌هاى‌ جامعه‌ مدنى‌ ايران‌،در حال‌ حاضر حدود 30 سازمان‌ غيردولتى‌ ايرانى‌ داراى‌ پايگاه‌ اختصاصى‌ قابل‌ دسترس‌ دراينترنت‌ هستند; تعداد بسيارى‌ از اعضاى‌ سازمان‌هاى‌ غيردولتى‌ داراى‌ پست‌ الكترونى ‌شخصى‌ هستند، ولى‌ هنوز مسئله‌ دسترسى‌ به‌ اينترنت‌ يك‌ مشكل‌ اساسى‌ در ميان‌ سازمان‌هاى ‌غيردولتى‌ است‌. مشكل‌ مهم‌ ديگرى‌ كه‌ بر سر راه‌ اين‌ سازمان‌ها وجود دارد، موضوع‌ زبان‌فارسى‌ در اينترنت‌ است‌. در حال‌ حاضر شاهد آن‌ هستيم‌ كه‌ برخى‌ پايگاه‌ها با استفاده‌ از امكان ‌يونيكد به‌ زبان‌ فارسى‌ طراحى‌ شده‌اند، ولى‌ به‌ نظر مى‌آيد كه‌ هنوز مشكلاتى‌ بر سر راه‌استفاده‌ از زبان‌ فارسى‌ وجود دارد. در مجموع‌، ارزيابى‌ اين‌ مشكلات‌ و يافتن‌ راه‌حل‌هاى ‌مناسب‌ مى‌تواند به‌ گسترش‌ فعاليت‌هاى‌ شبكه‌اى‌ سازمان‌هاى‌ غيردولتى ايرانى‌ در اينترنت‌بينجامد و شكاف‌ ديجيتالى‌ موجود ميان‌ اين‌ گونه‌ سازمان‌ها در عرصه‌ جهانى‌ به‌ حداقل‌ ممكن‌برسد. پى‌نوشت‌ها 1. موضوع‌ ايجاد شبكه‌هاى‌ ارتباطى‌ از سال‌ 1374 سازمان‌هاى‌ غيردولتى‌ زنان‌ درجمهورى‌ اسلامى‌ ايران‌ به‌ مناسبت‌ كنفرانس‌ جهانى‌ زن‌ (پكن‌ 1995) در ميان‌ سازمان‌هاى‌غيردولتى‌ ملموس‌ شد. بعدها شبكه‌ سازمان‌هاى‌ غيردولتى‌ جوانان‌ و شبكه‌ سازمان‌هاى‌غيردولتى‌ زيست‌ محيطى‌ نيز تشكيل‌ شدند و به‌ نظر مى‌آيد تلاش‌ هايى‌ براى‌ تشكيل‌ شبكه‌هاى‌ديگر نظير شبكه‌ انجمن‌هاى‌ علمى‌ و انجمن‌هاى‌ تخصصى‌ در حال‌ انجام‌ است‌. در چند موردبرخى‌ از سازمان‌هاى‌ غيردولتى‌ توانمند تلاش‌ كردند كه‌ شبكه‌هاى‌ الكترونى‌ را در اينترنت‌شكل‌ دهند، ولى‌ به‌ سبب‌ نا آشنايى‌ اعضا و نيز پايين‌ بودن‌ ضريب‌ نفوذ اينترنت‌ در ايران‌ اين‌فعاليت‌ها به‌ بوته‌ فراموشى‌ سپرده‌ شد. از سال‌ 1381 فعاليت‌ هايى‌ براى‌ راه‌ اندازى‌ شبكه‌هاى ‌قدرتمند غيردولتى‌ آغاز شده‌ است‌. اميد است‌ كه‌ در سال‌هاى‌ آتى‌ شاهد گزارش‌ فعاليت‌ها و تجربيات‌ موفق‌ آنان‌ در اين‌ زمينه‌ باشيم‌. 2. به‌ نقل‌ از مانوئل‌ كاستلز. عصر اطلاعات‌: اقتصاد، جامعه‌ و فرهنگ‌، ظهور جامعه‌شبكه‌اى‌ (جلد 1)، ترجمه‌ احد عليقيان‌، افشين‌ خاكباز زير نظر دكتر على‌ پايا. تهران‌، طرح‌ نو،1380،ص‌ 101. 3. براى‌ اطلاع‌ بيش‌تر درخصوص‌ تأثير شبكه‌ها در فعاليت‌هاى‌ توسعه‌اى‌ مى‌توانيد به‌ منبع‌زير مراجعه‌ كنيد: The Networking Revolution: Opportunities and challenges for developingCountries , The World Bank Group, June 2000(info Dev). 4. فورسايت‌ در كتاب‌ خود تحت‌ عنوان‌ «پويايى‌ گروه‌» از قول‌ لوبون‌ مى‌نويسد: پگروه‌هامردم‌ را نيز به‌ طور چشم‌گيرى‌ تغيير مى‌دهند.پ 5. در اين‌ گونه‌ شبكه‌ها، اعضا مى‌توانند اعضاى‌ ديگر را به‌ بخش‌ خود پدعوت‌پ كنند و به‌اين‌ ترتيب‌ اطلاعات‌ خود را با «مدعوين» سهيم‌ شوند. در اين‌ حالت‌، يك‌ شبكه‌ كوچك‌تر درميان‌ يك‌ شبكه‌ بزرگ‌تر شكل‌ مى‌گيرد. براى‌ نمونه‌ اين‌ فعاليت‌ مى‌توانيد مدل‌هاى‌ BasicSupport for Cooperative WorkياBSCW را مورد مطالعه‌ قرار دهيد. 6. فورسايت‌ در كتاب‌ خود تحت‌ عنوان‌ «پويايى‌ گروه‌پ شكل‌هاى‌ ديگرى‌ از شبكه‌هاى ‌ارتباطى‌ را مطرح‌ ساخته‌ است‌ و از جمله‌ به‌ شبكه‌هاى‌ كامكون‌ اشاره‌ كرده‌ است‌ كه‌ در آن‌ها كليه‌ اعضا با يكديگر در ارتباط هستند و نوع‌ ارتباط افقى‌ ميان‌ اعضا وجود دارد. براى‌ اطلاع‌ بيشتر به‌ اين‌ كتاب‌ مراجعه‌ كنيد: دانسلون‌ آر. فورسايت‌، پويايى‌ گروه‌، ترجمه‌ مهرداد فيروزبخت‌ و دكتر منصور قنادان‌. تهران‌، مؤسسه‌ خدمات‌ فرهنگى‌ رسا، چاپ‌ اول‌، 1380،صص‌ 201-197. 7. به‌ نظر مى‌آيد كه‌ لازم‌ باشد محققان‌ اين‌ سه‌ پجريان‌پ شبكه‌اى‌ را به‌ دقت‌ مورد بررسى‌قرار دهند. نتايج‌ اين‌ تحقيقات‌ مى‌تواند در فعاليت‌هاى‌ جارى‌ اين‌ سازمان‌ها در عرصه‌ جامعه‌مدنى‌ جهانى‌ مؤثر باشد. 8. The Web is a linking medium and not a means of dominatioin. 9. Kim Beng Phar, Networking as the Foundation of Civil Society, HarvardAsia Quarterly, Winter 1998. 10. Mohanbir Sawhney and Daval Parikh, Where Value Lives in aNetworked World , Harvard Business Review, January 2001. اين‌ مقاله‌ توسط آقاى‌ مهندس‌ فضل‌ الله‌ امينى‌ ترجمه‌ شده‌ است‌ و در ماهنامه‌ گزيده‌ مديريت‌(شماره‌ 6، ارديبهشت‌ 1380) تحت‌ عنوان‌ «ارزش‌يابى‌ در دنياى‌ شبكه‌اى» به‌ چاپ‌ رسيده‌است‌. 11. Right to Privacy 12. Networking and Cooperation of NGOs , Levan Berdzenishvili(http://cipdd.org). 13. در همين‌ جا لازم‌ است‌ خاطر نشان‌ شود كه‌ سازمان‌هاى‌ غيردولتى‌ براى‌ آماده‌ سازى‌خود و شركت‌ در كنفرانس‌ جهانى‌ جامعه‌ اطلاعاتى‌ بايد در يك‌ شبكه‌ به‌ هم‌ مرتبط شوند وضرورت‌ راه‌ اندازى‌ يك‌ شبكه‌ الكترونى‌ براى‌ تسهيل‌ ارتباطات‌ و حضور فعال‌ و تأثيرگذاردر اين‌ كنفرانس‌ به‌ شدت‌ احساس‌ مى‌شود. از آن‌جا كه‌ اين‌ كنفرانس‌ يك‌ پديده‌ زودگذر نخواهد بود و آثار و تبعات‌ آن‌ تا سال‌ها باقى‌ است‌، اين‌ شبكه‌ مى‌تواند به‌ عنوان‌ يك‌ ابزار قدرتمند اطلاع‌ رسانى‌ و ارتباطى‌ كاركرد مؤثرى‌ داشته‌ باشد. مركز توانمندسازى‌ سازمان‌هاى ‌جامعه‌ مدنى‌ در اين‌ زمينه‌ طرحى‌ را آماده‌ كرده‌ است‌ و تلاش‌ دارد كه‌ با همكارى‌ سازمان‌هاى ‌غيردولتى‌ اين‌ مهم‌ را تحقق‌ بخشد. 14. donors 15. هانس‌ هولمن‌ در مقاله‌ زير تلاش‌ كرده‌ است‌ تا موضوع‌ نمايندگى‌ را در شبكه‌هاى ‌سازمان‌هاى‌ غيردولتى‌ به‌ بحث‌ بكشاند: NGOs, Networking and Problems of Representation, Hans Holmen,Linkopings University and ICER, June 2002. 16. Listservers 17. Virtual Libraries 18. همواره‌ موضوع‌ زبان‌ شبكه‌ يكى‌ از مهم‌ترين‌ مشكلات‌ اساسى‌ بوده‌ است‌. در حال‌حاضر با شكل‌گيرى‌ يونيكد طراحى‌ صفحات‌ فارسى‌ آسان‌تر شده‌ است‌. اما زبان‌ شبكه‌ بايد متناسب‌ با مخاطب‌ آن‌ تنظيم‌ گردد. 19. Link Pages 20. Portal 21. best Pracices 22. advocacy 23. information & communication/ Technologies (ICT) منابع‌ - فورسايت‌، دانلسون‌ آر. پويايى‌ گروه‌ ، ترجمه‌ مهرداد فيروزبخت‌ و دكتر منصور قنادان‌،تهران‌: مؤسسه‌ خدمات‌ فرهنگى‌ رسا، چاپ‌ اول‌، 1380. - كاستلز، مانوئل‌. عصر اطلاعات‌: اقتصاد، جامعه‌ و فرهنگ‌، ظهور جامعه‌ شبكه‌اى‌(جلد1)، ترجمه‌ احد عليقليان‌، افشين‌ خاكباز زير نظر دكتر على‌ پايا، تهران‌، طرح‌ نو، 138. Basic Support for Cooperative Work-BSCW, visit http://WWW.bscw.de - Berdzenishvili, Levan. Networking and Cooperation of NGOs, visithttp://cipdd.org. Holmen,Hans. NGOs, Networking and Problems of Representation, -Linkopings University and ICER, Juner 2002. Phar, Kim Beng. Networking as the Foundation of Civil Society , Harvard -Asia Quarterly, Winter 1998. Sawhney, Mohanbir and Parikh, Daval. Where Value Lives in a Networked -World , Harvard Business Review , January 2001. World Bank Group . The Networking Revolution: Opportunities and -Challenges for developing Countries June 2000 (infoDev


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۲۴ مراجعه امروز
۵۶۴۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : شبكه اينترنت بيش از 171 ميليون رايانه را به يكديگر متصل كرده است
تاريخ :۲۴/۳/۱۳۸۳
متن خبر:
در حال حاضر اينترنت بيش از 171 ميليون رايانه را به يكديگر متصل كرده و رشد آن همچنان ادامه دارد. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از ايلنا، در حال حاضر ميليون ها رايانه آسيب پذير در اينترنت وجود دارد كه مستعد يك نوع خاص از حملات توسط مهاجمين هستند. گفتني است، پس از گذشت 15 سال از عموميت يافتن اينترنت و مطالعات گسترده انجام شده به منظور كاهش خطرات خرابي و سرعت در تشخيص و غلبه برحملات، مي توان چنين ادعا كرد كه راه حل هاي واكنشي به تنهايي كافي نخواهند بود. بر اساس اين گزارش، فناوري حملات، بسيار پيشرفته شده و مهاجمان مي توانند با اتكاء بر آخرين فناوري هاي موجود به سادگي از نقاط ضعف جاري در سيستم هاي آسيب پذير استفاده و به آنان آسيب مي رسانند. شايان ذكر است، كاربران اينترنت وابستگي زيادي به اينترنت پيدا كرده و از آن به منظور انجام كارهاي حياتي خود نظير فعاليت هاي تجار online استفاده مي كنند. كوچك ترين وقفه در ارايه خدمات مي تواند از دست رفتن منابع اقتصادي و به مخاطره افتادن سرويس هاي حياتي را به دنبال داشته باشد. همچنين بايد گفت: ما همچنان در معرض طيف گسترده اي از حملات قرار گرفته ايم. حملاتي كه از دست دادن منابع اقتصادي و عدم امكان عرضه خدمات را به دنبال خواهد داشت، در اين راستا بايد از تمامي امكانات و پتانسيل هاي موجود به منظور سرعت در پاسخ و برخورد با حملات استفاده كرد با زندگي در راه حل هاي موجود و استفاده از رويكردهاي علمي و جامع مي تواند عاملي موثر در جهت برخورد مناسب با حملات باشد


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۲۷ مراجعه امروز
۵۶۴۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : چگونه يك راهياب فلش به سايت خود بيافزاييد؟(قسمت اول)
تاريخ :۲۵/۳/۱۳۸۳
متن خبر:
برنامه Macromedia Flash راه ساده اي براي افزودن كاربردهاي تلفيقي به صفحات وب است. اين برنامه داراي ابزارهاي مفيدي مي باشد كه ايجاد صفحات مختلف را براي شما ساده مي نمايد. براي مسلط شدن به اين ابزارها، به هر حال لازم است كه زمان و نيروي كافي صرف كنيد. خوشبختانه منابع فراواني به صورت Online در دسترس تان است، همين طور مجموعه كتابهاي فني و دوره هاي آموزشي كه مي تواند به شما ياري رساند. اگر شما كاملاً تازه كار هستيد بايد با درس ها و دوره هاي آموزشي ويژه كه ضميمه نرم افزار Flash است آشنا شويد. شما با اين آموزش ها مراحل مختلفي را براي گسترش كارتان طي مي كنيد؛ از نقاشي و ايجاد نمادها و انيميشن ها گرفته تا افزودن حركات و صدا و ديگر ويژگي ها. به زحمت اش مي ارزد، كه يك شب تمام را به اين كار اختصاص دهيد! براي اين كه بتوانيد از نرم افزار Flash بيشترين استفاده را بكنيد، بسيار مهم است كه كار با گرافيك برداري را بياموزيد، كه در واقع تصاويري هستند كه با استفاده از ابزارهاي طراحي Flash آنها را ايجاد مي كنيد. انيميشن هاي ساده و سريع Flash به طور معمول از گرافيك برداري استفاده مي كند. اين تصاوير را مي توانيد به اندازه دلخواه تنظيم كنيد، بدون آن كه كيفيت كار كاهش يابد. در عين حال اندازه هاي فايل مي تواند به حداقل كاهش يابد. اگر چه تصاوير گرافيكي نطقه اي (bitmap) و همچنين تصاوير معمولي ويدئويي هم مي تواند در Flash متحرك شود، ولي با اين حال ما يك تصوير گرافيكي برداري را كه مبتني بر سيستم راهياب يك مجموعه عكس است ايجاد مي كنيم. در Flash دكمه هاي جلو و عقب و شروع و موارد ديگري موجود است كه مي توانيد از آنها استفاده كنيد. در آن سوي دكمه هاي راهياب طراحي يك سري دكمه هاي راهياب كاري نيست كه احتياج به پيشرفت چنداني در فلاش داشته باشد. شما مي توانيد سري به سايت http://www.Lookand feed.com بزنيد و متوجه بشويد كه دكمه هاي ساده اي وجود دارند كه مي توانند براي كار شما مؤثر واقع شوند. بيت ها و پيكسل ها در سايت http://www.bitsandpixles.com به شما نشان مي دهند كه چگونه مي توانيد انيميشن هاي پيچيده تري از موضوعات و متن ها ايجاد كنيد. البته ابزارهاي بسيار مفيد نيز براي اين كار وجود دارند. با اين حال سايت اصلي Macromedia مي تواند نقطه شروع كارتان باشد. در اين مطلب آموزشي به خاطر حجم زياد جزئيات ايجاد رهياب، تنها نكات مهم و موارد خاص توضيح داده شده است. با ما همراه باشيد! گام اول:يك صفحه نمايش طراحي كنيد در اينجا مي خواهيم يك مثال ساده از صفحه نمايش تصاوير، همراه با متن و دكمه بسازيم. طراحي دكمه ها شناخته شده ترين كاربردها در Flash است، بنابراين بيشتر ابزارهايي كه شما به آن نياز داريد ويژگي هاي مفيدي دارند، مانند ابزارهاي طراحي چهارگوش گوشه گرد. براي اين مثال ما تنها از چهارگوش ساده استفاده مي كنيم. گام دوم: ساختن دكمه اگر يك متن را به عنوان يك دكمه تعريف كنيد، Flash مرحله بعدي را خود انجام مي دهد. ابتدا متن را به سادگي ايجاد و انتخاب كنيد و مشخصات دلخواه را به آن اعمال كنيد. چهارگوش و متن را انتخاب نماييد و آن را به Symbol تبديل كنيد. گام سوم: وضعيت دكمه ها را تعريف كنيد يك دكمه ساده در كل چهار وضعيت مختلف دارد و شما مي بايستي تصاوير لازم را براي همه اين چهار حالت يعني (,hit down, over, Up) ايجاد كنيد. دكمه هاي گرافيكي را در يك Keyframe روي Time line كپي كنيد و سپس آن را براي هر مرحله اصلاح كنيد. گام چهارم :محدوده كليك كردن كاربر را تعريف كنيد لازم است محدوده اي كه كاربر مي تواند براي دكمه هاي تعريف شده كليك كند را مشخص كنيد. محدوده را هر چه مي توانيد بزرگتر بسازيد. بهتر است تمام محدوده دكمه قابل كليك كردن باشد. گام پنجم :تصاوير را آماده كنيد هر يك از تصاوير ما در اسلايد نمايش مجموعه عكس ها بايد داراي يك KeyFrame در يك لايه باشد. تصاوير در يك لايه و دكمه ها در يك لايه ديگر. مي توانيد تصاوير را در هر جا كه خواستيد قرار دهيد. پيش نمايش هر موضوع در پنجره قابل نمايش است. گام ششم :دكمه هاي بيشتري اضافه كنيد در پايين هر تصوير مي خواهيم يك دكمه عقب و جلو بگذاريم. مانند قبل دكمه ها را ترسيم كنيد و متن را وارد كنيد. سپس حالت هاي مربوط به هر يك را برايشان تعريف كنيد. به هر دكمه يك نام مشخص بدهيد به نحوي كه هر كدام به سادگي قابل تعريف باشند.براي افزودن صدا به هر دكمه قاب مربوط را در Time line انتخاب نماييد و پنجره ها و ويژگي هايشان را تنظيم كنيد و يك صدا را از منوي آن انتخاب كنيد. گام هفتم :تعيين كردن حالت هاي دكمه دوباره حالت هاي(hit, Over, down, up) راتعريف كنيد و دكمه ها را در زير تصاوير جاسازي كنيد. دكمه هاي مثالي در اين جا بسيار ابتدايي هستند. شايد مايل باشيد از دكمه هاي پرنقش تري استفاده كنيد و به آن حس سه بعدي بدهيد. خيلي راه دور نرويد و كار را سخت كنيد. واضح و ساده بودن دكمه بايد هدف اصلي شما باشد.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۳۰ مراجعه امروز
۵۶۴۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آشنايي با Actionscript در Flash
تاريخ :۲۶/۳/۱۳۸۳
متن خبر:
براي تعيين و تعريف اعمال مختلفي كه لازم است براي هر يك از رويدادها انجام شوند مي توانند از Actionscript ( محيط برنامه نويسي flash ) استفاده نماييد . اين ابزار مجموعه اي از دستورالعملها بصورت كد نويسي است كه يك واقعه ، يك هدف و يك عمل را معرفي مي كند . رويدادها مي توانند به دو صورت فعال شوند اول ـ به طور اختياري ، يعني توسط كليد ماوس يا صفحه كليد ، يا هر عمل ديگري در محيط كار و دوم – به وسيله گذشت زمان ، يعني بعد از گذشت مقدار معيني زمان ، رويداد فعال شود . تعريف يك رويداد (event) براي كليد : براي تعريف يك رويداد بايد از پانل Action استفاده كنيد . براي دسترسي به اين پانل مي توانيد از منوي window گزينه Action را انتخاب نماييد و يا بر روي نوار عنوان پانل Action كليك نماييد . پس از اينكه پانل Action باز شد براي اينكه بتوانيد عملي را به كليد خود نسبت دهيد ، بايد نوع عمل را از گروه مربوط به آن انتخاب نماييد . براي مثال : موضوعي را با هم دنبال مي كنيم . روي آيكن Action كليك كرده ، سپس روي آيكن move contorol كليك مي كنيم . اكنون مي توانيد براي كليد خود كه قبلاً وارد صحنه كرده ايد رويدادي مناسب را انتخاب نماييد . براي اين منظور از رويدادهاي موجود در بخش move contorol استفاده مي نماييم .


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۳۳ مراجعه امروز
۵۶۴۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : هشدار به وجود حفره های جديددر مرورگر اينترنت
تاريخ :۲۶/۳/۱۳۸۳
متن خبر:
بخش خبر آی تی ایران - باز هم ميزان هشدارهاى امنيتى در اينترنت افزايش يافت و باز هم چهار حفره جديد در مرورگر اينترنت (Internet Explorer) مشاهده شد كه به مهاجمان امكان حمله به كدهاى سيستم ويندوز را مى‌دهد. كارشناسان امنيتى اعلام كردند، چهار حفره جديد مشاهده شده در IE حتى در مورد كاربرانى كه به تازگى ويندوز خود را به روزرسانى كرده و وصله‌هاى جديد نصب كرده‌اند نيز خطرناك‌ به حساب مى‌آيد. بر اساس گزارش‌هاى به دست آمده در حال حاضر و با استفاده از برخى حفره‌هاى جديد IE به كاربران ويندوز حملاتى انجام شده است. يك سخنگوى مايكروسافت اعلام كرد اين شركت به دقت حملات انجام شده به كاربران ويندوز را زير نظر گرفته و به سرعت اقدامات لازم در خصوص رفع اين مشكل را به عمل خواهد آورد. دو حفره از چهار حفره مذكور توسط فردى كه خود را «رافل ايگوى» ناميده، كشف شده است.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۳۶ مراجعه امروز
۵۶۵۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : كار با اصوات در Flash MX
تاريخ :۲۶/۳/۱۳۸۳
متن خبر:
اصوات در فيلمهاي flash اهميت زيادي دارند . براي استفاده از فيلم هاي صوتي در محيط flash ، روش هاي گوناگوني وجود دارند . دو نوع صوت در محيط flash وجود دارد كه عبارتند از صداي رويداد و صداي سيال . يك صداي رويداد بايد پيش از پخش بطور كامل بارگذاري شود . صداهاي سيال به محض بارگذاري چند فريم اوليه بطور خودكار پخش مي شوند اين صداها با خط زمان هماهنگ مي شوند تا بر روي يك سايت وب اجرا گردند براي شروع يك فيلم داراي دكمه كنترل را باز مي كنيم . در ابتدا شما را با انواع اصوات موجود در flash آشنا مي كنيم . فيلمهاي flash مي توانند از فيلمهاي صوتي با قالبهاي mp3.Aiff.wav استفاده كنيد . همچنين در صورتي كه نرم افزار Quick time نگارش يا بالاتر را بر روي تيم نصب كنيد ، فرمتهاي Au. Quicktime. Soundoesigner و system7 نيز قابل استفاده خواهند بود. شما مي توانيد براي وارد كردن فيلم هاي صوتي از گزينه import واقع در منوي file استفاده كنيد . براي اين منظور بايد در پنجره import قالب مورد نظر خود را انتخاب كرده و در پوشه مربوط به فايلهاي صوتي بارگذاري نماييد . پس از وارد كردن يك فايل صوتي ، فايل مزبور در كتابخانه فيلم ظاهر ميشود . همچنين اين امكان وجود دارد كه فايلهاي صوتي را از منابع مختلف اينترنت بدست آوريد . چگونگي استفاده از اصوات عمومي در Flash MX flash داراي يك كتابخانه اصوات اختصاصي ميباشد . كتابخانه common library داراي فايلهاي صوتي ميباشند . با اينكار مشاهده خواهيد كرد كه كتابخانه sound library براي شما باز خواهد شد . ما مي خواهيم از اين كتابخانه براي اعمال صدا به كليد خود استفاده كنيم . شما مي توانيد به هر يك از حالتهاي يك كليد ، نظير down. Up يا over يك صوت اعمال نماييد . در flash اين امكان وجود دارد كه به هر كدام از رويدادهاي كليد صداي دلخواه را اضافه نماييد . براي مثال ميخواهيم به حالت down كليد ، صدا اضافه نماييم براي اين منظور بايد فريم down را انتخاب كرده و فايل صوتي را به وسيله ماوس در صحنه قرار دهيم . چگونگي وارد نمودن يكي از اصوات window به flash : اضافه نمودن صوت به فريمهاي فيلم ، كمي پيچيده تر از اعمال صداي كوتاه به يك فريم كليد مي باشد . با قرار دادن فايلهاي صوتي در يك فريم اصلي ، مي توانيد آن را به يك فيلم نسبت دهيد . فريمي كه شماره فايل صوتي را در آن قرار مي دهيد قابي است كه صدا از آنجا شروع مي شود مشكل اين است كه طول فايل صوتي بر حسب تعداد فريمها تعيين نمي شود ، بلكه طول فايل و همچنين ميزان سرعت down to cod و پخش آن در كاوشگر وب ، تعيين كننده تعداد فريم ها ميباشد . بنابراين همزمان نمودن فايلهاي صوتي طولاني با فريم ها كار مشكلي است . براي اين كار ، از منوي file ، گزينه open را انتخاب كرده و سپس روي فايلي دابل كليك مي كنيم . در اين مرحله مي خواهيم يك فايل صوتي را به فيلم خود اضافه كنيم . همانطور كه گفتيم ، همزمان نمودن فايلهاي صوتي با قابها كار مشكلي است ، براي راحتي كار بهتر است يك لايه جداگانه براي فايل صوتي ايجاد كنيد كه اين امر موجب سهولت در پيگيري محل استقرار فايلهاي صوتي مي شود . براي افزودن صوت ، كافيست پس از انتخاب محدوده مورد نظر فايل وارد شده را از ليست باز شونده sand واقع در پانل propontes را بر مي گزينيم و از آن ليست يك صوت را بر مي گزينيم خواهيد ديد كه فايل صوتي به لايه اضافه خواهد شد حال براي نمايش كار خود مي توانيد از كليد همزمان ctrl+enter استفاده كنيد . چگونگي همزمان نمودن اصوات با فيلم : شما مي توانيد براي همزمان نمودن فريمهاي فيلم خود با فايلهاي صوتي ، از ليست باز شونده syne واقع در پانل properties استفاده نماييد . در محدوده ميان فريمهائي كه مي خواهيد sound را در آنجا قرار دهيم دابل كليك نموده و سپس ليست باز شونده sync را باز كرده و روي گزينه streen كليك كنيد . شما فايل صوتي خود را براي فريم هاي مورد نظرتان همزمان نموده ايد . هنگامي كه فايلهاي صوتي را با فريم هاي فيلم همزمان مي كنيد ، در صورت لزوم flash طول فايل صوتي شما را كوتاه مي كند تا با تعداد فريمهاي فيلم هماهنگ شوند . flash اين امكان را در اختيار شما قرار مي دهد كه حجم صدا و توازن آن را در خودتان تنظيم نماييد . اينكار از طريق پنجره Edit Envelope در دسترس ميباشد . براي مشاهده اين پنجره ، بايد ابتدا يكي از فريمهايي را كه صوت در آن وجود دارد انتخاب كرده و سپس از كليد Edit واقع در پانل properties استفاده نماييد . حال مشاهده ميكنيد كه پنجره Edit envelope باز شده است . در اين پنجره مي توانيد صدا را طوري تنظيم نماييد كه از چپ به راست و يا بر عكس كوتاه شود ، پخش گردد و يا بلند گردد . با استفاده از ليست باز شونده Effeet ، مي توان جلوه اي صوتي را به صوت موجود اضافه نمود . به اين ترتيب ما توانستيم يك جلوه صوتي به صداي خود اضافه نماييم حال براي مشاهده نتيجه كار خود از كليدهاي ctel+enter استفاده مي كنيم . چگونگي تغيير دادن جحم و اضافه نمودن جلوه هاي صوتي : flash اين امكان را در اختيار شما قرار مي دهد كه حجم صدا و توازن آن را خودتان تنظيم نماييد . اينكار از طريق پنجره Edit envelope در دسترس ميباشد . براي مشاهده اين پنجره بايد ابتدا يكي از فريم هائي را كه صوت در آن وجود دارد انتخاب كرده و سپس از كليد edit واقع در پانل properties استفاده نماييد .


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۳۹ مراجعه امروز
۵۶۵۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : مايكروسافت براي بازداشتن هكرها از حمله، به سرعت اقدام مي كند
تاريخ :۲۶/۳/۱۳۸۳
متن خبر:
شركت مايكروسافت، بزرگترين سازنده نرم افزارهاي جهان، براي رفع حفره اي كه در مرورگر اينترنتي اش به وجود آمده و به هكرها اجازه دسترسي به سيستم هاي كامپيوتري را مي دهد، به سرعت در حال اقدام است. به گزارش بخش خبر سايت IRITN.com، به نقل از BBC News، بر اساس گفته هاي سخن گوي اين شركت: « مايكروسافت در حال بررسي گزارش هايي از حمله بدخواهاني است كه از اين آسيب پذيري بهره برداري مي كنند. » اين مشكل از اينجا به وجود آمد كه يكي از كاربران ندانسته روي يكي از لينك هاي به اصطلاح بدخواهانه كليك مي كند كه منجر به راه اندازي يك دان لود نرم افزاري مي شود و سپس هكرها به داده ها و فايل هاي روي كامپيوتر دسترسي كامل پيدا مي كنند. اين خطر در اين واقعيت نهفته است كه لينك ها مي توانند تغيير قيافه دهند و شبيه يك URL با نيتي درست شوند و اينكه نرم افزارها بدون هيچ هشداري دان لود مي شوند. تيم فوريت هاي كامپوتري آمريكا تقريبا در مورد اين مشكل هشدار داده بود. نرم افزار ويندوز مايكروسافت روي 90 درصد از كامپيوترهاي جهان نصب است.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۴۲ مراجعه امروز
۵۶۵۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : مخابرات ISP ها را مسدود مي كند
تاريخ :۲۷/۳/۱۳۸۳
متن خبر:
دبير انجمن ISP ها فعاليت مخابرات در زمينه مسدود سازي ISP ها را تاييد كرد. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران ، به نقل از ايلنا، مهندس پارسا دبير انجمن ISP ها گفت:در چند روز اخير مخابرات ISP هايي كه ارسال خود را از طريق مخابرات و دريافت را نيز از طريق ماهواره انجام مي دهند,مسدود ساخته است. وي, با اشاره به قوانين و آيين نامه هايي كه مخابرات در رابطه با ISP ها دارد,افزود: پهناي باند مخابرات براي سرويس دهي در شهرستانهاي استان تهران مانند, ورامين، كرج و غيره كافي نيست ولي در عين حال به ISP ها اجازه نمي دهند كه از ماهواره براي دريافت خود استفاده كنند. وي در ادامه تصريح كرد: انجمن ISP ها مذاكراتي با شركت مخابرات انجام داده است تا ادامه فعاليت آن ها را ميسر سازد. وي همچنين مسدود سازي ISP ها در ساير استان ها مانند, خوزستان و اصفهان را تاييد كرد.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۴۵ مراجعه امروز
۵۶۶۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : لب تاپ هاي Centrino حمايت رسمي لينوكس را به دست آورد
تاريخ :۲۷/۳/۱۳۸۳
متن خبر:
به كسانيكه بي صبرانه منتظر حمايت رسمي مجموعه چيپ Centrino تحت لينوكس بودند بايد گفت كه سرانجام كمك هاي شركت هاي اينتل و IBM در راه است. به گزارش بخش خبر سايت IRITN.com، به نقل از The Inqurer، شركت هاي IBM و اينتل هفته گذشته اولين ايستگاه كاري مبتني بر لينوكس و آخرين ايستگاه كاري سيار خود را معرفي كردند. اين پروژه براي افزايش بهره وري كار مهندسان در يكي از پر طرفدارترين رشته هاي امروزي كامپيوتر طراحي شده است. علاوه بر اينتل، مهندسان شركت هاي National Semiconductor و IBM Microelectronics در حال استفاده از ايستگاه كاري سيار Think Pad شركت IBM به شكل زبان برنامه نويسي پايلوت هستند. بر طبق گفته هاي شركت IBM، مهندسان با استفاده از اين كامپيوتر كيفي جديد قادرند در هر مكاني حتي اگر از اداره خود نيز دور باشند برنامه هاي خود را طراحي و تشريك مساعي كنند. برنامه نويسان اينتل در حال استفاده از راه حل هايي به شكل زبان برنامه نويسي پايلوت براي ماموريت هاي توسعه محصول و علوم مهندسي هستند و نيز با طرح هايي براي شروع يك توسعه گسترده تر در نيمه دوم سال. نماينده شركت هاي اينتل و IBM هفته گذشته و در كنفرانس اتوماسيون ( خود كار كردن ) طراحي و در جلسه بين المللي طراحي پيشرفته الكترونيكي اين راه حل ها را تشريح كرد. با اضافه شدن حمايت رسمي لينوكس به Think Pad T42P جاري يك ايستگاه كاري سيار و با دوام با كارايي گرافيكي عالي روي صفحه نمايش هاي 15 اينچي بزرگ Flexview ( ديد انعطاف پذير ) فراهم خواهد شد. اين صفحه نمايش ها از زاويه 170 درجه قابل رويت هستند. فن آوري ديگر كه از Think Pad t42P انتقال يافته « فن آوري كيف هوايي » IBM نام دارد كه براي نگهداري داده ها در هارد درايو، در مواقعي كه كامپيوتر كيفي ممكن است سقوط كند ساخته شده است.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۴۸ مراجعه امروز
۵۶۶۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : ايران به تكنولوژي ساخت UPSهاي پر قدرت دست يافت
تاريخ :۲۷/۳/۱۳۸۳
متن خبر:
پژوهشگران جهاد دانشگاهي واحد علم و صنعت, با حمايت شركت ملي صنايع پتروشيمي براي اولين بار به تكنولوژي طراحي و ساخت UPSهاي پرقدرت دوبل موازي كه به عنوان منابع تغذيه برق در پروژه‌‏هاي صنعتي و پتروشيمي كاربرد دارند, دست يافته و كشور را از واردات اين تكنولوژي بي‌‏نياز ساختند. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از ايلنا,دكتر طيبي, رئيس جهاد دانشگاهي واحد علم و صنعت, در همايش فني, تخصصي دستيابي به اين تكنولوژي كه صبح امروز در دانشگاه علم و صنعت ايران برگزار شد, با اعلام اين خبر افزود: ساخت UPS تا قدرت kVA 150 و با ويژگي‌‏هاي منحصر به فرد براي اولين بار در خاورميانه صورت مي‌‏پذيرد. وي خاطرنشان كرد: هزينه ساخت اين UPSها حدود نصف مشابه خارجي است و به تاييد كارشناسان داخلي و خارجي, قابل رقابت با تكنولوژي‌‏هاي روز دنيا است. رئيس جهاد دانشگاهي واحد علم و صنعت با اشاره به اهميت دستيابي به اين تكنولوژي تصريح كرد: تغذيه برق صنايع حساس و استراتژيك چون صنايع نفت, گاز, پتروشيمي و برق, مستلزم استفاده از UPSهايي با ضريب اطمينان بالاست كه در صورت بروز مشكل, مانع از آسيب ديدگي سيستم‌‏هاي كنترل, مانيتورينگ و ساير اجزاي حساس اين صنايع گردد. دكتر طيبي ادامه داد: تاكنون بالاترين نوع اين تكنولوژي در اختيار چند كشور خارجي بوده و جهاد دانشگاه واحد علم و صنعت با ساخت اين تجهيزات 95 درصد از نياز كشور را به اين تكنولوژي به لحاظ قابليت و قدرت, پوشش داده است و هم اكنون در فازهاي مختلف پارس جنوبي و ساير پروژه‌‏هاي بين‌‏المللي به عنوان تنها شركت داخلي سازنده UPS در ليست سازندگان مورد تاييد قرار گرفته است. رئيس جهاد دانشگاه واحد علم و صنعت, اشتغال‌‏زايي را از ديگر ويژگي‌‏هاي اين طرح عنوان كرد و افزود: هر 5 كيلوولت آمپر UPS به طور مستقيم و غير مستقيم مي‌‏تواند يك شغل ايجاد كند و با ارتقاي قدرت اين دستگاه تا يك مگاوات حدود 200 شغل ايجاد مي‌‏شود كه گام موثري در اشتغال‌‏زايي محسوب مي‌‏شود. دكتر طيبي در پايان لازمه توسعه پايدار را استفاده از توليدات و تكنولوژي بومي دانست و تصريح كرد: كشور توان جبران عقب ماندگي‌‏هاي تكنولوژيك را دارد و با وجود برنامه‌‏هاي جامع و هماهنگ توسعه و حمايت مسئولان از تكنولوژي‌‏هاي داخلي است كه مي‌‏توان در جهت جبران اين عقب ماندگي‌‏ها گام برداشت.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۵۱ مراجعه امروز
۵۶۶۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : برخورد با ISPها به شهرستان‌ها كشيده شد
تاريخ :۲۷/۳/۱۳۸۳
متن خبر:
ایسنا - به دنبال پلمپ حدود 70 مركز ارايه‌دهنده‌ى اينترنت در تهران طى هفته‌هاى گذشته، برخورد با ISPها به شهرستان‌هاى اصفهان، قزوين و ورامين كشيده شد. به گزارش خبرنگار سرويس ارتباطات خبرگزارى دانشجويان ايران (ايسنا)، طى 2 روز گذشته جمع‌آورى تجهيزات ماهواره‌يى و قطع‌ كردن پهناى باند تعدادى از ISPهاى برخى شهرستان‌ها انجام شده است. همچنين طبق آخرين گزارش‌ها پرونده‌هاى هفتاد ISP پلمپ شده در تهران كماكان مفتوح بوده و برخى از آن‌ها نيز فك پلمپ شده‌اند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۵۴ مراجعه امروز
۵۶۷۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : مايكروسافت، Crystal و ديگر نقايص را برطرف كرد
تاريخ :۲۸/۳/۱۳۸۳
متن خبر:
شركت مايكروسافت فايل‌های اصلاحی برای نرم افزارهای Outlook 2003، Visual Studio و برنامه كاربردی CRM خود به منظور مسدود كردن يك حفره امنيتی در بخش Business Objects برنامه Crystal Reports و Crystal Enterprise خبر داد. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از PCWorldIran، مايكروسافت كه ابزار گزارش گيری Business Objects را با اين سه محصول يعنی Outlook 2003، Visual Studio و CRM عرضه می‌كند، شدت آسيب‌پذيری را متوسط ارزيابی می‌كند. اين شركت همچنين جهت ويندوز XP و ويندوز سرور 2003 يك فايل اصلاحی در ارتباط با بازيها عرضه كرده است.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۵۷ مراجعه امروز
۵۶۷۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : انتشار ويروس Cabir از طريق گوشي تلفن همراه
تاريخ :۲۸/۳/۱۳۸۳
متن خبر:
محققان يك شركت نرم‌افزاري از ظهور ويروس جديدي موسوم به كابير (Cabir) خبر دادند كه از طريق گوشي تلفن همراه گسترش پيدا مي‌كند. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از ايسنا به نقل از پايگاه اينترنتي نيوز فاكتور، شركت نرم‌افزاري پاندا اعلام كرد اين اولين ويروس خطرناكي است كه توانايي منتشر شدن از طريق تلفن را دارد. اين ويروس مخرب به دستگاه‌هايي راه‌ پيدا مي‌كند كه از سيستم Symbian OS استفاده مي‌كنند كه در بسياري از مدل‌هاي تلفن‌هاي شركت‌هاي نوكيا، زيمنس، سوني و اريكسون وجود دارد. ظاهرا هدف نويسندگان اين ويروس انتشار گسترده‌ آن نبوده است، بلكه هدف آن‌ها نشان دادن مستعد بودن اين ابزار براي آلوده شدن به اين قبيل كرم‌هاي مخرب بوده است. اين ويروس در فايلي موسوم به Caribe.sis منتشر مي‌شود كه اين فايل در صورت پذيرفته شدن از سوي كاربر به طور خودكار روي سيستم باز مي‌شود. ابتدا پيغامي را روي صفحه نمايش به مضمون Caribe نشان مي‌دهد و سپس شروع به جستجوي سيستم‌هاي ديگر براي فرستادن خود بر روي آن‌ها مي‌كند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۶۰ مراجعه امروز
۵۶۷۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : قلم رايانه اي براي جابجايي فايل هاي ديجيتالي جايگزين موشواره مي شود
تاريخ :۲۸/۳/۱۳۸۳
متن خبر:
محققان ژاپني موفق به ساخت قلم رايانه يي شده اند كه به جاي موشواره براي انتقال فايل ديجيتالي از رايانه اي به رايانه ي ديگر استفاده مي شود. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از ايسنا به نقل از پايگاه اينترنتي آنانووا، كارشناسان آزمايشگاه هاي علوم رايانه اي سوني در توكيو طراحان اين قلم الكترونيكي هستند. عملكرد اين قلم به گونه اي است كه كاربران رايانه هاي مختلف در يك اتاق مي توانند بدون نياز به استفاده از پست الكترونيك، ديسك ها و يا سرورهاي فايل مشترك، فايل ها را بين رايانه ها منتقل كنند. جون ركي موتو از توسعه تكنيك جستجو و گذاشتن در اغلب نرم افزارهاي رايانه هاي شخصي، براي ايجاد تكنيك برداشتن و گذاشتن استفاده كرده است. بنابراين دارندگان رايانه هاي دستي مي توانند با استفاده از اين قلم مخصوص، يك فايل را از سيستم خود برداشته و آن را روي صفحه نمايش رايانه ديگر با قرار دادن قلم بر روي صفحه سيستم بچسباند. به كمك اين تكنيك امكان تبادل فايل ها ميان رايانه ها در بين دانشجويان، معاوضه كارت هاي تجاري الكترونيك ميان مشتركان جديد و يا معاوضه وب سايت ها و تراك هاي موسيقي ميان دوستان، آسان تر مي شود.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۶۳ مراجعه امروز
۵۶۷۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : شركت Dell، ايتانيوم را در سرورهای با چهار پردازنده قرار داد
تاريخ :۲۸/۳/۱۳۸۳
متن خبر:
شركت Dell، ارسال سرورهای با 4 پردازنده كه بر مبنای چيپ 64 بيتی ايتانيوم 2، محصول شركت اينتل می‌باشد را آغاز كرده است. PowerEdge 7250 دومين سيستم مبتنی بر ايتانيوم می‌باشد كه در حال حاضر توسط شركت Dell عرضه شده است. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از PCWorldIran، اما اين شركت اظهار داشته جهت اين سرور رشد مطلوبی را برای تكنولوژی 64 بيتی جهت كاربرانی كه احتياج دارند از محدوديتهای حافظه فيزيكی كامپيوترهای 32 بيتی خلاص شده و خود را به 4 گيگابايت برسانند فرصت مناسبی است. قيمت فروش 7250، حدود 22099 دلار خواهد بود.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۶۶ مراجعه امروز
۵۶۸۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : شركت AMD، استراتژي پردازنده هاي دو هسته اي را تشريح مي كند
تاريخ :۲۸/۳/۱۳۸۳
متن خبر:
شركت AMD كه طرح هاي اعلام شده براي پردازنده هاي دو هسته اي خود را كمي بيشتر باز كرده است، روز دوشنبه اعلام كرد كه اين شركت طرح هاي خود براي سرورهاي دو هسته اي و پردازنده هاي دسك تاپ را تكميل كرده است. كه در سال 2005 وارد بازار خواهد شد. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، آقاي فرد وبر ( Fred Weber ) از شركت AMD اعلام كرد: « هر دو پردازنده دو هسته اي بر اساس فن آوري AMD 64 اين شركت خواهد بود. » وي در ادامه افزود: « اين سيستم شامل توسعه هاي 64 بيتي و نيز يك تنظيم كننده جامع حافظه است كه به AMD براي طراحي دو هسته اي كمك مي كند. » چيپ هاي دو هسته اي دو پردازنده جدا روي يك چيپ هستند. براي افزايش كارايي كه صنعت چيپ را بيش از يك دهه توصيف كرده است، طراحان چيپ در جستجوي روش ديگري براي افزايش كارايي چيپ بدون افزايش سرعت ساعت چيپ بوده اند. و در نتيجه مقدار انرژي كه مصرف مي كند، به نظر مي رسد كه صنعت روي طراحي دو هسته اي ها به عنوان روشي كه كارايي آنها را حفظ خواهد كرد، متمركز شده است. شركت هاي سان مايكروسيستم و IBM تقريبا چيپ هاي دو هسته اي را براي سرورها به عنوان راهي براي افزايش كارايي بدون متوسل شدن به سرعت ساعت سريعتر و بنابراين مصرف انرژي افزايش يافته، منتشر كرده اند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۷۶ مراجعه امروز
۵۵۹۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آموزش اكسس ( بخش اول )
تاريخ :۱۱/۴/۱۳۸۳
متن خبر:
مقدمه مديريت پايگاه داده ها (چه داده هاي متني يا تصويري يا غيره) شايد مهمترين كاربردي بوده است كه همواره از كامپيوترهاي تجاري خواسته شده است. به همين دليل در چند سال گذشته قبل از ظهور محيطهاي مبتني بر رابط گرافيكي شاهد حكومت زبان cobol بر امپراطوري كامپيوتر بوديم. بعد از اين امر ظهور برنامه dBase و فروش حيرت آور آن خبر از همين احتياج مبرم به پايگاه داده ها مي داد. باز در اين عرصه نيز شركت مايكروسافت بيكار ننشست و Access كه كاستيها و اشكالات برنامه هاي قبلي را برطرف نموده و كار با داده ها را به صورت فوق العاده اي راحت تر ميکند عرضه کرد. اين برنامه كه همراه با كار در محيط كاملا گرافيكي ويندوز حتي قابليت نصب در شبكه و internet را نيز دارد بدون شك يك نياز شركتهاي تجاري, برنامه نويسان, طراحان صفحات وب و حتي براي اشخاص معمولي براي كنترل داده ها و اطلاعات خود بوده است. ما در اين دوره آموزشي شما را با قابليت access آشنا كرده و شايد اگر اغراق نكرده باشم شما را استاد اين برنامه بي نظير خواهيم كرد شما نيز لحظه به لحظه به آشنايي با قابليتهاي اين برنامه مطمئنا مشتاق ياگيري هرچه سريع آن خواهيد شد. قابل ذكر است كه ما در اين دوره برنامه اكسس 2000 را براي آموزش انتخاب كرده ايم كه البته نسخه هاي ديگر اين برنامه فرق چنداني با نسخه 2000 آن ندارد و شما مي توانيد با يادگيري اين نسخه با ان نيز به راحتي كار كنيد. (البته توصيه خود من به استفاده از نسخه 2000 است) آشنايي با اكسس اكسس كه يكي از برنامه هاي موجود در بسته نرم افزاري آفيس( Microsoft Office ) است براي ساماندهي و كنترل و مديريت پايگاه داده ايجاد شده است. اين برنامه داراي قابليتهاي بسيار است , مانند ايجاد صفحه ورود اطلاعات به شكل دلخواه. به عنوان مثال وقتي شما مي خواهيد اطلاعات موجود در يك چك را در كامپيوتر خود ذخيره كنيد شما با استفاده از برنامه اكسس مي توانيد صفحه ای درست همانند صفحه چك ايجاد كنيد و اطلاعات را به صورت كاملا گرافيكي در آن وارد كنيد. شما پس از ايجاد پايگاه داده هايتان حتي مي توانيد از آنها گزارش گرفته و يا در بين اطلاعات خود جستجو كرده البته تمامي اين امكانات را شما با دستان قدرتمند خود ايجاد خواهيدكرد. از موارد استفاده برنامه اكسس به طور شهودي مي توان به استفاده آن در قسمت حسابداري يك شركت و يا نگهداري اطلاعات اشخاص عضو در سايتتان و حتي نگهداري اطلاعات كارمندان (حتي عكس آنها) و موارد بسيار متنوع ديگر اشاره کرد. شما پس از ايجاد اين پايگاه داده حتي مي توانيد آن را در شبكه در اختيار ديگران قرار داده يا بر روي آن كليد رمز گذاشته يا حتي در سطح كاربران مختلف مقدار دسترسي هر كاربر را تعيين كنيد. روش ادامه درس ما در جلسات بعدي به صورت زير خواهد بود: ابتدا آشنايي با محيط اكسس و تسلط كامل بر آن كار با help برنامه(به صورت مختصر) آشنايي با پايگاه داده هاي نمونه بررسي و كار با اجزاي اصلي طراحي يك پايگاه داده جديد كار با جدولها كار با داده ها كار با بازجست ها ( Query ) كار با فرمهاي ورود اطلاعات كار با گزارشها خودكارسازي با ماكروها برنامه نويسي با مدولها كاربرد پيشرفته اجزاي اكسس حفظ امنيت در پايگاه داده كار با برنامه هاي كمكي اكسس سوالات خود را به طور كامل بيان كنيد تا امكان پاسخگويي به آنها باشد. برای مطالعه ی این دوره ی آموزشی نیاز است کاربران محترم آشنایی مقدماتی با محیط Windows داشته باشند . جهت نصب و اجرای نرم افزارهای Office که اکسس نیز شامل آن می شود ، نیاز به سیستمی با مشخصات ذیل می باشد : - حداقل سیستم مورد نیاز پنتیوم 233 - 16 مگابایت Ram - حدود 600 مگا بایت فضای آزاد شروع کار با اکسس در درس قبل با قابليتها و كاربردهاي اكسس آشنا شديد و ضرورت استفاده از اين برنامه در جهات مختلف زندگي آشنا شديد و با توجه به كاركرد راحت اكسس و شي گرا بودن آن اكسس نسبت به برنامه هاي ديگر مديريت پايگاه داده ها امتيازات بيشتري دارد. مفهوم شي گرائي: وقتي كه در مورد يك برنامه از مفهوم شي گرايي صحبت مي كنيم يعني در هنگام كار با آن همواره با شي هاي مختلف سروكار داريد و حتما لازم نيست كه زبان برنامه نويسي خاصي بلد باشيد يعني در واقع شي گرايي كنترل و مديريت اشيا و نحوه قرارگيري آنها به جاي استفاده از دستورات است. به عنوان مثال وقتي ما مي خواهيم در محيطي مانند faxpro يك دكمه ايجاد كنيم كه هنگام فشاردادن آن اطلاعات كاربري مشتري در جدول ثبت شود بايد دستورات بسيار پيچيده و ويژه اي بنويسيم ولي در محيط اكسس كافي است از قسمت ابزار با استفاده از شي دكمه (وسيله اي جهت ساخت دكمه هاي مختلف) اين دكمه را به راحتي ايجاد مي كنيم . آغاز كار با اكسس: شما بعد از نصب بسته نرم افزاري آفيس مي توانيد با رفتن به قسمت start سپس قسمت programs و انتخاب microsoft access وارد محيط اكسس شويد. البته بسته به نحوه نصب شدن برنامه ممكن است برنامه اكسس در قسمت ذكر شده نباشد و به صورت معمول اين برنامه در اين قسمت قرار مي گيرد. با وارد شدن به محيط اكسس با پنجره اي مانند شكل 21 ظاهر مي شود كه به شما امكان مي دهد تا آنچه را كه مي خواهيد انجام دهيد انتخاب كنيد.گزينه هاي موجود در اين قسمت به ترتيب زير است: 1- Blank access database : با استفاده از اين گزينه شما مي توانيد يك پايگاه داده جديد ايجاد كنيد. 2 - access database wizards : با استفاده از اين گزينه شما مي توانيد با استفاده از جادوگر اكسس كه كار شما را بسيار آسانتر مي كند يك پايگاه داده بسازيد (بعدا به طور مفصل توضيح خواهم داد) 3- open an exiting file: با اين گزينه شما مي توانيد پايگاه داده اي را كه قبل ايجاد كرده ايد براي ايجاد تغييرات دوباره باز كنيد. 4- از كادر زير قسمت 3 شما مي توانيد پايگاه داده اي را كه به تازگي برروي آن كار كرده ايد باز كنيد. بعد از انتخاب گزينه مورد نظر شما بايد با زدن Ok به مرحله بعدي برويد. اگر هر خواستيد با زدن دكمه Cancel به محيط اكسس وارد شويد. (فعلا براي آشنايي با محيط اكسس Cancel را بزيند) ضمن قابل ذكر است كه براي ساختن پايگاه داده جديد آنرا بايد در همان ابتدا ذخيره كنيد و اينگونه نيست كه بعد از پايان كار آنرا ذخيره كنيد. آشنايي با محيط كار: محيط كار اكسس همانطور كه در شكل 22 مي بينيد بسيار شبيه محيطهاي ديگر ويندوز است و كار با آن بسيار آسان است. حال به صورت كوتاه به معرفي قسمتهاي مختلف محيط كار مي پردازيم: - ميله عنوان (Title bar): عنوان پايگاه داده در حال كار در اين قسمت ثبت مي شود و همچنين كنترل پنجره اكسس از همين قسمت صورت مي گيرد(چون فرض ما بر اين است كه شما بر محيط ويندوز و كنترل پنجره ها مسلط هستيد نياز به توضيح بيشتر نيست) 2- ميله منو (Menu bar): در اين ميله شما به وسيله منوهاي مختلف اقدام به ايجاد. كنترل و ويرايش پايگاه داده مي كنيد. در زير توضيح كوتاهي در مورد هر منو آمده است. ------------------ الف) File (فايل): فرامين لازم براي بازكردن و بستن پايگاه داده. دريافت داده از ساير پايگاه داده ها. ذخيره داده ها. تغيير خصوصيات پايگاه داده. چاپ و غيره ب) Edit (ويرايش): فرامين لازم براي ويرايش و وارد كردن داده ها پ) View (مشاهده): فرامين لازم براي انتخاب اجزا مختلف پايگاه داده. تغيير خصوصيات پايگاه داده فعال و غيره را در اختيار شما مي گذارد. ت) Insert (درج): فرامين لازم براي درج اقلام مختلف پايگاه داده ج) Tools (ابزارها): فرامين لازم براي اجراي برنامه هاي كمكي مختلف. تحليل پايگاه داده. امنيت و گزينه هاي متفاوت پيشرفته پايگاه داده چ) Windows (پنجره ها): فرامين لازم براي تغيير آرايش پنجره ها در محوطه كاري پايگاه داده ح) Help (كمك): دسترسي به كمك مستقيم ------------------- 3- ميله ابزار (Tool bar): در اين قسمت تعدادي از فرامين ضروري و پراستفاده در برنامه قرار دارد. 4- محوطه كاري پايگاه داده: در اين محوطه بزرگ شما بر روي پايگاه داده كار مي كنيد و داده ها را به آن مي افزاييد و آنها را ويرايش مي كنيد. 5- دستيار: اين دستيار براي آن است كه شما سوالات احتمالي ممكن خود را به طور مستقيم از او پرسيده و او با جستجو در خود برنامه و همچنين اينترنت تا حد ممكن جواب شما را پيدا كند(البته به صورت انگليسي) 6- ميله وضعيت: در ميله وضعيت اطلاعاتي راجع به كاري كه انجام مي دهيد. نمايش داده مي شود. و همچنين خطاها را مشاهده خواهيد كرد. توجه به اين نكته ضروري است كه در بعضي مواقع كه امكان استفاده از بعضي از فرامين موجود نمي باشد آنها به صورت غير فعال در مي آيند. در اينجا بايد تين نكته هم ذكر شود كه شما در هنگام انتخاب فرامين از منوها هم مي توانيد با استفاده از ماوس آنها را انتخاب كنيد و هم از كليدهاي ميانبر استفاده كنيد. روش كار كليدهاي ميانبر با استفاده از كليدهاي Ctrl و Alt و حرفي كه در هر فرمان زير آن خط كشيده شده است شما مي توانيد به صورت خيلي سريع به فشار همزمان آنها به فرمان دسترسي پيدا كنيد. اين قابليت هنگامي مفيد است كه شما در محيط اكسس بسيار ماهر شده ايد كه ديگر نياز به استفاده از ماوس نداريد. خروج از محيط اكسس: شما مي توانيد با انتخاب فرمان Exit از منو File از محيط اكسس خارج شويد. پایگاه داده های نمونه در درس قبل كار با اكسس را آغاز كرديم و در مورد محيط برنامه صحبت كرديم. در اين درس قصد داريم ابتدا مختصرا در مورد Help در برنامه صحبت كنيم و سپس به صورت مفصل در مورد پايگاههاي داده نمونه كه در خود اكسس موجود است صحبت كنيم. دسترسي به راهنما: راهنماي برنامه براي كساني كه آشنايي كامل به زبان انگليسي دارند مي تواند مانند يك مرجع كامل و معتبر باشد مثلا هرگاه در مورد عملكرد پايگاه داده. طراحي جدول. يا تعريف بازجست مشكل داشتيد مي توانيد از راهنماي برنامه كه به زبان انگليسي ساده و روان نوشته شده استفاده كنيد و مسلما در مورد سوال شما چه در خود برنامه يا تحت وب جوابي پيدا خواهد شد. در اكسس راههاي مختلفي براي دسترسي به راهنما وجود دارد كه متداولترين آنها استفاده از منو Help است.كه فرمامين موجود در اين منو را شرح مي دهيم: 1- Microsoft access Help : اين فرمان دستيار را فعال مي كند در صورتي كه دستيار فعال باشد وارد سيستم راهنمايي مي شود. شما مي توانيد با انتخاب اين گزينه سوالات خود را از دستيار بپرسيد و او نزديكترين جواب را به سوال شما خواهد داد اين امكان بسيار مي تواند براي شما مفيد باشد و دستيار مانند يك شخص ماهر به تمامي سوالات شما به طريقي پاسخ خواهد داد. 2- Hide The Office Assistant: شما مي توانيد با استفاده از اين فرمان دستيار را مخفي كنيد و اين در مواقعي به كمك شما مي آيد كه دستيار قدرت ديد شما در محيط را كاهش دهد. 3- What`s This: با استفاده از اين گزينه ماوس شما به يك علامت سوال تبديل مي شود و هر كجايي از محيط كه كليك كنيد در مورد آن شما را راهنمايي مي كند. 4- Office On The Web: به كمك اين گزينه مي توانيد به سايت ماكروسافت رجوع كنيد و آخرين امكانات و اصلاحات در برنامه و همچنين متداولترين سوالها را بپرسيد. 5- Detect and Repair: با استفاده از اين گزينه اگر در برنامه اكسس شما ايرادي باشد به صورت اتوماتيك رفع مي شود. 6- About Microsoft Access: در مورد نسخه فعلي اكسس اطلاعاتي در اختيار شما مي گذارد. يكي ديگر از راهنمايي ها كه در اكسس موجود است راهنماي شناور است به اين ترتيب كه با نگه داشتن نشانه ماوس بر روي يك فرمان به مدت چند ثانيه اسم و شايد راهنمايي كوچكي در مورد آن فرمان ظاهر شود. با توجه به اينكه بيشتر خوانندگان اين درس با محيط ويندوز و راهنماي آن آشنا هستند و راهنماي اكسس نيز مانند آن است من نياز بيشتري به توضيح نمي بينم. سيري در پايگاه داده هاي نمونه: در اكسس چهار پايگاه داده نمونه وجود دارد كه مي توانيد آنها را باز كرده. بررسي نموده و يا مورد استفاده قرار دهيد.(البته اين نكته قابل ذكر است كه شما حتما بايد در موقع نصب اين پايگاهها را انتخاب كرده باشيد تا نصب شوند وگرنه با قراردادن CD در درايو و نصب دوباره آنها كار را دنبال كنيد) اين پايگاهها براي كساني كه تازه شروع به كار با اكسس مي كنند بسيار مفيد است و چيزهاي مفيدي را در برمي گيرد. بعد از نصب پايگاه داده نمونه شما مي توانيد با استفاده از منو File و گزينه Open به پوشه Samples در جايي كه اكسس را نصب كرده ايد رفته و پايگاه داده را بازكنيد(امكان دارد اين پايگاه داده به صورت پيش فرض در پايين ترين قسمت منو File موجود باشد) ما در اين درس به توضيح پايگاه داده Northwind خواهيم پرداخت. قبل از شروع كار بايد اين نكته را ذكر كنم كه تمامي فايلها و جدولهاي اكسس در فايلي با پسوند MDB ذخيره مي شود. پايگاه داده Northwind امكان تمرين با يك نرم افزار پايگاه داده كامل را به شما مي دهد. اين پايگاه داده يك نرم افزار كنترل موجودي براي شركت فرضي Northwind Traders است. بعد از باز كردن اين پايگاه داده كه ممكن است مدتي طول بكشد. صفحه ابتدايي ظاهر مي شود كه شما مي توانيد با كليك روي Ok اين پنجره را رد كنيد. بعد از اين كار پنجره Database اين پايگاه نشان داده خواهد شد. اين پنجره جايي است كه اكثر كارهاي اكسس در آن انجام مي شود. اين پنجره هفت شاخص دارد كه شما را به شش جز اصلي Access مي برد. اين پنجره در شكل 31 نشان داده شده است. براي حركت در صفحات پنجره Database با ماوس برروي شاخصهاي كناري پنجره كليك كنيد. كلماتي كه در هر صفحه مشاهده مي كنيد. معرف جداول. پرسانه ها. فرمها. گزارشها. ماكروها و برنامه هاي خاص اين پايگاه است. مثلا نام يكي از جداول پايگاه داده Shippers است. اگر برروي هر يك از جداول دوبار كليك كنيد جدول مورد نظر باز مي شود. ديگر موارد را نيز مي توانيد با دوبار كليك باز كنيد به جز ماكروها كه اين اشيا به دليل اينكه شما تازه كار هستيد از دسترسي شما حفاظت مي شوند و من پيشنهاد مي كنم زياد با آنها ورنرويد و اين كار را به زماني كه به طور كامل با عملكرد آنها آشنا شديد موكول كنيد. هنوز انتظار درك پايگاه داده هاي نمونه را به طور كامل نداشته باشيد مثلا با كليك زدن مكرر به روي جدولOrders. Access جدول مورد نظر را نشان مي دهد كاري كه با اين جدول مي توانيد انجام دهيد اين است كه به سفارشات نگاه كنيد. جدول مانند يك صفحه گسترده الكترونيكي كه سطر و ستون دارد كار مي كند. با جدول كارهاي متنوعي مي توانيد انجام دهيد اما در اين مقطع فقط سعي كنيد با اكسس. منوهاي آن و صفحه رابط آن آشنا شويد. در ادامه دروس جزئيات لازم براي تسلط شما بر هر يك از اين موارد ذكر خواهد شد. شما در اين مرحله به تمامي فرمها و جدول يك نگاهي بياندازيد و سعي كنيد كه با انها بيشتر از قبل آشنا شويد. در اينجا توضيحات من در مورد اين پايگاه داده به پايان ميرسه شما تا درس بعدي تمامي پايگاههاي نمونه را يك مرور كلي كنيد و با آنها آشنا شويد و اين نكته را از ياد نبريد كه عجله نداشته باشيد با تمامي قسمتها به مرور آشنا خواهيد شد تا اينجا كه شما مي توانيد در بين پايگاهها به راحتي گردش كنيد كار بسيار موثري انجام داده ايد. از جلسات بعد بحث پيشرفته تري را در مورد اكسس شروع خواهيم كرد يعني تا اين قسمت دروس چيز خاصي را بيان نكرده ايم و فقط با محيط آشنايي كامل پيدا كرده ايد و كار اصلي ما از درس بعد شروع خواهد شد.(ضمنا كار با پايگاه داده هاي نمونه ديگر را فراموش نكنيد)


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۷۹ مراجعه امروز
۵۵۹۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : زمان فرستادن مرورگر Internet Explorer به زباله‌داني فرارسيده است !
تاريخ :۱۳/۴/۱۳۸۳
متن خبر:
آخرين نگارش مرورگر Internet Explorer‌؛ نسخه شماره 6 مي باشد که رکورد دار داشتن Bug هاي حساس مي باشد: يعني 153 باگ امنيتي از تاريخ 18 آوريل 2001 تا کنون بر اساس آرشيو سايت Security Focus. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از گروه امنيتي آشيانه، براي مثال در آخر ماه آگوست ؛ شرکت مايکروسافت برنامه اصلاحيه اي جهت مرورگر خود منتشر کرد براي رفع نقطه ضعفي که سايت مايکروسافت آنرا اينچنين شرح مي دهد : «اين باگ هکر را قادر به اجراي کدهاي مورد نظر روي سيستم قرباني مي نمايد و تنها با کليک روي لينک وب سايت يا صفحه HTML متعلق به هکر ؛ کدهاي Exploit اجرا شده و سيستم قرباني در اختيار هکر خواهد بود و نياز به هيچ کار اصافه اي از سوي قرباني نيست !!؟» بله ! صرفاً با يک کليک ؛ سيستم شما در اختيار نفوذگر خواهد بود. نمونه هائي از اين دست بسيار زياد است. بيائيد با يکديگر صادق باشيم. همه اين حقيقت تلخ را مي دانيم که IE نرم افزاري ناقص ؛ فاقد امنيت مناسب و منبع بسياري از گرفتاريها و دردسرهائي است که در باب امنيت اطلاعات تحمل مي کنيم. خوب با اين اوصاف راه حل چيست ؟ پيشنهاد ما استفاده از يک مرورگر بهتر مي باشد که بتواند راحتي خيال ما را نسبت به ايمني بيشتر تامين نمايد. يک مرورگر بهتر ( FireFox ) در چند روز گذشته شرکت Mozilla آخرين نسخه از مرورگر خود را با نام Mozilla FireFox منتشر کرد که از آدرس زير قابل دريافت است : http://www.mozilla.org/products/firefox/releases/#download مرورگر FireFox داراي قابليت هاي جالبي است و بنا به نظر کارشناسان يکي از بهترين مرورگرهاي حال حاضر مي باشد که از نظر امنيتي نيز در سطح مناسبي قرار دارد. به شما توصيه مي کنيم از اين مرورگر استفاده نمائيد و مطمئن باشيد پس از يک هفته استفاده از اين مرورگر هرگز به سراغ IE نخواهيد رفت. در اين خصوص آقاي Scott Granneman يکي از کارشناسان امنيت اطلاعات شرکت Bryan Consulting Inc. مقاله اي در سايت http://www.securityfocus.com ارائه کرده است . متن کامل مقاله ايشان را مي توانيد از آدرس http://www.securityfocus.com/printable/columnists/249 دريافت نمائيد .


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۸۲ مراجعه امروز
۵۵۹۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آموزش اكسس ( بخش دوم )
تاريخ :۱۳/۴/۱۳۸۳
متن خبر:
بررسی اجزای اصلی در درسهاي گذشته به طور كامل با محيط اكسس آشنا شديم و اميدوارم كه شما تمامي پايگاهاي نمونه را بررسي كرده باشيد و كاملا مفهوم كار با اكسس براي شما روشن شده باشد. درس اين جلسه يكي از مهمترين دروس در رابطه با اكسس است و شما حتما سعي كنيد به طور كامل اين درس را بفميد و حتما در مورد اين درس اگه سوالي بود بپرسيد چون واقعا فهميدن اين قسمت از اكسس كار را بسيار ساده خواهد كرد. در اين درس ما با بخشهاي مختلف پنجره Database آشنا مي شويم و چگونگي استفاده از هر يك را توضيح خواهيم داد. مي توان گفت پنجره Database سكوي پرتاب شما به سوي Access است, تمامي فعاليتهاي كه در اكسس انجام مي شود از اين محل شروع مي شود, آشنايي با اين پنجره مي توان گفت آشنايي با خود اكسس است. بعد از يادگيري اين بخش ار اكسس شما براحتي خواهيد توانست ديگر خصوصيات پايگاه داده را ياد بگيريد. من به شما توصيه مي كنم يكي از پايگاههاي داده نمونه را باز كنيد تا هنگام درس اجزاي اصلي پنجره Database را مشاهده كنيد. معني دقيق پايگاه داده ها به احتمال بسيار قوي شما با مفهوم پايگاه داده آشنا هستيد ولي ما براي ادامه كار اشاره كوچكي به آن مي كنيم. شايد اساسي ترين تعريف پايگاه داده اين باشد: پايگاه داده: مجموعه اي از داده هاي مرتبط به هم است. در واقع اين تعريف شامل هر نوع فايل داده اي كه با آن كار مي كنيد مي شود. مثلا نامه, گزارش و كتاب مجموعه اي از داده ها به صورت كلمات مرتبط به هم است. يا فايلهاي گرافيكي داده هاي مرتبطي است متشكل از نقاط رنگي بسياري (پيكسل) كه تصوير را تشكيل مي دهند. با توجه به اينكه ممكن است تعريف بالا كمي پيچيده و عمومي تر باشد در زير اشاره به تعريفي خاص در مورد پايگاه داده در اكسس مي كنيم: پايگاه داده اكسس: مجموعه اي است از داده هاي مرتبط و ابزارهايي كه با استفاده از آنها با داده ها كار مي كند. بنابراين پايگاه داده در اكسس از فايلهاي داده مرتبط به يكديگري تشكيل شده است كه به همراه ابزارهايي كه شي ناميده مي شوند به شما امكان دسترسي, گردآوري و گزارش گيري از داده ها را مي دهد. هر پايگاه داده ارتباطي برخلاف انواع ديگر فايلها مجموعه هايي از داده ها را شامل مي شود كه به آنها جدول گفته مي شود. در خارج پايگاه داده, هر جدول, ممكن است بعنوان يك فايل مجزا در نظر گرفته شود. مثلا يك پايگاه داده تجاري ممكن است شامل فايل مرتب شده اي از سفارشات خريداران, فايل موجودي, فايل فهرست نشاني خريداران, فايل اطلاعات كارمندان و فايل دستمزد باشد كه تك تك اين فايلها در اكسس به صورت جدول هستند. بدون ساخت پايگاه داده ها, هريك از اين فايلها را بايد جداگانه مديريت كرد, اما پايگاه داده ها قادر است تا در صورت وجود مقادير مشترك. اين جدولها (فايلها) را به هم مرتبط كند, مثالي در اين مورد كد مشتركي است كه در جدول مشتريان و جدول سفارشات مشتريان وجود دارد. توجه: اكسس پايگاه داده ارتباطي ناميده مي شود زيرا مي تواند جداول داده ها را براساس مقادير مشترك به يكديگر مرتبط كند. جدول خريداران (فايل داده هاي خريداران)ممكن است شامل كد, نام و نشاني هر خريدار باشد. جدول سفارشها, ممكن است شامل اطلاعات سفارش هر خريدار در طي يكسال گذشته باشد. در اينجا بايد توجه كرد كه جدول سفارشها نبايد نام و نشاني خريداران را داشته باشد فقط كد آنها كافي است. اگر تمامي اطلاعات خريدار در جدول سفارش نيز موجود باشد اينكار سبب هدر رفتن وقت و وجود اطلاعات مشابه و تكراري بسيار خواهد شد و همچنين در موقعي كه مثلا نشاني خريدار عوض مي شود بايد تمامي سفارشها را چك كرد و همه را عوض كرد ولي در موقعي كه فقط كد در جدول سفارشها مي باشد نيازي به تغيير در جدول سفارشها نيست و فقط بايد جدول خريدار عوض شود. در شكل 41 يعني شكل زير اين مطلب به طور كامل نشان داده شده است يعني ارتباط بين جدول خريداران و جدول سفارشات مشخص است. ممكن است جدول متعدد ديگري نيز وجود داشته باشد. در هر پايگاه داده, تقريبا هر جدولي از طريق داده ها و اطلاعات مشترك به يك يا چند جدول ديگر مرتبط مي شود در مثال زير اين داده مشترك در دو جدول كد خريدار است. هر پايگاه داده, علاوه بر جداول, شي هاي ديگري نيز دارد. هرچند كه شايد جداول يك پايگاه داده مهمترين شي آن باشد (جداول, داده هاي پايگاه داده را نگهداري مي كنند). اشياي ديگر در پنجره Database ما را در مديريت, پهنگام سازي و گزارش گيري از جداول همياري مي كنند. اكثر پايگاههاي داده اكسس از بجز جدولها كه در تمام پايگاهها موجود است از بيشتر عناصر پنجره Database نيز استفاده مي كنند. توجه: هر از چند گاهي به پنجره پايگاه داده, ظرف پايگاه داده نيز گفته مي شود زيرا تمامي اشياي پايگاه داده را شامل مي شود. حال هر يك از اجزا در پنجره Database را به طور مختصر توضيح مي دهيم:(اين اجزا در زير ستون Objects قرار دارند و به اجزاي اصلي مشهورند) --------------------- 1-جدولها(Tables): مجموعه اي از داده ها را كه به يك موضوع مشخص مربوط هستند در خود نگهداري مي كنند. مثلا اگر يك سيستم حسابداري خانگي ايجاد كنيد بايد جدولي براي درآمدها, جدولي براي مخارج, جدولي براي هزينه هاي مشخص و غيره ايجاد كنيد. 2-بازجست ها(Queries): زيرمجموعه اي از داده ها را ايجاد مي كند, كه براي گزارشگيري و جستجو قابل استفاده مي باشند. مثلا اگر شما بخواهيد كليه مخارجي را كه در 10 روز آتي پرداخت شده اند را بدست آوريد بايد از بازجست استفاده كنيد. 3-فرمها(Forms): صفحه اي گرافيكي براي ورود داده ها يا نمايش آنها را نشان مي دهد كه از فرمهاي كاغذي تقليد شده است. فرم, روش ساده اي است براي مشاهده تمام يا بخشي از داده ها. مثلا شما مي توانيد يك فرم مانند صفحه چك درست كنيد و هر وقت چكي پرداخت كرديد در وارد كردن صورتحساب يك چك معمولي را در صفحه پر كنيد. 4-گزارشها(Reports): فهرست شكل بندي شده اي از داده ها را چاپ مي كند. يك گزارش ممكن از مواردي از يكي از جداول, فهرستي از اقلام انتخاب شده, تمامي اقلام يك جدول يا فهرستي از مقادير گوناگون از جداول مختلف را چاپ كند. مثلا شما ميتوانيد در حسابداري خانه گزارشي از كليه بدهي هايتان بگيريد. 5-صفحه ها(Pages): عملي مشابه گزارشگيري را انجام مي دهد با اين تفاوت كه در اين حالت گزارش به صورت يك صفحه اينترنتي به بيرون داده مي شود و موارد استفاده آن در طراحي صفحات اينترنتي است. 6-ماكروها(Macros): بسياري از كارهاي متداول اكسس را خودكار مي كند. مانند مرتب كردن داده ها, ايجاد گزارشها و ايجاد سرجمع ها. مثلا سيستم پايگاه داده حسابداري خانه مي تواند ماكرويي براي محاسبه گردش پولي در يك ماه داشته باشد. 7-مدولهاي برنامه(Macros): قابليت خودكار كردن اكسس و ايجاد سيستم هاي آماده براي كار را فراهم مي كند, بطوري كه براي افرادي كه چيزي از اكسس نميدانند قابل استفاده باشد. زماني كه برنامه اي براي اكسس مي نويسيد, در واقع آن را براي انجام كارهاي پيچيده اي برنامه ريزي مي كنيدكه از طريق منوها و ماكروها بخودي خود امكان انجام آن نيست. در واقع ماكروهاي اكسس شكلي از مدولهاي ترجمه شده هستند, بدين معني كه ماكروها شما را در راستاي تمامي اطلاعات لازم براي تكميل يك فرمان Visual Basic for Applications هدايت مي كنند. برخي افراد پس از سالها استفاده از اكسس هيچگاه به مدول نويسي نيازي نداشته اند. اگر سابقه برنامه نويسي نداشته باشيد, نوشتن برنامه دشوار است. ولي به نظر من شما فقط در واقع خيلي پيچيده به مدولها نياز خواهيد داشت. --------------------- توجه به اين نكته ضروري است كه پايگاه داده ممكن است پيوسته در حال تغيير باشد. مثلا شما با توجه به نيازهايي كه پيش مي آيد اقدام به ساخت جدولهاي جديد و ايجاد گزارشهاي ديگري كنيد. در شكل 42 در زير شما شش شي پايگاه داده را كه تركيب آنها پايگاه داده مستقلي را شكل مي دهد, مشاهده مي كنيد. شايد يكي از مشكلترين چيزهائي كه در هنگام كار با اكسس بايد راجع به آن تصميم گيري كنيد اين است كه چه وقت مجموعه اي از اطلاعات را در پايگاه داده جديد يا پايگاه داده موجود قرار دهيم. پايگاه داده مي تواند هدفي گسترده داشته باشد, هر پايگاه داده معمولا يك برنامه كاربردي است. در مثالهاي زير به كاربردهاي پايگاه داده هاي خاص اشاره اي مي شود: 1-اگر بخواهيد حسابهاي شما با يكديگر بده-بستان يا تعامل داشته باشند, حساب دفتر كل به يك پايگاه داده مجزا احتياج دارد. هنگامي كه از حسابي پرداختي انجام مي دهيد, مي خواهيد تا هم در جدول پرداختها و هم در جدول حسابها منعكس شود. 2-اگر بخواهيم يك سيستم مستقل پرداخت دستمزد داشته باشيد, بطوري كه بخش پرداخت دستمزد منحصرا براي پرداخت چك و نگهداري سوابق پرداخت مورد استفاده قرار گيرد, سيستم دستمزد نيز يك پايگاه داده مجزا نياز دارد. 3-نرم افزار بودجه بندي, براي بودجه بندي هريك از حسابهاي خانه, از قبيل پرداختهاي قبض, حساب اتومبيل و گزارش گيري از تمامي حسابها, به يك پايگاه داده مجزا نيازمند است. 4-يك سيستم كنترل موجودي به پايگاه داده اي نيازمند است تا بتواند ثبتهاي موجودي مربوط به شركت را پيگري, بهنگام و نگهداري كند. بايد توجه داشت كه فهرست بالا تنها چند مورد مثال خاص مي باشد كه بسيار مختصر است و فقط براي آشنايي ذكر شده اند. به طور كلي بايد ذكر كرد هر يك از جداولي كه به نوعي با هم در ارتباط هستند بايد در يك پايگاه داده قرار داده شوند. استفاده از اجزا’ پنجره Database: هنگامي كه يك پايگاه داده جديد ايجاد مي كنيد, اكسس يك پنجره Database خالي را نمايش مي دهد كه براي هر يك از هفت شي پايگاه داده در آن شاخصي وجود دارد.اگر قصد كار كردن با هر يك از اين هفت شاخص را داريد بايد بر روي آن كليك كنيد مثلا اگر قصد ايجاد ماكرو را داريد بايد بر روي گزينه Macros در پنجره Database كليك كنيد. بسته به انتخابي كه شما از شاخصها مي كنيد در بالاي پنجره Database كليدهاي فرمان مختلفي نمايش داده مي شود كه در زير به طور مختصر به معرفي آنها مي پردازيم: --------------------- 1-باز كردن(Open): براي باز كردن شي موجود مثلا باز كردن يك جدول يا يك فرم 2-طراحي(Design):براي ايجاد تغيير در شي كه با انتخاب اين فرمان حالت نمايشي Design پديدار مي شود مثلا شما اگر بعد از ايجاد يك فرم قصد ايجاد تغيير در آن را داشتيد بايد بر روي Design كليك كنيد. 3-جديد(New):براي ايجاد شي جديد مثلا ايجاد جدولي جديد 4-بازنگري(Preview): اين فرمان فقط در قسمت گزارش وجود دارد و براي مشاهده گزارش قبل از چاپ مي باشد. 5-اجرا(Run):يك فرمان در شاخصهاي ماكرو و مدول وجود دارد و براي اجراي يك ماكرو يا مدول(برنامه) به كار مي رود. 6-حذف(Delete): در تمامي شاخصها موجود است و براي حذف شي به كار مي رود. اين راحترين قسمت است. 7-مرتب سازي: چهار گزينه بعدي كه در همه شاخصها موجود است براي مرتب سازي اشيا به كار مي رود و درست مانند مرتب سازي آيكونها در ويندوز عمل مي كند. --------------------- هنگامي كه شي جديدي ايجاد مي كنيد بايد آنرا نامگذاري كنيد. مي توانيد نامهايي با حداكثر درازي 64 كاراكتر(حرف و عدد), كه در آن فاصله نيز مي توان استفاده كرد اختيار كنيد.با ايجاد و نامگذاري يك شي آن شي در پنجره Database نمايش داده خواهد شد. درس اين جلسه تا بدينجا بود در درس بعدي در مورد هر يك از شاخصها به طور مفصلتر بحث خواهيم كرد. پیشنهاد می کنیم قبل از آنکه به درس بعدی بروید اجزايي كه ياد گرفتيد آشنايي كامل پيدا كنيد. نگاهی کلی به اجزای اصلی در درس پيش با مفهوم پايگاه داده آشنا شديم و تا حدودي به جزئيات پنجره Database پرداختيم و آشنايي لازم را با دكمه هاي اين پنجره پيدا كرديم در اين قسمت درس قصد داريم تا پنجره Database را بيشتر از قبل بررسي و تحليل كنيم. اين درس در واقع ادامه درس قبلي مي باشد پس اين درس نيز از نظر اهميت داراي درجه بالايي است. نگاهي به جداول: اگر پايگاه داده, هيچ شي ديگري نداشته باشد, همواره بايد حداقل يك جدول داشته باشد. داده هاي پايگاه داده را جدول نگهداري مي كند. همانطوري كه در درس قبل اشاره شد,جداول اغلب با مقادير داده مشترك به يكديگر مرتبط مي شوند, به ترتيبي كه دو يا چند جدول نبايد داده هاي زيادي يا تكراري داشته باشند. براي نمايش اسامي جداول موجود در پايگاه داده بر روي شاخص Tables در پنجره Database كليك كنيد. براي باز كردن و مشاهده محتويات هر جدول مي توانيد بر روي نام آن جدول دوبار كليك كنيد. كه در اين حالت Access جدول را در حالت نمايش Datasheet يا كاربرگ باز مي كند,كه در اين حالت شما مي توانيد داده هاي موجود در جدول را مشاهده كنيد. معمولا در حالت نمايشي كاربرگ تمامي داده هاي يك سطر جدول در صفحه نمايش جا نمي گيرد. براي مشاهده بقيه داده هاي هر سطر مي توانيد از ميله هاي گردش افقي پنجره در زير آن استفاده كنيد و به چپ و راست برويد. جدول براي مشاهده و كار با آن, به حالات ديگري هم براي نمايش نياز دارد. در حاليكه حالت نمايشي Datasheet يا كاربرگ امكان مشاهده, افزودن, حذف و اصلاح داده هاي جدول را مي دهد, حالت نمايشي طراحي كه در اكسس با عنوان Design view شناخته مي شود امكان تغيير شكل جدول و طراحي خود جدول را فراهم مي كند. البته وقتي كه بيشتر راجع به ساختار جدول صحبت كرديم شما تصوير بهتري از حالت طراحي خواهيد داشت. به طور كلي حالت Datasheet براي اضافه كردن و مشاهده داده ها و حالت طراحي براي طراحي و تغيير خود جدول نه داده ها به كار مي رود. براي ديدن جدول در حالت نمايشي طراحي يا Design مي توانيد جدول خود را انتخاب كرده و سپس بر روي دكمه design در بالاي پنجره Database كه قبلا معرفي شد كليك كنيد. بعد از باز كردن پنجره در حالت Design ملاحظه خواهيد كرد كه در اين حالت هيچ خبري از داده هاي موجود در جدول نيست و فقط شكل جدول در اين حالت در دسترس است. اگر جدول را در حالت Datasheet باز كرده ايد و قصد رفتن به حالت design را داريد اين كار را مي توانيد با استفاده از منو view و انتخاب دو حالت Datasheet view و Design view انجام دهيد و به راحتي بين دو حالت جدول حركت كنيد. جدول ساختاري مشخص و اكيد دارد. داده هاي جدول در داخل جدول درون سطرها و ستونها جدول قرارگرفته و سازماندهي مي شوند كه به اين سطرها و ستونها به ترتيب ركورد و فيلد گفته مي شود(حتما به خاطر بسپاريد سطر در معناي ركورد و ستون در معناي فيلد به كار مي رود.) هر ركورد جدول بيانگر يك داده مستقل است. مثلا: در جدول اقلام موجودي در انبار هر ركورد جدول نشان دهنده يكي از انواع قطعات موجود در انبار است.هر فيلد ركورد, نشانه دهنده جزيي از داده هاي مربوط به هر قطعه, مانند شماره قطعه, تعداد و شرح است. اگر قطعه اي 32 عدد موجود باشد, ركورد قطعه فقط يك بار در جدول تكرار مي شود اما ميزان موجودي در فيلد تعداد منعكس مي شود. با توجه كردن به شكل 51 زير بيشتر مفهوم اين بيان را خواهيد فهميد. اين كه تمامي ركوردها, فيلدهاي مشابهي دارند, به اين معني نيست كه تمامي فيلدهاي هر ركورد بايد پر باشد. مثلا يك جدول موجودي, ممكن است فيلدي به نام قيمت خرده فروشي داشته باشد, ولي فقط تعداد اندكي از ركوردها, مقداري را در اين فيلد نگه داشته باشند. بنابراين برخي از ركوردها قيمت خرده فروشي ندارند عليرغم اينكه پاره اي از ركوردهاي جدول, قيمت خرده فروشي دارند. توجه به اين نكته ضروري است كه فيلد مشترك مانند شماره قطعه يا كد مشتري, مبناي ارتباط بين دو جدول مرتبط را تشكيل مي دهد و امكان خالي رد كردن اين فيلدها داده نمي شود. وجود فيلد مشتركي كه دو جدول را به يكديگر مرتبط مي كند, بدين معني است كه امكان رهائي كامل از داده هاي تكراري وجود ندارد. براي دو جدول مرتبط, داده ها بايد تكرار شوند زيرا هر دو جدول بايد فيلدهاي مشتركي براي ارتباط داشته باشند. شايد اگر براي تمامي داده ها يك جدول بزرگ ايجاد كنيد, مجبور به داشتن فيلدهاي تكراري نباشيد, اما با اينكار زمان زيادي را در ورود داده ها هدر خواهيد داد, چون در هر ركورد بايد تمامي فيلدهاي پايگاه داده وجود داشته باشد و از طرفي بعضي مواقع هم امكان ايجاد يك جدول بزرگ وجود ندارد پس ما مجبور به استفاده از چندين جدول هستيم كه بهترين راه براي جلوگيري از افزايش تعداد داده هاي مشترك استفاده از ارتباط فيلد مشترك است. بعد از كار با جدول مي توانيد جدول را با استفاده از منو File و گزينه Close ببنديد. نگاهي به بازجست: براي مشاهده بازجستهاي هر پايگاه داده بايد بر روي شاخص Queries در پنجره Database استفاده كنيد. براي باز كردن هر بازجست مي توانيد بر روي نام آن دوبار كليك كنيد يا بد از انتخاب آن به وسيله ماوس بر روي دكمه Open در بالاي پنجره Database كليك كنيد. هنگامي كه بازجستي را باز مي كنيد, اكسس آن بازجست را در حالت نمايش Datasheet مربوط به بازجست باز مي كند, كه كاملا مشابه حالت نمايشي Datasheet مربوط به جدول است. تنها تفوت در آن است كه حالت نمايشي Datasheet مربوط به بازجست معمولا به اندازه جدول, داده و اطلاعات ندارد. در واقع اين حالت نمايشي ميزان محدودي از داده ها را, كه مقصود اصلي از ايجاد بازجست است نمايش مي دهد. بازجست, داده ها را از يك يا چند جدول انتخاب مي كند و مي توانيد زيرمجموعه اي از داده ها را به عنوان جدول يا گزارش نمايش دهيد. در بيشتر مواقع مقدار داده هاي پايگاه داده بيشتر از آن است كه مايل به مشاهده هستيد. هدف از ايجاد بازجست, محدود كردن مقدار داده هاي به نمايش درآمده است. بازجست انتخابي از جمله متداولترين انواع بازجست ها است. بازجست انتخابي, داده ها را ميان دو يا چند جدول انتخاب كرده و نمايش مي دهد. علاوه بر حالت نمايشي Datasheet كه مانند حالت نمايشي جدول مي باشد بازجست را مي توان در حالت نمايشي Design نيز باز كرد كه مربوط به حالت طراحي بازجست است و براي رفتن به اين حالت مي توانيد درست مانند جدول رفتار كنيد و يا با انتخاب بازجست مورد نظر و كليك روي دكمه Design در بالاي پنجره Database اين حالت را نمايان كنيد. همانطور كه مشاهده مي كنيد حالت طراحي Design مربوط به بازجست, ظاهر پيچيده اي دارد. اما بعد از آشنايي كامل با بازجست ايجاد و اجراي آن براي شما بسيار ساده خواهد بود. ايجاد بازجست در حالت طراحي Design و نمايش آن در حالت نمايشي Datasheet صورت مي پذيرد. بعد از پايان كار خود با بازجست مي توانيد بوسيله منو File و گزينه Close بازجست را ببنديد. نگاهي به فرم: براي مشاهده فرمهاي يك پايگاه داده, از شاخص Form در پنجره Database استفاده مي كنيم. براي مشاهده محتواي هر فرم مي توانيد در روي نا آن دوبار كليك كنيد و يا پس از انتخاب فرم مورد نظر بر روي دكمه Open در بالاي پنجره Database كليك كنيد. بعد از باز كردن فرم مورد نظر اكسس آنرا در حالت نمايش Form يا Form View نشان خواهد داد. حالت نمايشي Form, فرم را در شكل نهايي آن نشان مي دهد و امكان ورود, اصلاح و نمايش داده ها را فراهم مي سازد. كليدهاي راهبري كه در زير اكثر حالات نمايشي وجود دارد, شماره ركورد و تعداد كل آنها را نمايش مي دهد. چهار كليد اطراف نشانگر ركورد, براي گرداندن فرم و نمايش ركوردهاي مختلف به كار مي رود. شما مي توانيد ركوردهاي اول, بعدي, قبلي و آخري را مشاهده كنيد. شماره بين كليدها, شماره ركورد جاري كه فعلا مشاهده مي كنيد است.اگر بر روي شماره ركورد جاري, شماره ركورد جديدي را وارد كنيد اكسس در صورت وجود آن ركورد آنرا در فرم نمايش مي دهد.كليدهاي راهبري كه در منتهي اليه سمت راست قرار دارد, امكان ايجاد ركورد جديدي را با يك فرم خالي فراهم مي سازد. همانطور كه مشاهده مي كنيد كليدهاي راهبري مشابه كليدهاي كنترلي پخش صوت طراحي شده اند. با توجه كردن به شكل 52 در زير مفهوم كليدهاي راهبري را بيشتر درك خواهيد كرد. حالت نمايشي Design در مورد Form نيز شكل فرم را نشان مي دهد. براي دسترسي به اين حالت شما مي توانيد درست مانند جدول رفتار كنيد و يا با انتخاب فرم مورد نظر بر روي دكمه Design در بالاي پنجره Database كليك كنيد. شايد براي شما در اين لحظه شكل آن عجيب به نظر بيايد ولي وقتي در درسهاي آتي روش ايجاد فرم را فراگرفتيد, نحوه خواندن حالت نمايشي Form را نيز خواهيد فهميد. با دستكاري در حالت نمايشي Design, مي توانيد نحوه نمايش داده هاي درون فرم را تغيير دهيد. در درون فرم حالت نمايشي ديگري نيز وجود دارد و آن حالت نمايشي Datasheet است. كه براي دسترسي به آن بعد از باز كردن فرم مورد نظر مي توان از منو View گزينه Datasheet را انتخاب كرد.اين حالت كاملا شبيه حالت نمايشي Datasheet در جداول است. مزين حالت نمايشي Datasheet به حالت نمايشي معمولي فرم در اين است كه در اين حالت تعداد ركورد بيشتري نمايش داده مي شود در حالي كه در حالت نمايش معمولي فقط يك ركورد نمايش داده مي شود. البته در درسهاي آتي بيشتر در مورد اين حالت نمايشي صحبت خواهد شد. بعد از پايان كار با فرم مي توانيد به وسيله منوي File و گزينه Close از فرم مورد نظر خارج شويد. نگاهي به گزارش: براي نمايش گزارشهاي هر پايگاه داده مي توان از شاخص Reports در پنجره Database استفاده كرد. هرچند كه مي توان گزارشها را روي صفحه نمايش بازنگري كرد ولي وقتي كه آنها را بر روي كاغذ چاپ كنيم بسيار مفيدتر خواهند بود. اگر بخواهيم قبل از چاپ محتواي گزارش را مشاهده كنيم مي توانيم بر روي نام گزارش مورد نظر دوبار كليك كنيم يا با انتخاب گزارش موردنظر بر روي دكمه Preview در بالاي پنجره Database كليك كنيم. (البته بايد توجه كرد كه گزارش تنها مختص چاپ كردن نيستند و كاربردهاي ديگري نيز دارند) شما مي توانيد گزارشي بسازيد كه تمامي داده هاي يك جدول, چندين جدول, بازجست را نمايش دهد.با باز كردن گزارش شما آنرا در حالت Print Preview (بازنگري چاپ) به نمايش در خواهيد آورد.بازنگري چاپ گزارش را در شكل نهايي آن نشان مي دهد, اما بجاي چاپ گزارش, آنرا برروي صفحه مشاهده مي كنيد, تا قبل از چاپ گزارش از صحت آن مطمئن شويد. در حالت Print Preview در مورد گزارش, امكان تغيير, اضافه يا حذف داده ها از پايگاه داده وجود ندارد. ولي با استفاده از آن مي توانيد مقادير مختلفي از اطلاعات را مشاهده كنيد. دقت داشته باشيد كه در هنگام حركت ماوس بر روي پنجره Print Preview, مكان نماي ماوس به يك ذره بين تبديل مي شود. در اين حالت اگر با ماوس كليك بزنيد, تصوير بزرگ شده گزارش را مشاهده مي كنيد, بدين تزتين مي توانيد گزارش را از نزديك مرور كنيد. حالت نمايشي Design در مورد گزارش شكل آنرا نشان مي دهد.براي دسترسي به اين حالت مي توان درست مانند اجزا ديگر عمل كرد ويا با انتخاب گزارش مورد نظر بر روي دكمه Design در بالاي پنجره Database كليك كرد.بعدا با استفاده از حالت نمايشي Design شكل گزارش را تغيير خواهيم داد. نگاهي به صفحه ها: براي نمايش صفحه هاي وب موجود در يك پايگاه داده مي توانيد بر روي شاخص Pages در پنجره Database كليك كنيد. صفحه ها در يك پايگاه داده اكسس براي استخراج داده ها از جدول به يك صفحه وب مورد استفاده قرار مي گيرند درست مانند گزارش با اين اختلاف كه اين بار به جاي چاپ صفحه گزارش آنرا در يك مرورگر وب مانند IE مي تواند مشاهده كرد. من نمي خواهم زياد در مورد صفحه ها در اين قسمت توضيح دهم زيرا كاركرد آنها بسيار شبيه گزارشها مي باشند و هر كاري كه با گزارش انجام داديم مي توانيد با اين صفحه ها نيز انجام دهيد فقط به خاطر داشته باشيد كه اينها هر كدام يك صفحه وب مي باشند. در صفحه ها نيز مانند گزارش ها حالت نمايشي Design براي طراحي استفاده مي شود. مي توان بزرگترين تفاوت بين گزارشها و صفحه ها را پوياتر بودن صفحات بيان كردن بدين معني كه شما بهتر از گزارش مي توانيد اطلاعات موجود در پايگاه داده را مرور كنيد و بين آنها حركت كنيد. نگاهي به ماكروها: ماكروها فهرست فراميني است كه در آنها كارهايي كه معمولا از طريق صفحه كليد انجام مي دهيد, تعريف مي شود. مثلا مي توانيد ماكرويي ايجاد كنيد كه هنگام وقوع شرايطي خاص مثل هنگامي كه ميزا فروش چيزي از تعداد يا مقدار مشخصي كمتر شود, گزارش مشخصي را چاپ كند. البته با استفاده از منوها نيز مي توانيد گزارش مورد نظر را چاپ كنيد ولي ماكرو مراحل كار را خودكار مي كند, بدين ترتيب كي توانيد با فشار كليد فرمان روي فرم, گزارش را چاپ كنيد. به اين نكته توجه كنيد كه ماكروها اغلب به كليدهاي فرمان وصل مي شوند تا اجراي آنها براي كاربر ساده باشد چون به هرحال شما استفاده كننده هستيد و مايليد تا كارها تا حد امكان ساده انجام شود. توجه كنيد كه كليد Run در بالاي صفحه Database ماكرو را اجرا مي كند ولي تا زماني كه نحوه عملكرد آنرا در برنامه نمي دانيد به هيچ وجه اقدام به اجراي آن نكنيد. هرگاه بخواهيد محتويات ماكرو را از پنجره Database مشاهده كنيد بايد نام ماكرو مورد نظر را انتخاب كرده و بر روي دكمه Design در بالاي پنجره Database كليك كنيد كه در اين حالت حالت نمايش Design مربوط به ماكرو را مشاهده مي كنيد. فهرست اعمال ماكرو را در اين پنجره مشاهده مي كنيد به احتمال قوي اين اعمال مرموز به نظر مي رسندولي به مرور با آنها آشنا خواهيد شد. چون ماكرو فهرست كارهاي خودكار شده است و شما هنوز نمي دانيد اكسس چه كارهايي مي تواند انجام دهد پس در اين مقطع نمي توان كار زيادي براي افزايش درك نسبت به ماكرو كرد. پس از پايان كار با ماكرو آنرا به وسيله منو File . گزينه Close ببنديد. نگاهي به مدول ها: مدولها برنامه هاي كاملي هستند كه با Visual Basic for Applications نوشته مي شوند, و براي خودكار كردن كارها به كار مي روند.برخلاف ماكروها كه ساده هستند برنامه كاربردي را مي توان به نحوي ايجاد كرد كه به هر حركت استفاده كننده پاسخ داده و عكس العمل نشان دهد. ما در درسهاي آينده به چگونگي كار مدولها خواهيم پرداخت ولي به دلايل زير به طور كامل آنرا توضيح نخواهيم داد: ---------------- برنامه نويسي با مدولها به مهارت هاي كامپيوتري پيشرفته اي نياز دارد كه من فكر نمي كنم تمامي مطالعه كننده هاي اين دروس به مهارتها آشنا باشند. اكسس محل خوبي براي يادگيري نحوه برنامه نويسي نيست. بسياري از افراد ساليان متمادي بدون نياز به نوشتن مدول, بصورتي موثر و كارا از اكسس استفاده مي كنند. حتي اگر بخواهيم برنامه هاي كاربردي قوي در اكسس ايجاد كنيم مي توان حتي بدون يك نياز كوچك به مدول اين كارها را انجام داد. --------------- اگر قبلا برنامه نويسي كرده باشيد, خصوصا با يكي از زبانهاي مشابه Basic مانند Qbasic و BasicA يا Visual Basic در استفاده از مدولها مشكل خاصي نخواهيد داشت. البته در كلاسهاي اين سايت يكي از همكاران من دروس Visual Basic را براي شما عزيران تدريس مي كنند كه بسيار مفيد و پرمحتوا مي باشد و شما تما با دنبال كردن دروس اين همكار عزيز براحتي كار با مدولها را ياد خواهيد گرفت و من نيز شما را در اين راه ياري خواهم كرد. پس از پايان كار با مدول مي توانيد از منو File و گزينه Close اقدام به بستن مدول بكنيد. --------------------- درس اين جلسه در اين قسمت به پايان مي رسد و شما تا حالا به طور دقيق با كاركرد اجزا پنجره Database آشنا شده ايد. در دروس بعدي به تدريج به طور حرفه اي به كار با اين اجزا روي خواهيم آورد. در درس بعدي طراحي يك پايگاه داده هاي جديد را شرح خواهم داد. به اميد شادابي بيشتر شما دوستان عزيز


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۸۵ مراجعه امروز
۵۶۰۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آموزش فلش (بخش سوم)
تاريخ :۱۳/۴/۱۳۸۳
متن خبر:
Frame چيست ؟ هر فريم در Flash نشان دهنده چشم اندازي از فيلم است که در يک فاصله زماني نمايش پيدا ميکند . اگر شما به طور پيش فرض از 12 فريم در ثانيه استفاده کنيد هر فريم در يک دوازدهم فاصله زماني نمايش پيدا ميکند. يادگيري انواع Frame : نرم افزار Flash داراي دو نوع Frame است. فريم هاي معمولي و فريم هاي کليدي. اختلاف و شباهت بين دو نوع به شرح زیر می باشد: - در زمان نمايش فيلم کليه فريم ها در زمانهاي مساوي نمايش داده ميشوند. ( مگر اينکه شما با نوشتن قطعه کد اسکريپت مشخص کنيد که يک فريم چه زماني طول بکشد تا نمايش يابد). - آيتم هاي مختلف را فقط به فريم هاي کليدي ميتوان اضافه نمود. اين اهميت ندارد که چه چيزي را مي خواهيد اضافه کنيد، بلکه باید به یاد داشت که به فريم هاي کليدي ميتوان آيتم نيز اضافه نمود. کليد هاي ميانبر براي Form ها : دستور کليد ميانبر شرح Frame F5 اضافه کردن يک يا چند فريم معمولي به محل مورد نظر Remove frames Shift + F5 حذف فريم هاي انتخاب شده از Timeline Key Frames F6 اضافه کردن يک فريم کليد که محدوديت فريم قبلي را دو برابر ميکند Blank Key Frame F7 اضافه کردن يک فريم کليدي که محدوديت فريم کليدي قبلي را به همراه نخواهد داشت Clear Key Frame Shift + F6 تبديل يک فريم کليدي به فريم معمولي نکته : قبل از اینکه فریم ها را به نقطه ای دیگر انتقال دهید ، بهتر است یک Motion Tween ساخته و سپس فریم را به نقطه ی دلخواه انتقال داد . حالت لايه ها لایه ها همانند صفحات پلاستیکی هستند که اشیاء مختلف را می توان روی آنها ترسیم کرد . این صفحات از یکدیگر جدا و مستقل هستند ولی هنگامیکه تمامی لایه های پلاستیکی روی هم قرار گیرند تمامی صفحات قابل مشاهده می باشند . اضافه کردن لايه ها : در زمانیکه می خواهید لایه ای را به Timeline اضافه کنید می توانید از منوی Flash گزینه ی Insert و سپس گزینه ی Layer را انتخاب کنید . برای ایجاد سریعتر می توان از دکمه ای که در سمت چپ و پایین Timeline قرار دارد استفاده کرد . نامگذاري لايه ها : زماني که لايه جديدي را به Timeline اضافه ميکنيد Flash به طور اتوماتيک نامي را براي لايه انتخاب ميکند . معمولا این نامها بصورت Layer2 ، Layer1 ، ... می باشند . البته این نامها پیش فرض بوده و شما می توانید برای بیان کار خاص هر لایه نام مشخصی برای آن تعیین کنید . به عنوان مثال برای لایه پس زمینه نام Background Layer را انتخاب کنید لايه هاي ماسک -Mask لایه ی مهمی که در Flash می توان ایجاد نمود لایه ی Mask می باشد . این لایه همانند پنجره ای بر روی دیگر لایه ها عمل می کند و زمانی که فیلمی نمایش داده می شود این لایه محدوده ی مورد نظر را نمایش می دهد . لايه هاي راهنما : به کمک این لایه انیمیشن می تواند در Motion Tween در جهات مختلف حرکت کند ، اگر از Motion Tween استفاده نشود انیمیشن در یک مسیر حرکت می کند . کشيدن خطوط و پر کردن سطوح : کشیدن اشیاء در فلش با فریم آنها در سایر برنامه های گرافیکی تقارن زیادی ندارد . ابزار مناسب ترسیم را انتخاب کرده ، سپس اشیاء را روی صفحه ی کار ترسیم کنید . البته فلش در مقایسه با دیگر برنامه های ترسیمی تفاوت های مهمی دارد . یکی از این تفاوتها این است که اشیاء نقاشی شده در فلش پایه ی برداری داشته و بهتر از تصاویر نقشه بیتی عمل می کنند . انتخاب خطوط متفاوت : اصطلاح Stroke در فلش به معنای Line است . توسط این ابزار یا ابزارهای Pen و Pencil می توان خطوط را ایجاد نمود . اضافه کردن خطوط منحني پيچيده درست است که ابزار Pen و Sub Select حقيقتاً قدرتمند هستند اما استفاده از آنها براي رسيدن به نتيجه واقعي زمان زيادي ميبرد . همچنين شما ميتوانيد از ابزار Arrow براي اصلاح اشياء استفاده کنيد . به کمک اين ابزار ميتوان گوشه اشياء را حرکت داده و به خوبي خطوط را به داخل خم کرد. از دو ابزار Sub Select , Arrow ميتوانيد براي تغيير شکل اشياء استفاده کنيد. ضمناً ميتوان از ابزار Free Transform نيز استفاده کرد. اين ابزار نيز همانند ابزار Arrow براي اصلاح اشياء کشيده شده استفاده ميشود. به طور مثال شما ميتوانيد عمليات تغيير اندازه ، چرخاندن ، کج کردن و پيچ دادن يک شيء را توسط Free Transform انجام دهيد. کنترل کردن پيکر بندي آلفا : پيکر بندي آلفا دقيقاً يک پيکر بندي رنگ نيست . اما برخي چيزهاي آن به رنگ مرتبط ميشود . در واقع آلفا يک درجه بندي براي شفافيت يک شيء ميباشد. يک شيء که درجه پيکر بندي آلفاي آن 10 درجه ميباشد کاملاً مات است . در صورتي که اين درجه پيکر بندي به صفر برسد آن شيء کاملاً شفاف است. در مثال زير کاملاً ميتوانيد مشاهده کنيد. براي تنظيم مدار آلفاي اشياء مراحل زير را دنبال کنيد : 1- ابزار Arrow را از جعبه ابزار Flash انتخاب کنيد 2- بر روی شکل مورد نظر کلیک کنید تا انتخاب شود . 3- از منوی Window گزینه Color Mixer را انتخاب کنید . 4- به آلفا مقداری عددی بدهید . یا از طریق وارد کردن عدد مورد نظر که بصورت درصدی نمایش داده می شود و یا توسط دکمه ی لغزنده ی سمت راست می توان مقدار عددی دلخواه را به آلفا داد . چرخاندن ، کج کردن و تغيير اندازه دادن چرخش اشياء : چرخش يک شيء در واقع دور زدن شيء به حول نقطه مرکزي شیی و در جهت حرکت عقربه هاي ساعت ميباشد. وقتي که شما يک شيء را ميچرخانيد شيء در همان اندازه باقي ميماند و زواياي شيء هيچ تغييري نميکند. شما ميتواند يک شيء را با ماوس بچرخانيد. براي انجام اين کار مراحل زير را دنبال کنيد : 1- ابزار Arrow را انتخاب کنيد . 2- بر روي شيء مورد نظر دوبار کليک کنيد . ضمناً هر دوي خط و سطح محور شيء را انتخاب کنيد. ضمناً براي راحتي کار ميتواند توسط ابزار Arrow يک جعبه فرضي را دور شکل مورد نظر خود بکشيد تا به حالت انتخاب در آيد. 3- از منوي Modify گزينه Transform و در نهايت گزينه Rotate and skews را انتخاب کرده تا دسته هاي راهنماي چرخش به شيء اضافه گردد. همچنين ميتوان بر روي شيء انتخاب شده کليک راست کرده و از منوي پديدار شده گزينه Rotate and skews را انتخاب کرد. 4- يکي از دسته هاي راهنماي گوشه تصوير را گرفته و شيء مورد نظر را بچرخانيد. کج کردن اشياء : براي انجام کار ابزار Arrow را انتخاب می کنیم. وقتي شيء مورد نظر و نوع خط آنرا انتخاب کرديد ابزار Envelope را هم انتخاب کنيد . وقتي که دسته هاي راهنما بر روي شيء فعال گردید از هر گوشه شيء ميتوان آنرا کج کرد و همچنین ميتوان بر روي شيء مورد نظر کليک راست کنيد و گزينه Envelop را انتخاب کنيد. تغيير اندازه اشياء : يکي از ابزار هاي مهم که در نرم افزار Flash کاربر فراوانی دارد ابزار Scale ميباشد. به کمک این ابزار ميتوان اندازه شیی را تغيير داد ، آنها را کوچک و بزرگ و يا طول و عرض آن را کم و زياد کرد. روش کار به اين صورت است که ما اول ابزار Free transfer را انتخاب نموده و از منوی Option گزینه Scale را انتخاب ميکنيم ( در نظر داشته باشيد که قبل از انجام کار بايد سطح شيء و خط انتخاب شده باشد ) با انتخاب گزینه Scale دسته هاي راهنما بر روي شيء مورد نظر ظاهر ميشود . می توان با انتخاب یکی از دسته هاي راهنما سايز شيء را کم يا زياد ميکنيم. کشيدن خطوط توسط Flash براي کشيدن خطوط در Flash می توان از روشها و ابزار هاي مختلفي استفاده نمود. اولين مورد به کمک ابزار Line ميباشد . بدين صورت که ما از Toolbar ابزار Line tail را انتخاب ميکنيم .هنگام انتخاب اين ابزار ، شکل ظاهري ماوس تغيير ميکند. ماوس را به طرف محيطي که در آن خط را ترسيم می کنيم ميبريم ، سپس از نقطه شروع ماوس را فشار داده و آن را ميکشيم تا پايان کار نباید دکمه ماوس را رها کنیم . هنگامي که ابزار Line را انتخاب ميکنيم پنل Properties فعال ميشود. از اين پنل در تغيير رنگ ، اندازه خط و نوع خط می توان استفاده کرد : 1- تغيير رنگ خط : براي تغيير رنگ خط اول خط مورد نظر را انتخاب مينماييم سپس از پنل Properties گزينه Stroke color را انتخاب کرده و بر روي آن کليک ميکنيم تا پالت رنگها باز شود. در قسمت بالاي آن کد رنگ را وارد کرده و یا از همان پالت ، رنگ مورد نظر خود را انتخاب کنيم. 2- تغيير اندازه : براي تغيير سايز خط از همان پنل Properties گزينه Stroke height را انتخاب کرده ، سایز آنرا مشخص ميکنيم.در کنار آن يك چرخه مانند وجود داردکه ميتوان از کم به زياد آن را اضافه کرد. اگر آن را به طرف پايين ببريم سايز آن کوچک ميشود و اگر به طرف بالا ببريم سايز ها بزرگ ميشود. نکته : در نرم افزار فلش سایز خطوط بصورت پیش فرض از صفر تا ده می باشد . تغيير نوع خط : براي تغيير نوع خط در پنل Properties گزينه Stroke style را انتخاب می کنیم. در اين روش 7 نوع خط وجود دارد.براي تغيير نوع خط ، آنرا انتخاب کرده ، سپس يکي از خطوط را انتخاب ميکنيم . Custom stock style : اين دکمه نيز در همان قسمت Properties وجود دارد هنگامي که اين دکمه را فشار ميدهيم ميتوان تنظيمات مورد نظر را بر روي هر کدام از انواع خطوط انجام داد. ساخت يک Motion Tween : براي شروع کار ابتدا با يک Animation ساده شروع می کنیم . ابتدا بايد Animation را بشناسیم و نيز مهمتر از آن اينکه کاربرد انیمیشن را در فلش بدانیم.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۸۸ مراجعه امروز
۵۶۰۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آموزش فلش (بخش دوم )
تاريخ :۱۳/۴/۱۳۸۳
متن خبر:
ماکرومديا فلش ( Macromedia Flash) يکي از بهترين نرم افزار هايي است که شما ميتوانيد جهت افزودن افکت های مخصوص و انیمیشن های کامپیوتری به وب سایت از آن استفاده کنید .در این جزوه سعی شده تمامی نکات با ذکر مثال و انیمیشن برای شما ارائه گردد . امید است این منبع جهت استفاده ی شما عزیزان مفید واقع شود. برای مطالعه ی این دوره ی آموزشی نیاز است کاربران محترم آشنایی با سیستم عامل ویندوز داشته باشند . ضمنا سیستم شما باید دارای مشخصات سخت افزاری ذیل باشد : - حداقل سیستم مورد نیاز پنتیوم 233 - 16 مگابایت Ram - حدود 600 مگا بایت فضای آزاد - کارت گرافیکی 64 گیگا بایت کاربردهای Flash زماني که با یک صفحه ی وب برخورد ميکنيم ایده های مختلفی برای ساختن یک وب سایت جالب ،در ذهنمان ايجاد ميشود. با وجود بخشهاي گوناگون در يک وب سايت در مورد تصاوير و رنگها قانونی کلی وجود دارد. در Flash ابزارهايي وجود دارد که به وسیله ی آنها ميتوان به راحتي تصاوير مختلفي خلق کرد. تصاوير برداري خيلي بهتر از نقشه های بيتي هستند. تصوير برداري نه تنها از لحاظ اندازه کوچکتر است بلکه در هنگام کوچک و بزرگ شدن به هيچ وجه کيفيت خود را از دست نميدهد. ولي زماني که يک نقشه بيتي را بزرگ ميکنيم تصاوير مات به نظر ميرسند. تصاویر Flash همانند یک فیلم بر روی صفحه ی وب گذاشته می شود . هرگاه که مرورگر وب شما با يک فيلم Flash روبرو ميشود به طور اتوماتيک Flash player را اجرا می کند. نكته به ياد داشته باشيد که فيلم هاي Flash به واسطه برداري بودنشان کم حجم تر از تصاویر نقشه بیتی خواهند بود. متحرک سازي در سايت وب در گذشته در سايتهاي وب به علت اينکه انيميشن نداشتند ، بسیار خسته کننده به نظر می رسیدند. ولي نرم افزار Flash به آساني انيميشن را توسط فرآیندی به نام Tweening ايجاد ميکند. در اين مرحله شما به Flash نقطه آغاز و پايان ميدهيد و تصاوير بين اين دو نقطه به طور اتوماتيک به صورت فريم ( Frame ) ايجاد خواهند شد. مثلاً اگر يک تصوير کامپيوتري براي کامل شدن احتياج به 10 فريم داشته باشد تنها لازم است به آن دو فريم شروع و پايان را بدهيم ( فريم 1 و فريم 10) ، خود نرم افزار Flash فريم هاي ما بين آن را ميسازد. علاوه بر آن ميتوانيد يک Motion Tween براي آن شيء بسازيد. ساخت فيلم هاي محاوره اي : در Flash علاوه بر انيميشن هاي ساده ميتوانيد وب سايتهاي محاوره اي نیز بسازید. به عنوان مثال ميتوان فيلم فلشي را ايجاد کنيد که در آن فيلمهاي کوتاه و Track هاي موسيقي متعدد قابل انتخاب وجود داشته باشد زيرا Flash کاملاً شيء گرا ميباشد. نکته : در يک فيلم Flash منظور از محاوره اي بودن اين است که کاربر قادر به انتخاب کليپ هاي ويدئويي يا Track موسيقي دلخواه باشد. تغيير شکل اشياء و متون متحرک : يکي از تکنولوژي هاي انيميشن در Flash این است که به شما اجازه ی تغییر يک شکل به شکل ديگر را ميدهد ،به اين فرآیند Shape tween ميگويند. بدون شک متون متحرک را در سايت هاي مختلف مشاهده کرده ايد. اين متون درون یک جعبه از نقطه اي به نقطه ديگر حرکت ميکنند. از اين Effect در سرفصل روزنامه ها و تبليغات فروشگاهها استفاده ميشود. ايجاد يک متن متحرک در Flash کار بسیار ساده ای است . بدين منظور جهت رسیدن به نتیجه ی مطلوب باید تکنیک های فیلم سازی Flash را با هم ترکیب کنیم ، به این صورت که ابتدا یک Motion Tween ایجاد کرده ، بوسیله آن متنی را داخل جعبه از این سمت به آن سمت برده و سپس یک Mask اضافه می کنیم. توسط اين ماسک ميتوانيم متن داخل جعبه را کنترل کنيم. اين بدان معني است که شما قادر خواهيد بود هر قسمت از متن دلخواه خود را قابل مشاهده کنيد. درک و يادگيري اصول پايه اي Flash Flash داراي يک سري عناصر اوليه است که در طول کارتان شما را همراهي ميکند. شکل زير نماي اوليه اي از عناصر اوليه Flash ميباشد. صفحه کاري ( Work Place ) در Flash : صفحه کاري منطقه اي است که در آن قلم هاي Flash را ايجاد ميکنيد. این صفحه ی کاری در واقع آن منطقه سفيد رنگي است که در قسمت مياني پنجره Flash واقع شده است. نکته : به طور پيش فرض اندازه اين صفحه 550*400 پيکسل ميباشد. اطراف صفحه کاري بوسيله يک حاشیه خاکستري که محيط کاري است پوشانده شده است. اشياء روي محيط کاري ظاهر میشوند، مگر اينکه آنها را بر روي صفحه کاري منتقل کنيد. Timeline : Timeline ( خط زمان ) يکي از ابزار هاي Flash است که فريم هاي درون آن را کنترل ميکند. شکل زير قسمتهاي مختلف Timeline را به تصوير ميکشد. Play head : براي ديدن گزینه های Flash مورد نظر Play head را بوسيله اشاره گر ماوس بر روي این Flash بکشيد. بدين منظور شما ميتوانيد يک Frame دلخواه را بر روي Timeline کليک کنيد که آن به صورت اتوماتيک Play head ميشود. Frame Number : همان نما هاي شما براي کار کردن در Timeline ميباشند. Frame line شما را قادر ميسازد تا مکان صحیح اشیاء در فریم را مشخص کنید. Timeline Menu : از طريق اين متد ميتوان به تعداد گزينه هايي که براي تنظيم چگونگي مشاهده Timeline استفاده ميشوند دسترسي پيدا کرد. Center Frame : قسمت مرکزي قابل ديد در Timeline ميباشد. Onion Skin View : توسط اين گزينه ميتوان فريم هاي مختلف يک انميشن ترتيبي را مشاهده کرد. در واقع ميتوان تشکيل فريم هاي مياني را ملاحظه نمود. Onion Skin Outline view : اين گزينه نيز مانند Onion Skin View ميتواند تعداد فريم هاي اول تا آخر را نشان دهد .اما این گزینه بیشتر براي منحني ها استفاده ميشود. Edit Multiple Frames : اين گزينه شما را قادر ميسازد تا هر بخش از يک انيميشن را که بر فريم هاي مختلفی تقسيم شده اند ، ويرايش کنيد. Modify Onion Markers : منويي را نمايش ميدهد که توسط آن شما ميتوان تعداد فريم هاي دلخواه را در Onion Skin View نمايش داد. Current Frame : در اين قسمت ساده فريم جاري نمايش پيدا ميکند. Frame Rate : این گزینه تعداد فريم هاي نمايش داده شده را نشان ميدهد. Playback Time : این گزینه مدت زمان سپري شدن فيلم را نشان ميدهد. Scroll Bars : بوسيله این گزینه ميتوان فريم هاي لايه هاي قبلي را مشاهده نمود.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۹۱ مراجعه امروز
۵۶۰۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آموزش فلش (بخش اول )
تاريخ :۱۳/۴/۱۳۸۳
متن خبر:
ماکرومديا فلش ( Macromedia Flash) يکي از بهترين نرم افزار هايي است که شما ميتوانيد جهت افزودن افکت های مخصوص و انیمیشن های کامپیوتری به وب سایت از آن استفاده کنید .در این جزوه سعی شده تمامی نکات با ذکر مثال و انیمیشن برای شما ارائه گردد . امید است این منبع جهت استفاده ی شما عزیزان مفید واقع شود. برای مطالعه ی این دوره ی آموزشی نیاز است کاربران محترم آشنایی با سیستم عامل ویندوز داشته باشند . ضمنا سیستم شما باید دارای مشخصات سخت افزاری ذیل باشد : - حداقل سیستم مورد نیاز پنتیوم 233 - 16 مگابایت Ram - حدود 600 مگا بایت فضای آزاد - کارت گرافیکی 64 گیگا بایت کاربردهای Flash زماني که با یک صفحه ی وب برخورد ميکنيم ایده های مختلفی برای ساختن یک وب سایت جالب ،در ذهنمان ايجاد ميشود. با وجود بخشهاي گوناگون در يک وب سايت در مورد تصاوير و رنگها قانونی کلی وجود دارد. در Flash ابزارهايي وجود دارد که به وسیله ی آنها ميتوان به راحتي تصاوير مختلفي خلق کرد. تصاوير برداري خيلي بهتر از نقشه های بيتي هستند. تصوير برداري نه تنها از لحاظ اندازه کوچکتر است بلکه در هنگام کوچک و بزرگ شدن به هيچ وجه کيفيت خود را از دست نميدهد. ولي زماني که يک نقشه بيتي را بزرگ ميکنيم تصاوير مات به نظر ميرسند. تصاویر Flash همانند یک فیلم بر روی صفحه ی وب گذاشته می شود . هرگاه که مرورگر وب شما با يک فيلم Flash روبرو ميشود به طور اتوماتيک Flash player را اجرا می کند. نكته به ياد داشته باشيد که فيلم هاي Flash به واسطه برداري بودنشان کم حجم تر از تصاویر نقشه بیتی خواهند بود. متحرک سازي در سايت وب در گذشته در سايتهاي وب به علت اينکه انيميشن نداشتند ، بسیار خسته کننده به نظر می رسیدند. ولي نرم افزار Flash به آساني انيميشن را توسط فرآیندی به نام Tweening ايجاد ميکند. در اين مرحله شما به Flash نقطه آغاز و پايان ميدهيد و تصاوير بين اين دو نقطه به طور اتوماتيک به صورت فريم ( Frame ) ايجاد خواهند شد. مثلاً اگر يک تصوير کامپيوتري براي کامل شدن احتياج به 10 فريم داشته باشد تنها لازم است به آن دو فريم شروع و پايان را بدهيم ( فريم 1 و فريم 10) ، خود نرم افزار Flash فريم هاي ما بين آن را ميسازد. علاوه بر آن ميتوانيد يک Motion Tween براي آن شيء بسازيد. ساخت فيلم هاي محاوره اي : در Flash علاوه بر انيميشن هاي ساده ميتوانيد وب سايتهاي محاوره اي نیز بسازید. به عنوان مثال ميتوان فيلم فلشي را ايجاد کنيد که در آن فيلمهاي کوتاه و Track هاي موسيقي متعدد قابل انتخاب وجود داشته باشد زيرا Flash کاملاً شيء گرا ميباشد. نکته : در يک فيلم Flash منظور از محاوره اي بودن اين است که کاربر قادر به انتخاب کليپ هاي ويدئويي يا Track موسيقي دلخواه باشد. تغيير شکل اشياء و متون متحرک : يکي از تکنولوژي هاي انيميشن در Flash این است که به شما اجازه ی تغییر يک شکل به شکل ديگر را ميدهد ،به اين فرآیند Shape tween ميگويند. بدون شک متون متحرک را در سايت هاي مختلف مشاهده کرده ايد. اين متون درون یک جعبه از نقطه اي به نقطه ديگر حرکت ميکنند. از اين Effect در سرفصل روزنامه ها و تبليغات فروشگاهها استفاده ميشود. ايجاد يک متن متحرک در Flash کار بسیار ساده ای است . بدين منظور جهت رسیدن به نتیجه ی مطلوب باید تکنیک های فیلم سازی Flash را با هم ترکیب کنیم ، به این صورت که ابتدا یک Motion Tween ایجاد کرده ، بوسیله آن متنی را داخل جعبه از این سمت به آن سمت برده و سپس یک Mask اضافه می کنیم. توسط اين ماسک ميتوانيم متن داخل جعبه را کنترل کنيم. اين بدان معني است که شما قادر خواهيد بود هر قسمت از متن دلخواه خود را قابل مشاهده کنيد. درک و يادگيري اصول پايه اي Flash Flash داراي يک سري عناصر اوليه است که در طول کارتان شما را همراهي ميکند. شکل زير نماي اوليه اي از عناصر اوليه Flash ميباشد. صفحه کاري ( Work Place ) در Flash : صفحه کاري منطقه اي است که در آن قلم هاي Flash را ايجاد ميکنيد. این صفحه ی کاری در واقع آن منطقه سفيد رنگي است که در قسمت مياني پنجره Flash واقع شده است. نکته : به طور پيش فرض اندازه اين صفحه 550*400 پيکسل ميباشد. اطراف صفحه کاري بوسيله يک حاشیه خاکستري که محيط کاري است پوشانده شده است. اشياء روي محيط کاري ظاهر میشوند، مگر اينکه آنها را بر روي صفحه کاري منتقل کنيد. Timeline : Timeline ( خط زمان ) يکي از ابزار هاي Flash است که فريم هاي درون آن را کنترل ميکند. شکل زير قسمتهاي مختلف Timeline را به تصوير ميکشد. Play head : براي ديدن گزینه های Flash مورد نظر Play head را بوسيله اشاره گر ماوس بر روي این Flash بکشيد. بدين منظور شما ميتوانيد يک Frame دلخواه را بر روي Timeline کليک کنيد که آن به صورت اتوماتيک Play head ميشود. Frame Number : همان نما هاي شما براي کار کردن در Timeline ميباشند. Frame line شما را قادر ميسازد تا مکان صحیح اشیاء در فریم را مشخص کنید. Timeline Menu : از طريق اين متد ميتوان به تعداد گزينه هايي که براي تنظيم چگونگي مشاهده Timeline استفاده ميشوند دسترسي پيدا کرد. Center Frame : قسمت مرکزي قابل ديد در Timeline ميباشد. Onion Skin View : توسط اين گزينه ميتوان فريم هاي مختلف يک انميشن ترتيبي را مشاهده کرد. در واقع ميتوان تشکيل فريم هاي مياني را ملاحظه نمود. Onion Skin Outline view : اين گزينه نيز مانند Onion Skin View ميتواند تعداد فريم هاي اول تا آخر را نشان دهد .اما این گزینه بیشتر براي منحني ها استفاده ميشود. Edit Multiple Frames : اين گزينه شما را قادر ميسازد تا هر بخش از يک انيميشن را که بر فريم هاي مختلفی تقسيم شده اند ، ويرايش کنيد. Modify Onion Markers : منويي را نمايش ميدهد که توسط آن شما ميتوان تعداد فريم هاي دلخواه را در Onion Skin View نمايش داد. Current Frame : در اين قسمت ساده فريم جاري نمايش پيدا ميکند. Frame Rate : این گزینه تعداد فريم هاي نمايش داده شده را نشان ميدهد. Playback Time : این گزینه مدت زمان سپري شدن فيلم را نشان ميدهد. Scroll Bars : بوسيله این گزینه ميتوان فريم هاي لايه هاي قبلي را مشاهده نمود.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۹۴ مراجعه امروز
۵۶۱۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : تهديد نرم افزارهای جاسوسی در سالهای آينده افزايش خواهد يافت
تاريخ :۱۴/۴/۱۳۸۳
متن خبر:
مشاوران شركت Metagroup طى بررسى‌هايى كه انجام دادند اعلام كردند كه تهديد نرم‌افزارهاى جاسوسى در سال‌هاى آينده و بدون هيچ مانعى افزايش خواهد يافت. نرم‌افزارهاى جاسوسى به دو گروه خوب و بد تقسيم مى‌شوند كه شناسايى هيچ‌كدام از آنها تاكنون با استفاده از تمام نرم‌افزارهاى ضد ويروس در دنيا امكان‌پذير نبوده و اين نرم‌افزارها امكان از بين بردن آنها را ندارند. اما مشكل اينجاست كه در حال حاضر شركت‌هاى زيادى مدعى هستند كه مساله نرم‌افزارهاى جاسوسى را حل كرده و كاربران زيادى را به سمت خود جلب مى‌كنند كه اين يك ادعا بيش نيست. بسيارى از اين نرم‌افزارها به هيچ وجه قابل اعتماد نبوده و مانع نفوذ نرم‌افزارهاى جاسوسى نمى‌شوند ولى با اين وجود شركت‌هاى زيادى هستند كه ظاهرا نرم‌افزارهاى ضد جاسوسى را به فروش مى‌رسانند. براساس اطلاعات به دست آمده حتى برخى از شركت‌هاى فروشنده نرم‌افزارهاى ضد جاسوسى با توزيع‌كنندگان نرم‌افزارهاى جاسوسى و تبليغاتى نيز در ارتباط هستند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۹۷ مراجعه امروز
۵۶۱۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آشنايي با NetScape جديد
تاريخ :۱۴/۴/۱۳۸۳
متن خبر:
رقيب قديمي IE از نفس افتاد. مسنجر AIM كه همراه نت اسكيپ مي آيد، امكان پخش موزيك و راديو هم دارد. از كدام دريچه به اينترنت مي نگريد: IE، Netscape يا ... ؟ طبق آماري كه سايت گوگل منتشر كرده، در حال حاضر بيش از 90 درصد كاربران وب از مرورگر IE استفاده مي كنند، اما ظاهرا AOL هنوز نااميد نشده و همچنان مي تازد؛ چرا كه اخيرا اعلام كرده تابستان امسال نسخه جديد نت اسكيپ را عرضه خواهد كرد. نسخه جديد، تغييرات زيادي نسبت به وزن قبلي ندارد، تنها چند وصله اصلاحي امنيتي به آن اضافه شده و اينترفيس تغييري نكرده است. حتما مي دانيد نت اسكيپ پيشينه اي بس قديمي دارد... نخستين نسخه آن در سال 1994 به بازار آمد و با وجود اينكه رايگان نبود، تا سه چهار سال پر كاربرترين مرورگر وب بود. مايكروسافت در سال 95 اولين نسخه IE) Intrnet Explorer) را عرضه كرد و كم كم به عنوان رقيب سرسخت نت اسكيپ شناخته شد. رايگان بودن IE و اين كه با نصب ويندوز، IE نيز خود به خود روي رايانه ها نصب مي شد، باعث مي شد كاربران ديگر به فكر خريداري و نصب نت اسكيپ يا مرورگر ديگري نباشند و اين گونه IE همه گير شد و يكه تاز ميدان رقابت. نوامبر 2000 وقتي نت اسكيپ تعطيل شده بود، شركت AOL (American Online) نت اسكيپ را به قيمت 9 ميليون دلار خريد و حداكثر تلاش خود را كرد تا نت اسكيپ را به همان قدرت قبلي بازگرداند. حاصل اين همه تلاش، نوع جديد نت اسكيپ بود كه در سال 2002 عرضه شد؛ نسخه 7 كه نسبت به نگارش هاي قبلي يك تحول عظيم به شمار مي رفت. در حال حاضر آخرين نسخه موجود در بازار 1/7 است. خبر رسيدن نگارش جديد، بهانه اي شد تا قابليت هاي چشمگير نت اسكيپ را با هم بررسي كنيم. اگر با نسخه هاي قديمي تر نت اسكيپ كار كرده باشيد، حتما تشخيص مي دهيد كه نت اسكيپ 1/7 سريع تر است. با كنترل خوبي كه بر پنجره هاي Popup (پنجره هاي كوچكي كه ناخواسته باز مي شوند) داريد، براحتي مي توانيد از شر آنها خلاص شويد. همانطور كه حتما مي دانيد، در نت اسكيپ 7 به بعد به جاي اين كه چند پنجره مختلف از نرم افزار باز شود، در يك پنجره واحد مي توانيد چندين سايت مختلف را ببينيد و براحتي بين آنها سوييچ كنيد. صفحات به صورت TAB يا پوشه در كنار هم قرار مي گيرند. اين كار باعث مي شود هميشه صفحات دوم به بعد سريع تر باز شوند. از آنجا كه در نت اسكيپ 1/7 تعداد سايت هايي كه به طور همزمان مي توانند باز باشند، بيشتر شده، سرعت مرور وب بيشتر است. براي ديدن تصاوير بزرگ مي توانيد Zoomouyt كنيد و تصاوير را در اندازه واقعي شان ببينيد. اگر به دنبال يك لغت يا لينك خاصي در صفحه مي گرديد، كافي است فقط آن را تايپ كنيد، تا اولين مورد از آن كلمه در صفحه خود به خود Select شود. با تنظيم مرورگر به صورت FullScreen، همه صفحات به صورت تمام صفحه باز مي شوند. اين كار در نوت بوك ها و مانيتورهاي كوچك خيلي مفيد است. به كمك Download Manager مي توانيد چند فايل را به طور همزمان دريافت كنيد و در صورت لزوم كار را متوقف و مجددا از ادامه آنها را دريافت كنيد. شما مي توانيد Downloadهاي خود را مديريت كنيد؛ اين كه چه فايلي را از چه سايتي گرفته ايد و در كجا ذخيره كرده ايد و ... .


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۰۰ مراجعه امروز
۵۶۱۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : مراقب کرم اینترنتی جديد به نام Bagle.x!proxy باشيد!
تاريخ :۱۵/۴/۱۳۸۳
متن خبر:
کرم اينترنتي جديدي بنام Bagle.x!proxy که نسخه جديدي از W32/Bagle مي باشد در حال گسترش در اينترنت است که خود را با فرستادن E-mail و همچنين استفاده از منابع اشتراکي در شبکه منتشر مي کند . اين کرم از نوع ويروس-تروجان بوده که پس از نصب بعنوان Mail-proxy عمل مي کند. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از گروه امنيتي آشيانه، هنگام اجراي اين کرم اينترنتي اعمال زير روي سيستم قرباني صورت مي گيرد : 1- خود را با نام Windows.exe در شاخه %system% کپي مي نمايد. 2- اين شاخه از رجيستري سيستم جهت اجراي اتوماتيک تروجان هنگام روشن شدن سيستم دستکاري مي شود: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run "window.exe" = %SysDir%\WINDOW.EXE پس از نصب ، يک بسته http به يکي از سايتهاي • http://bohema.amillo.net • http://abc517.net • http://www.abc986.net فرستاده خواهد شد که هکر را از نصب خويش مطلع مي نمايد. * توجه : لازم است آدرس هاي بالا را در بخش Restricted Sites مرورگر اينترنت خود وارد نمائيد. 3- يک پورت پروکسي روي سيستم قرباني (معمولاً پورت 14247 ) باز و به عنوان هدايت کننده ايميل Mail Relayاز آن استفاده مي کند. راه حل پاكسازي: برنامه ضد ويروس خود را سريعاً به روز نمائيد . همچنين شرکت Trend Micro برنامه اي جهت پاکسازي سيستم هاي آلوده منتشر کرده است که مي توانيد از آدرس http://www.trendmicro.com/ftp/products/tsc/sysclean.com در يافت نمائيد . در صورت بروز هرگونه مشکل يا سئوالي گروه امنيتي آشيانه آماده پاسخ و راهنمائي هموطنان عزيز مي باشد .


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۰۳ مراجعه امروز
۵۶۱۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : هشدار نسبت به مشکلات امنيتی مرورگر مايکروسافت
تاريخ :۱۵/۴/۱۳۸۳
متن خبر:
خطر استفاده از مرورگر وب مايكروسافت (internet explorer) حتى پس از نصب جديدترين وصله امنيتى همچنان در بالاترين حد ممكن قرار دارد. مرورگر شركت مايكروسافت هم‌اكنون داراى مشكلات امنيتى است كه به مهاجمان امكان نفوذ به كامپيوترها و سرقت ناخواسته اطلاعات كاربران را مى‌دهد. اين موضوع باعث شده تا شركت‌هاى امنيتى نسبت به گسترش كلاهبردارى‌هاى اينترنتى به صورت پى در پى به كاربران هشدار دهند. اخيرا نيز آگهى‌هاى جهنده (pop up) مربوط به انستيتوهاى مالى در اينترنت پراكنده شده كه كاربران مايكروسافت را پس از كليك روى آنها دچار مشكل مى‌كند. در حمله ديگرى نيز كه هفته گذشته به كاربران مايكروسافت انجام شد، مهاجمان توانسته‌اند با استفاده از نصب كدهاى مخفى در كامپيوتر اين كاربران ترافيك‌هاى بسيار سنگين و كاذبى در سايت‌هاى معتبر تجارى ايجاد كرده و مانع از فعاليت آنها بشوند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۰۶ مراجعه امروز
۵۶۲۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : مايكروسافت اينترنت اكسپلورر جديد را با تغيير درپيكربندي آن متنشر كرد
تاريخ :۱۵/۴/۱۳۸۳
متن خبر:
مايكروسافت تغييراتي را در پيكر بندي ويندوز XP، ويندوز 2000 و ويندوز سرور 2003 خود به وجود آورده است تا از حمله بد انديشانه اخير بر عليه اينترنت اكسپلورر كه به عنوان حمله.Ject Download نيز مشهور است جلوگيري كند. به گزارش بخش خبر سايت http://www.IRITN.com، به نقل از Neowin، به كاربران ويندوز توسعه شده است فورا از اين پيكربندي هاي جديد استفاده كنند تا ازكامپيوتر خود بر عليه بهره برداري اخير اينترنت اكسپلورر محافظت كنند. نسخه هاي به روز ويندوز در سايت Windows Updat موجود است. كاربراني كه از Windows XP SP2 RC2 استفاده مي كنند به اين نسخه هاي بروز نيازي ندارند. براي كسب اطلاعات بيشتر در اين زمينه به لينك زير مراجعه كنيد: http://www.microsoft.com/security/incident/download_ject.mspx براي دان لود كردن اين نسخه ها به لينك زير مراجعه كنيد: http://download.microsoft.com/download/e/5/5/e55bbf16-ae16-4d58-8f75-3233ec146255/Windows-KB870669-x86-ENU.exe


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۰۹ مراجعه امروز
۵۶۲۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : شركت مايكروسافت براي شناسايي پيام الكترونيكي ناخواسته فن آوري جديدي منتشر كرد
تاريخ :۱۶/۴/۱۳۸۳
متن خبر:
شركت مايكروسافت فن آوري جديدي بنام" Smart screen "را براي شناسايي پيام الكترونيكي ناخواسته منتشر كرد. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از ايلنا، در يك پيام الكترونيكي كه اخيرا از سوي" بيل گيتس" به كاربران رسمي محصولات مايكروسافت در مبارزه با هرزنامه‌‏ها ارسال شده است، به شكايات حقوقي در دادگاه‌‏هاي دنيا از ارسال كنندگان شناخته شده هرزنامه‌‏ها، استفاده از فن آوري‌‏هاي جديد و همكاري با ديگر شركت‌‏هاي فعال، در خدمت رساني اينترنت اشاره شده است. گفتني است؛ فن‌‏آوري جديد مايكروسافت بنام "Smart screen"، براي شناسايي پيام الكترونيكي ناخواسته در بين انبوه پيام‌‏هاي مبادله شده كه هم اكنون در سرويس" Hotmail "مايكروسافت در حال استفاده است كه قادر به شناسايي 95 درصد از پيام هاي ناخواسته و تبليغاتي است. لازم به ذكر است؛ اخيرا اين فناوري براي استفاده در سرويس دهنده هاي" MS-EXchange 2003 " نيز تهيه و ارائه شده و تحت نام Exchange lntelligent Message Filter در سايت http://www.microsoft.com قابل دسترسي است. لازم به ذكر است ؛ اين قابليت در "Exchange " چندان انعطاف پذير نبوده و امكانات تنظيم آن بر اساس نيازهاي هر موسسه و كاربر به ميزان كافي وجود ندارد ولي" بيل گيتس" قول بهينه سازي فن‌‏آوري" smart screen" را در آينده براي استفاده عملي و كامل توسط مسئولان شبكه مي‌‏دهد.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۱۲ مراجعه امروز
۵۶۲۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : سرور Power 5 تا ماه جولای می آید
تاريخ :۱۷/۴/۱۳۸۳
متن خبر:
شرکت IBM اعلام کرد که نسل جدیدی از سرورهای مبتنی بر یونیکس خود را تا 13 جولای به بازار عرضه خواهد کرد. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از سلام ، سرورهای مذکور که Power 5 نام دارند دارای 2، 4 یا 16 پردازنده هستند. مقامات IBM هنوز در مورد این گزارش ها واکنشی نشان نداده اند. گفتنی است ؛ IBM در بازار کامپیوترهای سرور پس از شرکت های SUN و HP در مقام سوم قرار دارد. درآمد IBM از محل فروش سرور در سال 2003 ، حدودا 13 درصد رشد کرد و به 1/4 میلیارد دلار رسید. درآمد SUN و HP نیز از این طریق به ترتیب 4/5 و 3/5 میلیارد دلار بوده است.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۱۵ مراجعه امروز
۵۶۳۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : چند كاربر و يك اوت لوك
تاريخ :۱۷/۴/۱۳۸۳
متن خبر:
ترفند اين هفته ما مربوط به برنامه اوت لوك اكسپرس (Outlook Express) است. ممكن است در خانه يا محل كار شما، بيش از يك نفر از يك رايانه استفاده كنند. در اين صورت تكليف نامه هاي افراد مختلف (كه نامه هاي خود را با يك اوت لوك اكسپرس دريافت مي كنند) چيست؟ آيا نامه هاي همه در يك مكان ذخيره مي شود و در معرض ديد ديگر افراد قرار مي گيرد!؟ اوت لوك اكسپرس براي حل اين مورد، استفاده از بخش Identitys را به شما پيشنهاد مي كند. شما مي توانيد با تعريف چند Identitys يا حساب كاربر، براي هر شخص فضاي مشخص و مستقلي ايجاد كنيد تا نامه هاي وي در فضاي مربوط به خودش ذخيره شود و در معرض ديد ديگران نگيرد. براي تعريف يك حساب كاربر جديد، پس از وارد شدن به برنامه اوت لوك اكسپرس از منوي فايل گزينه Identitys و سپس Add New Identitys را انتخاب كنيد. در اين قسمت يك نام براي حساب خود قرار دهيد و همچنين با تيك زدن كنار عبارت Require a password و 2 بار وارد كردن پسورد در پنجره باز شده، براي حساب خودتان يك پسورد قرار دهيد. در اين صورت فقط با وارد كردن پسورد مي توانيد وارد فضاي خودتان شويد و همين موجب محفوظ ماندن نامه هاي شما از ديد ديگر كاربران خواهد بود. سپس روي Ok كليك كنيد تا Identitys مربوط به شما ساخته شود. حالا مي توانيد وارد حساب مربوط به خودتان شويد و يك اكانت جديد تعريف كنيد و كار ارسال و دريافت ايميل را آغاز كنيد‎‏‏‏‏‏‏‏‏‎‎‎؛ همچنين براي مديريت حسابهاي كاربران، از منوي فايل گزينه Identitys و سپس Manage Identitys را برگزينيد. در اين قسمت مي توانيد يك حساب را پاك كنيد فايل يا اينكه حساب پيش فرض برنامه را تغيير دهيد. از طريق گزينه Identitys Switch در منوي فايل نيز مي توانيد بين حسابهاي مختلف، جا به جا شويد. به خاطر داشته باشيد كه براي خروج از اوت لوك اكسپرس از گزينه Exitandlgogoffldentity واقع در منوي فايل استفاده كنيد.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۱۸ مراجعه امروز
۵۶۳۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : صداي دلفين‌ها در اينترنت
تاريخ :۱۷/۴/۱۳۸۳
متن خبر:
دانشمندان اعلام كردند كه موج‌سواران اينترنتي به زودي قادر خواهند بود، به صداهاي آرامش‌بخش دلفين‌هايي كه در دهانه‌ رودخانه‌ غرب سواحل ايرلند زندگي مي‌كنند، به صورت زنده گوش فرا دهند. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از بازتاب، اين دانشمندان اعلام كردند كه يك سيستم صدا در دهانه رودخانه «شانون» نصب كرده‌اند و اميدوارند اين صداها از سپتامبر بر روي صفحه‌هاي اينترنت شنيده شود. سيمون برو، بيولوژيست دريايي و مدير اين پروژه اظهار كرد: چيزي كه ما در تلاش هستيم تا آن را به انجام رسانيم، يك كار كاملا ابداعي و هيجان‌انگيز است. مؤسسه حيات وحش و دلفين «شانون» كه اين پروژه را پيگيري مي‌كند، اميدوار است كه با ايجاد يك خط تلفني مرتبط با دلفين‌ها، مكالمه‌ اين حيوانات دريايي را بشنوند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۷۴ مراجعه امروز
۵۴۹۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : گوش به زنگ خطر ويروس در موبايل باشيد
تاريخ :۱۷/۴/۱۳۸۳
متن خبر:
دست اندركاران صنعت موبايل حدود 6 الي 12 ماه است كه خود را براي مبارزه با ويروسهاي موبايل آماده مي كنند چون پيوسته خطر آن بوسيله شيوه هاي Java-Powered در حال تكثير مي باشد. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از موج، Trevor Brignall مدير توسعه تجاري Capgemini ميگويد:مخابرات ورسانه ها اعتقاد دارند تلفنهايي كه بوسيله خطوط Java توسعه داده مي شوند مورد حمله هكرها قرار خواهند گرفت او پيش بيني مي كند كه بيش از 150 ميليون گوشي Java يك هدف جالب وجذاب براي هكرها مي باشند. هر جا كه حركتي در توسعه علم وصنعت باشد هكرها به گونه هاي مختلفي وجود دارند بنابراين پيش از آنكه هكرها در صنعت مخابرات رخنه كنند در ماه ژانويه انجمن مخابرات ونرم افزار موبايل پيغام (Anti-Abuse Working Group (MAAWG را براي امتحان كردن ايمني در همه زير ساختهاي موبايل منتشر كرد. مشكل اصلي را استفاده از نرم افزارOpenWave كه يكي از اعضاء MAAWG هست در ساختار موبايل ايجاد مي كند. در كل كاربران بايد در مقابله با فعاليتهاي غير عادي سيستم هاي خود را از درون فيلتر كنند البته Ovum تحليل گر تجاري موبايل در اين زمينه ميگويد : تابه حال 350 ميليون گوشي Java در سراسر جهان توليد شده است وهنوز هيچ مشكلي پيش نيامده است وما مطمئن هستيم كه Java در مقابل همه خطرات ايمن مي باشد. وي اضافه كرد حدود 100 ميليون Pc داراي Java هست كه هرگز هدف كرم قرار نگرفته است وآنها سيستمهاي موفقي هستند. ستاره سرخ مي افزايد: البته چيزي كه قطعيت دارد آنست كه موبايلها حداقل براي يك بار توسط Cabir مورد حمله قرار گرفته اند واين مسلما آخرين مورد هم نخواهد بود.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۷۷ مراجعه امروز
۵۴۹۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : گوش به زنگ خطر ويروس در موبايل باشيد
تاريخ :۱۷/۴/۱۳۸۳
متن خبر:
دست اندركاران صنعت موبايل حدود 6 الي 12 ماه است كه خود را براي مبارزه با ويروسهاي موبايل آماده مي كنند چون پيوسته خطر آن بوسيله شيوه هاي Java-Powered در حال تكثير مي باشد. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از موج، Trevor Brignall مدير توسعه تجاري Capgemini ميگويد:مخابرات ورسانه ها اعتقاد دارند تلفنهايي كه بوسيله خطوط Java توسعه داده مي شوند مورد حمله هكرها قرار خواهند گرفت او پيش بيني مي كند كه بيش از 150 ميليون گوشي Java يك هدف جالب وجذاب براي هكرها مي باشند. هر جا كه حركتي در توسعه علم وصنعت باشد هكرها به گونه هاي مختلفي وجود دارند بنابراين پيش از آنكه هكرها در صنعت مخابرات رخنه كنند در ماه ژانويه انجمن مخابرات ونرم افزار موبايل پيغام (Anti-Abuse Working Group (MAAWG را براي امتحان كردن ايمني در همه زير ساختهاي موبايل منتشر كرد. مشكل اصلي را استفاده از نرم افزارOpenWave كه يكي از اعضاء MAAWG هست در ساختار موبايل ايجاد مي كند. در كل كاربران بايد در مقابله با فعاليتهاي غير عادي سيستم هاي خود را از درون فيلتر كنند البته Ovum تحليل گر تجاري موبايل در اين زمينه ميگويد : تابه حال 350 ميليون گوشي Java در سراسر جهان توليد شده است وهنوز هيچ مشكلي پيش نيامده است وما مطمئن هستيم كه Java در مقابل همه خطرات ايمن مي باشد. وي اضافه كرد حدود 100 ميليون Pc داراي Java هست كه هرگز هدف كرم قرار نگرفته است وآنها سيستمهاي موفقي هستند. ستاره سرخ مي افزايد: البته چيزي كه قطعيت دارد آنست كه موبايلها حداقل براي يك بار توسط Cabir مورد حمله قرار گرفته اند واين مسلما آخرين مورد هم نخواهد بود.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۸۰ مراجعه امروز
۵۴۹۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : امنيت ويندوز و سيستم عامل Mac X
تاريخ :۱۸/۴/۱۳۸۳
متن خبر:
سيستم عامل ويندوز مايكروسافت مطمئن تر از چيزي است كه شما فكر مي كنيد و امنيت سيستم عامل Mac X بدتر از چيزي است كه شما تصور مي كنيد. اين گفته ها بر اساس آماري است كه اين هفته براي اولين بار توسط شركت امنيتي دانمارك شركت Secunia منتشر شد. به گزراش بخش خبر سايت Http://www.iritn.com ، به نقل از Neowin، اين آمار كه بر اساس مشاوره هاي امنيتي پايگاه داده براي بيشتر از 3500 محصول طي سالهاي 2003 و 2004 است . امنيت واقعي برنامه ها و سيستم هاي موسسات را بيان مي كند . هر محصول در جدولي طبقه بندي شده است كه تعداد و اهميت حفره هاي امنيتي كه در محصول وجود دارد را نشان مي دهد. Secunia اعلام كرد: « شهرت سيستم عامل Mac X به عنوان يك سيستم عامل نسبتا مطمئن غير قابل ضمانت است. » امسال و سال گذشته شركت Secunia ، 36 مشاوره درباره موضوعات امنيتي نرم افزاري داشتند كه خيلي از آنها به مهاجمان امكان مي دهد تا بر سيستم تسلط پيدا كنند. مدير اجرايي شركت Secunia اعلام كرد: «Secunia اكنون در حال نشان دادن آمارهاي امنيتي است كه چشم هاي عده كثيري را باز كرد و براي عده اي اين موضوع مي تواند اخبار آشفته اي باشد. » وي در ادامه سخنان خود افزود: « افسانه امنيت سيستم عامل Mac X در معرض خطر قرار گرفته است.»


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۸۳ مراجعه امروز
۵۴۹۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آيا مي دانيد كه سروصداي كامپيوتر شما ناشي از چيست؟
تاريخ :۱۸/۴/۱۳۸۳
متن خبر:
سروصداي بيش از اندازه كامپيوتر مي تواند ناشي از موارد مختلف مانند ۱- مودم ۲- صداهاي ناخواسته بلندگو ۳- CD درايو ۴- فن منبع تغذيه ۵- فن CPU باشد. كليه اين قسمت ها را بررسي كرده و سعي كنيد آنها را در اولين فرصت تعمير و سرويس نماييد.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۸۹ مراجعه امروز
۵۵۰۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : وبگردي در يك قدمي گوگل
تاريخ :۱۸/۴/۱۳۸۳
متن خبر:
بعيد است كه شما با اينترنت سر و كار داشته باشيد و تا كنون به موتور جستجوي گوگل سر نزده باشيد! موتور جستجوي گوگل از ديد بسياري از كاربران و كارشناسان، قوي ترين و سريع ترين موتور جستجوي موجود در اينترنت است. اگر شما نيز براي يافتن موضوعي خاصي در اينترنت به سراغ گوگل رفته باشيد، بي ترديد گفته اين عده را تاييد مي كنيد. پس چرا از نوار ابزار گوگل بر روي مرورگر خود استفاده نكنيم؟ نوار ابزار گوگل در اصل براي دستيابي سريع تر و راحت تر به موتور جستجوي گوگل طراحي شده و در كنار اين قابليت مهم، امكانات و ويژگي هاي منحصر به فردي نيز دارد كه آن را به انتخابي مناسب براي كاربران، تبديل كرده است. براي نصب جديدترين نسخه اين نوار ابزار (Toolbar) به آدرس http://toolbar.google.com برويد. پس از وارد شدن به اين صفحه، زبان مورد نظر خود را انتخاب كنيد و دكمه DownloadGoogle Toolbar را بزنيد تا به صورت آن لاين نوار ابزار گوگل بر روي اينترنت اكسپلورر شما نصب شود. (از نكات قابل توجه اين نوار ابزار، پشتيباني كامل از زبان فارسي است. براي اين منظور در صفحه ابتدايي از ليست زبان ها Persian BETA را انتخاب كنيد. ) از اين پس وقتي يك صفحه اينترنت اكسپلورر جديد باز كنيد Toolbar گوگل را نيز در آن خواهيد ديد. به راحتي مي توانيد به جستجو در گوگل بپردازيد بدون آن كه نيازي باشد كه به سايت اصلي آن مراجعه كنيد و نوار ابزار گوگل قابليت حذف خودكار پنجره هاي تبليغاتي يا همان Pop-upها و نيز نمايش Page Rank گوگل براي هر سايت (امتيازي كه گوگل به هر سايت مي دهد كه از 10 محاسبه مي شود) را نيز داراست.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۹۲ مراجعه امروز
۵۵۰۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : مايكرو سافت به رقابت با ياهو و گوگل مي رود!
تاريخ :۱۸/۴/۱۳۸۳
متن خبر:
مايكروسافت اعلام كرد تا پايان سال با به روز رساني فناوري جست و جوي خود و تاسيس موتور جست و جوي جديدي به طور مستقيم به رقابت با ياهو و گوگل مي پردازد. اين كار فقط يكي از پله هاي برنامه 100 ميليون دلاري اين شركت براي ساخت يك موتور جست و جوي جديد و فناوري مخصوص به مايكروسافت براي ورود به جمع موتور هاي جست و جوي معروف است. هم اكنون مايكروسافت براي موتور جست و جوي خود از فناوري مشترك ياهو سايت Overture استفاده مي كرده است. در حال حاضر اين شركت نسخه آزمايشي اين موتور جست و جو را براي بررسي باز خورد و نحوه تعامل كاربران با آن عرضه كرده است. در اواخر امسال نيز نسخه اصلي اين موتور به همراه ساير سرويس هاي رايگان جانبي عرضه مي شود. اين كار موجب مي شود كه مايكرو سافت بزرگترين توليد كننده نرم افزار دنيا به طور رودررو به مبارزه با گوگل و ياهو كه چندي پيش نيز فناوري جست و جوي خود را از گوگل جدا كرد برود. هم اكنون 48 درصد از كاربران اينترنت براي جست و جوي مطالب مورد نظر خود از گوگل ، 20 درصد از ياهو ، 14 در صد از MSN و 7 درصد نيز از AOL استفاده مي كنند. يكي از متخصصان در باره اين نسخه آزمايشي گفت : اين نرم افزار برنامه خوبي است ولي هنوز نمي تواند با گوگل و ياهو رقابت كند و چيزي بيشتر از اين دو موتور معروف در اختيار نمي گذارد و بايد چند ماه آينده را نيز براي كامل كردن آن هزينه كند ولي به نظر نمي رسد با وجود سرمايه گذاري هاي وسيع اين شركت بتواند رقيبان سر سخت خود را پشت سر بگذارد و يا حتي به آن ها برسد. هم اكنون با فناوري جديد گوگل كه بر حسب كلمه هاي مورد جست و جو تبليغات مرتبط را به كاربر نشان مي دهد موتور هاي جستجو به يكي از بخش هاي سود آور اينترنت تبديل شده است. پس از اعلام اين خبر از سوي مايكروسافت ارزش سهام آن با 7 سنت افزايش به 63/28 دلار رسيد.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۹۵ مراجعه امروز
۵۵۱۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : در سرويس پك (Service Pack) ويندوز XP چه چيزهايي وجود دارد؟
تاريخ :۱۸/۴/۱۳۸۳
متن خبر:
متاسفانه هر بار كه مايكروسافت سيستم عامل جديدي ارائه مي كند، تعداد فراواني Bug و حفره امنيتي در آن وجود دارند كه مدتي پس از ارائه، اين حفره ها و مشكلات يكي يكي خود را نشان مي دهند. مايكروسافت بعد از بروز چنين مشكلاتي، نرم افزارهاي به روز سازي را فراهم مي كند. اين نرم افزارها در 4 گروه Hotfix، Secaritypafel، SerucePack و Secarityrollup ارائه مي شوند. Hotfexها همان طور كه از نامشان پيداست تعميرات نوري و ضروري را فراهم مي كنند. Secaritypatchها هم براي حفره هاي امنيتي شناخته شده از محصولات مايكروسافت به كار مي روند. اما SP، مجموعه اي از Hotfex، Secaritypatch و نرم افزارهاي به روز كننده محصولات مايكروسافت است. اين بسته ها، دردسر نصب جداگانه هر محصول امنيتي و ... كه تا آن وقت ارائه شده را از بين مي برد. مايكروسافت براي ويندوز XP دو سري SP ارائه كرده است. SP1 در سپتامبر 2002 ارائه شد. اين محصول شامل IE6 است و بيش از 70 تصحيح روي امنيت و كارايي IE6 را در خود جاي داده است. به علاوه SP1 شامل 30 تعمير اشكال امنيتي براي كاربران عادي است. بخشي از SP1 هم مربوط به كاربران حرفه اي، سرورها و ... است و به طور كلي SP2، 312 بخش تعميراتي XP دارد و فهرست كامل آن در سايت مايكروسافت وجود دارد. SP2 هم كه به تازگي ارائه شده شامل بخش هايي براي حفاظت شبكه، حافظه، ايميل، امنيت مرورگر وب و حفاظت رايانه هاست. اين سرويس هم از طريق سايت مايكروسافت قابل دريافت است.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۹۸ مراجعه امروز
۵۵۱۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : زيان‎ استفاده‎ طولاني‎ از كامپيوتر
تاريخ :۲۱/۴/۱۳۸۳
متن خبر:
تحقيقات‎ نشان مي‎ دهد, اگركـودكـان ساعت‎ هاي‎ طولاني‎ مانيتور كامپيوتر روشن‎ را تماشا كنند, احتمال‎ مبتلا شدن‎ به‎ نزديك‎ بيني‎‎‎ يا ميوپي در آنهاافزايش‎ مييابد. بـه‎‎ گـزارش‎ بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از واحد مركزي خبر، "ميوپي‎‎" واژه‎ پـزشكـي بـراي‎ نزديك‎ بيني‎ است‎. مهمترين‎ علت‎‎ نزديك‎ بيني‎‎ , حالت ارثي آن‎ است‎ . نزديك‎ بيني‎‎ از اوايل‎ دهه‎ دوم‎ زندگـي شروع شده‎‎ و با رشـد انـدازه چشـم‎ در مـدت‎ بلوغ افزايش‎ مي‎‎يابد و بعـد از 18 سـالگـي متوقف‎ مي‎شود. نتايج‎ اين‎‎ تحقيقات‎ نشان مي‎دهد نزديك‎ بيني‎‎ دركشورهايي مانند ژاپن‎ , سنگاپـور و كشورهاي‎‎ اروپاي شرقي‎ رايج‎ تراست‎. 15 ميليون‎‎ نفر در ايران به‎ نزديك‎ بيني‎ مبتلا هستند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۰۱ مراجعه امروز
۵۵۱۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : 36 درصد از نرم افزارهای جهان جعل شده هستند .
تاريخ :۲۱/۴/۱۳۸۳
متن خبر:
نتيجه تحقيقات انجام شده از سوى يک شرکت آمريکايي نشان ميدهد که ۳۶ درصد از نرم افزارهاى نصب شده بر رايانه هاى شخصي و بزرگ جهان در سال گذشته غيرقانوني و سرقت شده بوده اند. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از ايرنا، گزارش شرکت "داده هاى بين المللي" از نتايج تحقيقات جديد خود درباره نسخه بردارى غيرقانوني از نرم افزارهاى رايانه اى حاکي است که در ازاى هر ۲ دلار پرداخت شده براى خريد قانوني نرم افزارهاى رايانه اى در جهان ، يک دلار صرف خريد غير قانوني آنها ميشود. بر اساس اين گزارش ، ارزش مجموع نرم افزارهاى نصب شده بر رايانه هاى جهان طي يک سال گذشته ميلادى (دى۱۳۸۱ تا دى۱۳۸۲ ) نزديک به ۸۰ ميليارد دلار بوده است . حدود۵۱ ميليارد از اين مقدار مربوط به نرم افزارهاى خريدارى شده به صورت قانوني ميباشد. بيشترين مقدار زيان ناشي از تکثير غيرقانوني نرم افرازهاى رايانه اى طي سال گذشته با۶ / ۹ ميليارد دلار در اروپا به ثبت رسيده است . اين مقدار در قاره آسيا معادل۵ / ۷ ميليارد و در کانادا و آمريکا مجموع۳ا/ ۷ ميليارد دلارمحاسبه شده است . نتيجه تحقيق انجام شده در۱۵ کشور نشان ميدهد که بيشترين سرقت نرم افزار رايانه اى در دوکشور چين و ويتنام صورت گرفته است .۹۲ در صد از نرم افزارهاى رايانه اى در هر يک از دو کشور غير قانوني هستند. پس از آن دو کشور، اوکراين با۹۱ درصد، اندونزى با۸۸ درصد، روسيه با ۸۷ درصد و زيمبابوه با۸۷ درصد قرار گرفته اند. آمريکا با۲۲ درصد و قبل از آن نيوزلاند با۲۳ درصد، دانمارک با۲۶ درصد و استراليا و سوئد هر يک با۲۷ درصد داراى کمترين ميزان نرم افزارهاى غيرقانوني هستند. تقسيم بندى منطقه اى نشان ميدهد که ۵۳ درصد از نرم افزارهاى رايانه اى نصب شده در آسيا غير قانوني هستند. اين مقدار دراروپاى شرقي برابر با۷۱ درصد، در آمريکاى لاتين ۶۳ درصد، در خاورميانه ۵۵ درصد ، دراروپاى غربي۳۵ درصد و براى شمال قاره آمريکا معادل۲۳ درصد بوده است . شرکت "داده هاى بين المللي" در نتيجه گيرى از تحقيقات خود خاطر نشان ميکند ميزان ميزان سرقت نرم افزار و ضررهاى مالي ناشي از آن در ارتباط مستقيم با ميزان گستردگي بازار منطقه اى براى نرم افزارهاى رايانه اى ميباشد. به عنوان نمونه ،۹۱ درصد از نرم افزارهاى نصب شده در اکراين و۳۰ درصداز نرم افزارهاى نصب شده در انگلستان طي سال گذشته غير قانوني بوده اند ولي به دليل گسترده بودن بازار انگلستان در مقايسه با اکراين ، ارزش ضرر مالي ناشي از سرقت نرم افراز در انگلستان معادل۷ / ۱ ميليارد دلار و يا حدود۱۷ برابر مقدار ضرر ثبت شده در اکراين بوده است .


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۰۴ مراجعه امروز
۵۵۲۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آيا مي دانيد كه از گذاشتن بلندگوها در كنار مانيتور بايد خودداري نمود؟
تاريخ :۲۲/۴/۱۳۸۳
متن خبر:
يكي از چيزهايي كه شما بايد از مانيتور خود دور نگاه داريد بلندگوها هستند. تأثير مغناطيسي بلندگوها باعث پخش رنگ در مانيتور مي گردد. علاوه بر بلندگوها حدالامكان سعي نماييد وسايل زير را نيز از مانتيور خود دور نگه داريد: - تلفن - دستگاه ضبط صوت - اسكنر- چاپگر


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۰۷ مراجعه امروز
۵۵۲۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : آيا مي دانيد شما به سادگي مي توانيد در برق مصرفي مانيتور خود صرفه جويي كنيد؟
تاريخ :۲۲/۴/۱۳۸۳
متن خبر:
امروزه اكثر مانيتورهاي موجود بازار داراي حالت هاي هوشمندي براي كاستن از مقدار برق مصرفي هستند و به صورت اتوماتيك در چهار مرحله فعال مي گردند: ۱- استفاده از محافظ صفحه نمايش Screen (Saver) :در اين حالت از آسيب ديدن مانيتور براثر يكنواختي شعاع الكتروني جلوگيري مي گردد. ۲- حالت آماده باش (Stand by) : در اين حالت مانيتور ۵۰ درصد از مصرف برق مي كاهد و به سرعت به ورودي ها پاسخ مي دهد. ۳- حالت تعليق (Suspend) : در اين حالت لامپ تصوير مانيتور در حالت خاموش است و ۸۵ تا ۹۰ درصد از ۱۰۰ درصد برق لازم براي كاركردن مانيتور كاسته مي شود. در اين حالت پاسخ به ورودي ها كمي كند است. ۴- مرحله خاموشي: در اين مرحله عمل خاموشي به وسيله كاربر به وسيله كليد روشن، خاموش مانيتور صورت نگرفته بلكه به صورت هوشمندانه اين كار توسط مانيتور انجام مي گيرد، برق مصرفي در اين حالت ۳ تا ۷ ولت است.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۱۰ مراجعه امروز
۵۵۲۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : یکی از کارمندان مایکروسافت متهم به هک کردن موتور جستجوي AltaVista شد
تاريخ :۲۲/۴/۱۳۸۳
متن خبر:
هفته گذشته مردی که متهمم به دزدیدن تکنولوژی خاص موتور جستجوگر AltaVista دستگیر شد. این مرد کارمند مایکروسافت است و هم اکنون در بخش تکنولوژی جدید MSN مشغول به کاراست. به گزارش بخش خبر سايت http://www.IRITN.com، به نقل از Seattlepi.com، فردی که هفته گذشته به اتهام دزدیدن تکنولوژی اختصاصی موتور جستجوگر Alta Vista دستگیر شد یکی از کارکنان شرکت مایکروسافت است که هم اکنون در شرکت Redmond مبتکر تکنولوژی جستجوگر MSN است. مسئولان دادگاه مرکزی گفته اند که آقای سورنت چاوت، کارمند سابق Alta Vista است که در ماه مارس 2002 و ماه ژوئن 2002 و بعد از اینکه Alta Vista را ترک کرد به صورت غیر قانونی به سیستم کامپیوتری شرکت کالیفرنیا دسترسی پیدا کرد. و سپس به شرکت مایکروسافت پیوست. بر اساس استشهاد نامه FBI، آقای چاوت پس از آن به زندگی در کالیفرنیا ادامه داد و سورس هایی را توسط Alta Vista استفاده می شد وارد کامپیوتر شخصی خود کرد تا از این طریق کار پاک کردن شبکه جهانی را انجام دهد. شرکت مایکروسافت روز پنج شنبه تصدیق کرد که چاوت کارمند این شرکت است اما هیچ اسمی از تیمی که وی در آن کار می کرد نبرد.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۱۳ مراجعه امروز
۵۵۲۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : غیر فعال کردن مالتی مدیا و گرافیک در Internet Explorer
تاريخ :۲۵/۴/۱۳۸۳
متن خبر:
برای این کار مراحل زیر را دنبال کنید: 1. ابتدا (IE) Internet Explorer را باز کرده و سپس از منویTools گزینه Internet Option را انتخاب کنید. 2. سپس به Tab (قسمت) Advanced بروید. 3. سپس از لیست به قسمت Multimedia بروید وگزینه های مورد نظر خود را فعال و یا غیر فعال کنید. (در قسمت Advanced می توانید گزینه هایی را فعال یا غیر فعال کنید.)


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۱۶ مراجعه امروز
۵۵۳۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : اعلام خطر یک ویروس جدید
تاريخ :۲۵/۴/۱۳۸۳
متن خبر:
شرکتهای ضد ویروس با اعلام خطر جدی درباره یک اسب تروای جدید (ویروس) که یکی از قویترین ابزارهای پخش را داراست به کمک اسپم، ایمیل در حال توزیع است. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از cometonet.com، این برنامه بنام Backdoor-CGT نوع جدیدی اسب ترواست که گیرنده ایمیل بعد از دریافت آن توسط Outlook به یک وب سایت هدایت میشود. چنین به نظر میرسد که این ویروس از هنگام ظهور خود در اوایل روز سه شنبه توانسته هزاران سیستم را آلوده کند. البته شرکتهای ضد ویروس هم بیکار ننشسته و توانسته اند در این مدت کوتاه ضد ویروس آنرا آماده کنند. این ویروس از روش حمله چندجانبه استفاده میکند. بعد از آنکه نامه آلوده دریافتی را باز کردید یک آدرس سایت میبینید که با کلیک کردن روی آن به یک سری سایت هدایت میشوید که خود صحنه ای از حمله این ویروس است. این ویروس سپس به کمک نقطه ضعفی در Outlook بنام IFRAME میتواند وب سایت خود را از دید یوزر پنهان سازد و آنگاه در سکوت کامل نسبت به برداشت و نصب برنامه مخرب Backdoor-CGT اقدام میکند. بعد از آن تازه نوبت حمله اصلی فرامیرسد. ویروس با بازکردن یک پورت در کامپیوتر به افراد پشت پرده این ویروس امکان میدهد که بداخل کامپیوتر رخنه کنند. وب سایتی که تحت حمله این ویروس است از نوع biz بوده و ظاهرا توسط فردی در جمهوری چک راه اندازی شده است. بعضی از شرکتهای ضد ویروس به این ویروس اهمیت چندانی نداده اند و بعضی از آنها از جمله مک آفی با دادن نام SS بدان، آنرا در رده پائین رده بندی کرده است. در هر صورت توصیه کارشناسان به شما هوشیاری کامل در برابر ویروسهاست.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۱۹ مراجعه امروز
۵۵۳۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : کرم جدید Evaman وارد شبکه شد
تاريخ :۲۷/۴/۱۳۸۳
متن خبر:
یک ویروس مخرب جدید از طریق پست الکترونیکی وارد رایانه شده، آن را خاموش کرده و از خود نسخه برداری می کند. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از عصر ارتباط، این ویروس موسوم به Evaman است و می تواند صدها میلیون دلار خسارت به بازار تجاری وارد کند. کارشناسان IT پیش بینی کرده اند که میزان خسارت این ویروس می تواند به اندازه My Doom باشد که در ژانویه گذشته به سیستم ها حمله کرده بود. Evaman از طریق فایل ضمیمه در پست الکترونیکی وارد شبکه می شود. اگر این فایل باز شود رایانه را مختل کرده و بلافاصله صدها پست الکترونیکی آلوده به سیستم های دیگر می فرستد. کارشناسان IT، به کاربران توصیه می کنند که از باز کردن هر گونه پیغام ناشناخته مخصوصا با عناوین Delivery Status Notification و Failed Delivery to last recipient خودداری کنند. شایان ذکر است تا کنون کاربران سرویس پست الکترونیک یاهو بیشترین میزان آلودگی را از این ويروس داشته اند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۵۹۹ مراجعه امروز
۵۴۱۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : مایکروسافت عرضه SP 2 را باز هم به تأخير انداخت
تاريخ :۲۷/۴/۱۳۸۳
متن خبر:
مايكروسافت بار ديگر اعلام كرد كه بسته سرويس دوم2 SP ويندوز XP را يك ماه بعد از زمان تعيين شده قبلى به بازار عرضه خواهد كرد. به اين ترتيب آغاز عرضه2 SP براى ويندوز XP به ماه آگوست منتقل شد. اين دومين بارى است كه مايكروسافت عرضه اين بسته نرم‌افزارى را به تأخير مى‌اندازد. اين بسته نرم‌افزارى عمدتا حاوى قابليت‌هاى جديد و در اصل ارتقاى مسائل امنيتى ويندوز XP است. اين در حالى است كه مسوولان شركت مايكروسافت از اعلام دليل مشخصى بابت اين تاخيرها خوددارى مى‌كنند. اما منابع آگاه مى‌گويند علت تاخيرهاى مايكروسافت به بروز مشكلات عدم همخواني2 SP با ساير نرم‌افزارهاى ديگر بازمى‌گردد. كار روى اين بسته نرم‌افزارى زمان و كار بسيار بيشتر از پيش‌بينى مايكروسافت برده است. برخى از افراد آگاه در مايكروسافت مى‌گويند: آنها نياز پيدا كرده‌اند تا تعدادى از مهندسان خود را كه روى لانگ هورن كار مى‌كنند را به كار روي2 SP مشغول كنند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۰۲ مراجعه امروز
۵۴۱۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : SAP گونه جديدی از MAxDB را می‌سازد
تاريخ :۲۷/۴/۱۳۸۳
متن خبر:
شركت SAP AG كه از توليد كنندگان برنامه‌های كامپيوتری است به همراه شريك خود MySQL AB آماده می‌شود تا database منبع باز قبلی خود را ارتقا دهد و بتواند علاوه بر افزودن مشخصات جديدی نظير قدرت مديريت و كنترل به اين database، محاسبات 64 بايتی را نيز پشتيبانی كند. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از pcworldiran، حدود يكسال پيش SAP با شركت سازنده database منبع باز MySQL قراردادی به امضا رساند تا بتواند SAP را در راستای توليد، پشتيبانی و فروش database ساخت اين شركت كه به نام Max DB معروف است را پشتيبانی كند. به گفته Zack Urlocker، قائم مقام بخش فروش شركت MySQL شعبه سوئد در اوپالا، اين دو شركت تلاش دارند تا Max DB7.6 را بسازند تا با پلاتفرم‌های جديد از جمله لينوكس 64 بيتی و HP-UX اجرا شود. برای جلب هر چه بيشتر سازندگان جاوا، MAx DB در چهارچوب سازنده اين محصول، EClipse بر پايه‌ای پشتيبانی می كند كه اصولا توسط آی‌بی‌ام ساخته شده است. اين محصول برای MySQL proxy برنامه منحصر به فردی كه به Max DB و محصولات MySQL امكان استفاده و مشاركت در اطلاعات را فراهم می‌كند، نيز پشتيبانی ايجاد كرده و به اين طريق به برنامه نويسان اجازه می‌دهد تا برنامه‌هايی بسازند كه بتوانند به راحتی از هر دو database استفاده كنند. Max DN همچنين وسيله‌ای برای كنترل اجرايی دارد و به طور خودكار توصيه‌هايی برای اجرای راحت و روان برنامه ارائه می‌دهد. تقويت عملكرد و اجرای سيستم عامل كه با پشتيبانی 64 بيتی اجرا می‌شود، به علاوه ساير مشخصات اين وسيله از جمله، مديريت و كنترل خودكار برای Charlie Braun، مجری SAP در شركت Swisslog Trans Logic Corp در دنور بسيار جالب بوده است. سازندگان سيستم های مديريت مواد از SAP DB73 استفاده زيادی می‌برند و برای برنامه‌های منابع اداری RB و ساير برنامه‌های خود حمايت لازم را ايجاد می‌كنند. شركت Swisslog همچنين قصد دارد تا برای MySAP ERP Platform يك نسخه ارتقا فراهم سازد تا با تغيير به سمت Max DB7.6 شرايط لازم را فراهم آورد. Reiner Jung مدير پروژه تبديل Lotus Notes به eGroupware e-mail و نرم‌افزار Calendering حدود 10000 كاربر دولتی در parana در كشور برزيل مي‌گويد، clustering ‌در انواع database برای اين database بسيار مطلوب خواهد بود. پروژه parana كه تنها 700 كاربر داشته است، تنها متكی به يك گونه Max DB7.5 است كه اصلا به خاطر ثبات عملكرد و اطمينان در كار آن انتخاب شده بود. به محض آنكه مدل 7.6 آماده شود به جهت قابليت ارتقا بالای اين محصول به سرعت اين برنامه سوئيچ خواهد كرد. به اعتقاد آقای Juny‌ كه به عنوان يك IT مستقل، در شهر كلون آلمان نقش مشاور امنيتی شركت را به عهده دارد، اين تغيير تا اواخر سال جاری به پايان خواهد رسيد. max DB7.6 كه از replication حمايت می كند، تا اواخر سال جاری در اختيار علاقمندان قرار خواهد گرفت. قيمت پايه اين محصول برای هر كاربر 49 دلار به ازای هر CPU در سيستم خواهد بود كه با حداقل 5 كاربر برآورد شده است. MaxDB برای SAP، به قيمت 490 دلار به ازای هر CPU‌ خواهد بود.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۰۵ مراجعه امروز
۵۴۲۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : مايكروسافت نوار ابزار ضد ويروس جديدي را معرفي مي كند
تاريخ :۲۷/۴/۱۳۸۳
متن خبر:
مايكروسافت نوار ابزار جديدي را عرضه مي كند كه به تنظيمات ويندوز در هنگام ورود ويروس هشدار مي دهد. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از خبر گزاري موج، مايكروسافت بسته نوار ابزار جديدي را براي رفع ويروس هاي كامپيوتري عرضه مي كند واين درحالي است كه اين شركت هنوز قادر به ارائه بسته نرم افزاري براي جلوگيري از انتشار ويروس هاي متفاوت كامپيوتري نيست. شايان ذكر است آخرين ويروس بنام download.ject در ژوئن(تير)سالجاري تمام شبكه جستجوي مايكروسافت را آلوده كرد ،مايكروسافت جهت موارد امنيتي اقدام به update كردن ويندوز و تغيير تنظيمات سيستم عمل كننده آن براي خنثي كردن علميات كد هاي آلوده كه به هدف دزديدن رمز هاي ورود و ديگر اطلاعات با ارزش طراحي شده اند ،كرد. اما update اخير ويندوز هم نتوانست به طور كامل ازنفوذ ويروس و انتشار آن در تمام شبكه جلوگيري كند . مايكروسافت اين بار نوار ابزار جديدي را ارائه داد كه به تنظيمات ويندوز در هنگام حمله ويروس هشدار مي دهد تا از ورود آن به دسك تاپ كامپيوتر و سپس اختلال در سيستم و انتقال به كامپيوترهاي ديگر جلوگيري كند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۰۸ مراجعه امروز
۵۴۲۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : لينوکس با ويندوز چه تفاوتى دارد؟
تاريخ :۲۹/۴/۱۳۸۳
متن خبر:
يکى از نخستين سوالاتى که در ذهن هر کاربرى که به تازگى نام لينوکس به گوشش خورده است، مطرح مى‌شود، اين است که خوب لينوکس چه تفاوتى با ويندوز دارد؟ من در اين مقاله قصد دارم بدون اينکه وارد مسائل خيلى فنى شوم، اين موضوع را تشريح کنم. لينوکس چيست؟ لينوکس به خودى خود، يک هسته (Kernel) است. هسته، بخش اصلى سيستم‌عامل را تشکيل مى‌دهد که کار آن کنترل داده‌ها، مديريت حافظه، سخت‌افزار، ورود و خروج داده‌ها و تمامى موارد اصلى سيستم‌عامل مى‌باشد. همانطور که گفتم، لينوکس به خودى خود سيستم‌عامل به شمار نمى‌رود، بلکه با استفاده از ابزارهايى که پروژه بازمتن (OpenSource) گنو (GNU) براى آن توليد کرده است، تبديل به يک سيستم‌عامل کامل مى‌شود (به همين دليل است که لينوکس را معمولا گنو/لينوکس يا GNU/Linux مى‌نامند) و با اضافه کردن ساير نرم‌افزارهاى بازمتن به آن، مى‌توان از آن در موارد متعددى مانند سرويس‌دهنده‌ه! ا، ايستگاه‌هاى کارى، کامپيوترهاى روى‌ميزى، ابر رايانه‌ها، ابزارهاى صنعتى و پزشکى که داراى سيستم‌هاى درونه‌اى (Embedded) مى‌باشند و... استفاده کرد. از نظر فنى، لينوکس را مى‌توان نمونه بازمتن سيستم‌عامل يونيکس ناميد. زيرا بر اساس استاندارد POSIX پياده سازى شده و کاملا با آن سازگار است. بنابراين لينوکس را مى‌توان نواده سيستم‌عامل پرسابقه و مستحکم يونيکس دانست که البته خواص خوب آنرا نيز به ارث برده است. اکنون تفاوت‌هاى اصلى لينوکس و ويندوز را با هم مى‌شماريم: لينوکس : سيستم‌عامل آزاد لينوکس يک سيستم عامل آزاد و بازمتن است. کد منبع آن در اختيار همگان قرار دارد و همه مى‌توانند در کدهاى آن تغيير ايجاد کرده و بنا به نيازشان استفاده کنند. آزاد و در دسترس بودن کدهاى منبع سبب مى‌شود تا بتوانيد از طرز کارکرد دقيق سيستم‌عامل مطلع شويد. شما لينوکس را مى‌توانيد به هر تعداد کپى کرده و بين دوستانتان پخش کنيد. در سمت مقابل، ويندوز يک سيستم‌عامل اختصاصى است که کد منبع آن سرى نگهداشته شده است و براى همگان در دسترس نيست. شما نمى‌توانيد بفهميد که واقعا در زير سيستم‌عامل ويندوزتان چه مى‌گذرد؟ آيا يک برنامه جاسوسى در آن پنهان نشده است؟ بعۡ ?د نيست. سيستم عامل ويندوز رايگان نبوده و تحت حمايت قانون کپى‌رايت قرار دارد. شما نمى‌توانيد آنرا کپى کرده و پخش کنيد. در صورت اين کار شما خلاف‌کار هستيد و جريمه و مجازات خواهيد شد. (فعلا نه در ايران ولى در ۴-۶ سال آينده بله) لينوکس را به هواپيمايى تشبيه کرده‌اند که هر قسمت از انرا در جايى ساخته‌اند. لينوکس واقعا محصول کشور خاصى نيست. تعداد زيادى از مردم در سرتاسر جهان در حال کار بر روى آن و توسعه آن هستند. تعداد برنامه نويسانى که روى بخش‌هاى مختلف سيستم‌عامل لينوکس کار مى‌کنند، به حدود ۴۰۰ هزار نفر مى‌رسد، در حالى که تعداد کل برنامه‌نويسان مايکروسافت کمتر از ۱۰۰۰۰ نفر است. همين، تفاوت کيفيت کار را مشخص مى‌کند. شما با سيستم‌عامل لينوکس آزاد هستيد. لازم نداريد تا از نرم‌افزارهاى اختصاصى استفاده کنيد و تحت انقياد آنها در آييد. لينوکس : سرعت، قدرت، پايدارى همانطور که گفتم، لينوکس نواده سيستم‌عامل يونيکس است. بنابراين ساختار کلى اين سيستم‌عامل کاملا با ويندوز متفاوت است. اين به اين معنى است که مثلا شما نخواهيد توانست برنامه‌هايى که در ويندوز داريد، روى لينوکس اجرا نماييد (البته راه‌هايى وجود دارد – شبيه سازها - ولى در حالت عادى خير). يکى از خواص اصلى سيستم‌عامل‌هاى خانواده يونيکس، پايدارى و استقامت بسيار بالاى آنهاست. اين سيستم‌عامل‌ها به اين راحتى‌ها خراب نشده و به ندرت نياز به بوت مجدد پيدا مى‌کنند. لينوکس‌هايى وجود دارند که شما مى‌توانيد سالها بدون نياز به بوت، از آنها استفاده نماييء ?. در سمت مقابل، حتى جديدترين و پايدارترين سيستم‌هاى ويندوز به اندازه يک موى لينوکس پايدار نيستند. براى بکارگيرى سيستم‌هاى ويندوز به عنوان سرويس دهنده به حافظه و پردازنده‌هاى قويترى نياز داريد و مطمئن باشيد اگر هر هفته آنرا بوت نکنيد، از کار خواهد افتاد! من حدود ۲ سال است با اين سيستم‌عامل کار مى‌کنم. تنها يکبار مجبور شده‌ام بدليل اشکال در کارت صوتى آنرا بوت کنم. (فقط کارت صوتى از کار افتاده بود!) در صورتى که در ويندوز، شما اگر خيلى شانس داشته باشيد، حتما هفته‌اى ۲-۳ مشکل را که منجر به بوت خواهند شد، خواهيد داشت. معمولا سيستم‌عامل لينوکس به راحتى خراب نمى‌شود و برعکس ويندوز مجبور نيستيد تا آنرا هر چندماه يکبار مجددا نصب کنيد. حتى برخى از انواع لينوکس به نصب «يکبار براى تمامى عمر» مشهور هستند. اين گونه سيستم‌ها را مى‌توانيد حين کار و حتى بدون بوت، به نسخه‌هاى جديدتر ارتقا دهيد. لينوکس : امنيت، امنيت، امنيت امروزه در دنيايى متکى بر فناورى اطلاعات زندگى مى‌کنيم که هر لحظه به خطر افتادن جريان اطلاعات منجر به بروز خسارت‌هاى تجارى جبران ناپذيرى خواهد شد. امروزه همه به دنبال يک سکوى (Platform) امن‌تر براى اجراى برنامه‌هاى کاربردى و سروى‌دهنده‌ها هستند. لينوکس حرف‌هاى زيادى براى گفتن در سمت امنيت دارد. بسيارى از قابليت‌هاى امنيتى که در ويندوز وجود ندارند و يا فقط با اضافه کردن نرم‌افزارهاى اضافى قابل دسترسى مى‌باشند، بطور درونى و پيش‌گزيده در لينوکس پياده سازى شده‌اند. لينوکس از ابتدا براى محيط‌هاى شبکه‌اى و چند کاربره طراحى شده است و همين باعث! رعايت مسائل امنيتى از ابتدا در ان شده است، درحالى که ويندوز اينگونه نبوده و درحال حاضر نيز از نظر امنيتى داراى نقاط ضعف فراوانى است. مثلا يک برنامه مخرب با استفاده از همين ضعف‌هاى امنيتى مى‌تواند کل سيستم‌عامل را نابود کند، ولى در صورتى که مورد مشابهى در لينوکس وجود داشته باشد، حداکثر به دايرکتورى خانگى کاربر اجرا کننده آسيب خواهد رسيد، نه کل سيستم‌عامل. اينطور نيست که لينوکس فاقد هر گونه اشکال امنيتى باشد، خير، ولى باز بودن کد منبع آن باعث مى‌شود تا بسيارى از اشکالات امنيتى پيش از ايجاد خسارت و در مراحل توسعه و برنامه نويسى برنامه بر ملا شده و رفع شوند. در صورتى که اشکالى نيز در برنامه‌هاى منتشر شده يافت شود، بدليل موجود بودن کد منبع سريعا برطرف مى‌گردد. در صورتى که در سيستم عامل ويندوز شما بايد منتظر مايکروسافت بمانيد و بمانيد و بمانيد. سيستم‌عامل ويندوز داراى اشکالات امنيتى بسيارى است که به راحتى هم کشف نمى‌شوند و هنگامى کشف مى‌شوند که خسارات جبران ناپذيرى در اثر حمله از طريق آن ضعف‌هاۡ ? امنيتى رخ دهد که امثال آنرا شاهد هستيم. مى‌توان ادعا کرد که تقريبا هيچ ويروسى براى لينوکس وجود ندارد و اين درحالى است که ساليانه بيش از ۱۰۰۰ ويروس و کرم مختلف براى سيستم‌عامل ويندوز ايجاد مى‌شود. اين بخاطر عدم گسترده بودن لينوکس نيست (حدود ۷۰ درصد از سايت‌هاى وب در جهان بر روى سيستم‌عامل لينوکس و سرويس‌دهنده وب آپاچى درحال اجرا هستند) بلکه بدليل وجود حفره‌هاى امنيتى متعدد ويندوز و سياست انحصار گرايى مايکروسافت است. يعنى چه؟ مايکروسافت طورى رفتار و سياست گذارى کرده است که مشتريان خود را تنها به محصولات خودش عادت دهد. بسيارى از کاربران ويندوز از اينترنت اکسپلورر و آتلوک براى مر١ ?ر وب و پست الکترونيک استفاده مى‌کنند. من به عنوان يک ويروس نويس، مى‌دانم که اگر ويروسى را براى کاربران ويندوز بنويسم، بر روى کامپيوترهاى ۹۰ درصد آنها اثر خواهد کرد. چون اکثرا از IE و Outlook استفاده مى‌کنند. ولى در لينوکس چطور؟ در لينوکس شما طيف وسيعى از انتخاب و عدم اجبار داريد. من از مرورگر موزيلا استفاده ميکنم. دوستى دارم که Konqueror را ترجيح مى‌دهد. ديگرى از Opera استفاده مى‌کند. من از Kmail استفاده مى‌کنم. دوستم از Evolution، ديگرى از Pine و بعدى از Mutt و برادرم هم از Mozilla Mail. من فقط مى‌توانم براى يکى از اينها ويروس بنويسم چون روى بقيه کار نخواهد کرد و عملا مى! زان اثر آن انداک خواهد بود. ضمنا هيچيک از ويروس‌هايى که براى ويندوز نوشته شده‌اند، بر روى لينوکس کار نمى‌کنند. لينوکس : تعدد سکوهاى اجرايى لينوکس برخلاف ويندوز بر روى تعداد زيادى از سکوهاى مختلف سخت‌افزارى اجرا مى‌شود و شما حتى قادريد آنرا براى کار بر روى سکوى مورد نظرتان تغيير دهيد. اين قابليت، لينوکس را براى بکارگيرى در سخت‌افزارهاى درونه‌اى (Embedded) بسيار مناسب مى‌سازد. هسته 2.6 لينوکس که بتازگى ارائه شده است، اين امکان را فراهم مى‌سازد تا لينوکس را بر روى دستگاه‌هاى بسيار کوچک و يا ابر رايانه‌هاى بسيار بزرگ اجرا نماييد. اصلا ويندوز مى‌تواند؟ لينوکس : گسترده‌ترين تنوع در کاربرد لينوکس را مى‌توانيد براى انجام وظايف بسيار متعددى بکار بگيريد. از دستگاه چک کردن اتصالات شبکه، ديوار آتش، مسيرياب (Router) شبکه، سرويس‌دهنده‌هاى مختلف مانند وب، بانک اطلاعاتى، فايل، چاپ و...، ميزهاى کار (Desktop)، ايستگاه‌هاى کارى (Workstations) و... سيستم‌عامل لينوکس حتى اين امکان را دارد که از آن بتوان به صورت يک سيستم زنده و پرتابل استفاده کرد. به اين معنى که کل سيستم‌عامل از روى يک ديسک CD اجرا شود و شما آنرا با خودتان جابجا کنيد و ميزکار و تنظيماتتان را همراه خودتان منتقل کنيد. علاوه بر اين، اين قابليت براى رفع اشکال و نمايش آن نيز بسيار مفيد است. لينوکس : تنوع در انتخاب بدليل آزاد بودن سيستم‌عامل لينوکس، هر گروه يا موسسه تجارى، يک نسخه خاص از آن که به توزيع يا پخش (Distribution) معروف هستند، منتشر ساخته است. اين توزيع‌هاى مختلف همگى لينوکس هستند، ولى هريک معمولا براى يک يا چند امر خاص مانند سرويس‌دهنده، ديوار آتش، ميزکار و... طراحى شده‌اند و هريک قابليت‌ها و بهينه سازى‌ها خاص خودشان را به کاربران ارائه مى‌کنند. کاربران در اين ميان آزادى انتخاب زيادى داشته و مى‌توانند چيزى که کاملا نيازشان را برطرف مى‌کند، انتخاب کنند. چيزى که در ويندوز نمى‌توان مفهومى براى آن پيدا کرد. لينوکس : سيستم‌عاملى حرفه‌اى لينوکس يک سيستم‌عامل حرفه‌اى است. يعنى ممکن است يک کاربر کاملا غير فنى براى مديريت آن و انجام برخى از تنظيمات سخت‌افزارى دچار مشکل شود و نتواند به راحتى اين کار را انجام دهد. البته برخى از توزيع‌هاى لينوکس اين امور را بسيار راحت (و حتى راحت‌تر از ويندوز) کرده‌اند، ولى با اين حال به طور کلى، لينوکس يک سيستم‌عامل حرفه‌اى است که در عين سادگى، از پيچيدگى‌هاى فنى زيادى برخوردار است. البته تمام کاربران لازم نيست اين امور را بدانند. مثلا يک کارمند دفترى که امورى مانند تايپ و حسابدارى را با کامپيوترش انجام مى‌دهد، ممکن است از نظر فنى تفاوتى را اح! ساس نکند، ولى لينوکس خوراکى ۴ ساله براى کاربران خوره فراهم مى‌سازد! برخلاف ويندوز، نکات بى‌پايانى براى يادگيرى در لينوکس وجود دارد. اين سيستم‌عامل ۴ سال به راحتى شما را مشغول خواهد کرد و مى‌توانيد مطمئن باشيد پس از آن بازهم مطالب جديدى براى يادگيرى وجود خواهند داشت! پس خوره‌هاى کامپيوترى از آن لذت وافرى خواهند برد و هرگز آنرا رها نخواهند کرد. برخلاف ويندوز، در لينوکس راحت‌تر هستيد تا بسيارى از کارهاى پيکربندى و سيستمى را از خط فرمان بسيار قدرتمند و عالى آن انجام دهيد. با اينکه براى بسيارى از امور مانند ويندوز ابزارهاى گرافيکى طراحى شده است، يک کاربر حرفه‌اى واقعا از خط فرمان لينوکس لذت خواهد برد. خط فرمان ويندوز را اصلا مى‌توان خط فرمان ناميد؟ لينوکس : بهشت برنامه نويسان! لينوکس را بهشت برنامه نويسان ناميده‌اند. برخلاف ويندوز که اکثر ابزارهاى برنامه نويسى روى آنرا بايد جداگانه نصب و حتى خريدارى نماييد، لينوکس به همراه تمامى ابزارهاى برنامه نويسى مورد نيازتان و با هر زبانى که فکر کنيد ارائه مى‌شود. کافى است آنرا نصب کنيد و کار برنامه نويسى‌تان را با ابزارهاى دلخواهتان شروع کنيد. لينوکس : يک جعبه ابزار کامل لينوکس براى کاربران حرفه‌اى، يک جعبه ابزار کامل به شما مى‌رود که در آن تمامى ابزارهاى مورد نياز مانند برنامه‌هاى اينترنتى، ابزارهاى امنيتى مانند ابزارهاى آزمايش شبکه، ابزارهاى برنامه نويسى، هزاران صفحه کتاب و راهنما در آن پيدا خواهيد کرد. ابزارهايى که در اختيارتان قرار دارد چنان متنوع هستند که مى‌توانيد ۹۰ درصد اطمينان داشته باشيد که پس از نصب آن به چيز ديگرى نياز نخواهيد داشت. لينوکس : يکى از زيباترين دستاوردهاى بشرى لينوکس در سايه همکارى و تبادلات علمى هزاران نفر در سرتاسر جهان ايجاد شده و توسعه يافته است. اين همکارى چنان گسترده و زيبا بوده و هست، که به سيستم‌عامل لينوکس لقب «زيباترين دستاورد همکارى جمعى بشر» داده شده است. فرهنگ حاکم در جامعه لينوکس و بازمتن، فرهنگ کمک، اشتراک اطلاعات و تلاش براى بهبود هرچه بيشتر محصولات و «انجام هرکارى که از دستت برمى‌آيد» است. هرکس که مى‌خواهد با اين سيستم‌عامل کار کند، بايد تمامى ديدگاه‌ها و عقايد قبلى خود را درباره نرم‌افزارها و سيستم‌عامل کنار گذاشته و با يک ديدگاه جديد و طرز فکر متحول شده وارد دنياى لينوکس شود! ، زيرا با فرهنگ حاکم متفاوتى روبرو خواهد بود. لينوکس نويد دهنده آزادى است...


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۱۱ مراجعه امروز
۵۴۲۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : ابزار پاكسازي براي Download - Ject عرضه شد
تاريخ :۲۹/۴/۱۳۸۳
متن خبر:
هم‌‏زمان با انتشار ماهانه اصلاحيه‌‏هاي جديد مايكروسافت ابزار پاكسازي ويژه اي براي ترميم تاثيرات ناشي از حركات خراب‌‏كارانه عرضه شد . به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از ايلنا‌‏, مايكرو سافت ابزار پاكسازي ويژه اي برايDownload - Ject منتشر كرده كه 118 كيلوبايت حجم دارد و به رايگان بر روي سايت مايكروسافت قابل دريافت و استفاده است. بنابه اين گزارش؛ اين ابزار , ويروس Berbew را كه به روش فوق بر روي كامپيوتر كاربري كه به سايت‌‏هاي تغيير يافته مراجعه مي‌‏كند، پيدا كرده و از بين مي برد. هم چنين؛ در صورت فعال شدن اين ويروس , بسياري از مشخصات و اطلاعات ذخيره شده برروي كامپيوتر و يا وارد شده برروي صفحه كليد كاربر, به سرقت مي رود . گفتني است؛ اين ابزار، مشابه دو ابزار قديمي مايكروسافت كه براي شناسايي و پاكسازي ويروس هاي Sasser و MS-Blast منتشر شده بود، است. لازم به ذكر است؛ اگر چه اين معضل به شدت و گستردگي دو ويروس Sasser و Ms -Blast‌‏ نيست ولي مايكروسافت علي رغم عدم توانايي در انتشاراصلاحيه قطعي براي ترميم نقاط ضعف مورد استفاده در حملهDownload - Ject ,مي‌‏خواهد از گسترش عوارض جانبي آن جلوگيري كند.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۶۶ مراجعه امروز
۵۳۸۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : اولين ويروس براي ويندوز CE
تاريخ :۲۹/۴/۱۳۸۳
متن خبر:
کارشناسان به تازگي از انتشار ويروسي در سيستمن عامل ويندوز CE خبر داده اند که براي استفاده در تلفن هاي همراه و کامپيوترهاي کوچک دستي طراحي و ساخته شده است. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از خبرگزاري سلام، سرانجام تنها سيستم عامل ويندوزي که از شر ويروسهاي کامپيوتري در امان مانده بود به اين پديده آلوده شد. کارشناسان به تازگي از انتشار ويروسي در سيستمن عامل ويندوز CE خبر داده اند که براي استفاده در تلفن هاي همراه و کامپيوترهاي کوچک دستي طراحي و ساخته شده است. شرکت Bit Defender که اين ويروس را شناسايي کرده اعلام کرد که ظاهراً نگارش اين ويروس کار همان گروهي است که اولين ويروس را براي سيستم عامل Symbian نوشته بودند. اين سيستم عامل هم براي استفاده در تلفن هاي همراه و کامپيوترهاي دستي نوشته شده است. گفتي است که اين ويروس هم مانند ويروس Cabir که از طريق سيستم عامل Symbian گسترش مي يافت، آثار تخريبي ندارد و پس از آلوده کردن تلفن همراه پيامي را به نمايش در مي آورد و از کاربر براي آلوده کردن فايلهاي او اجازه مي گيرد ! کارشناسان معتقدند هدف اصلي از نگارش اين ويروس تنها قدرت نمايي بوده است.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۶۹ مراجعه امروز
۵۳۸۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : نقطه ضعف در نرم افزار Acrobat Reader
تاريخ :۲۹/۴/۱۳۸۳
متن خبر:
نقطه ضعف موجود در نرم افزار Acrobat Reader (نسخه 6.0.1) امكان كنترل كامپيوتر آسيب پذير از راه دور را فراهم مي كند. به گزارش بخش خبر سايت اخبار فن‌آوري اطلاعات ايران، به نقل از ايلنا , اين نقطه ضعف كه در ابتداي سال جاري كشف شده، به طور خصوصي به اطلاع شركت Adobe رسيده بود و نسخه 6.0.2 نرم افزار Acrobat Reader كه در خرداد ماه منتشر شد، اين نقطه ضعف را اصلاح و ترميم مي كند. گفتني است؛ تنها با گشودن يك فايل PDF بر روي اينترت و يا فايل PDF پيوست شده به يك پيام الكترونيكي، امكان سوء‌‏استفاده از اين نقطه ضعف فراهم شده و به افراد بيگانه از راه دور مجوز دسترسي در حد يك كاربر محلي را مي دهد. بنا بر اين گزارش با نامگذاري فايل PDF به روش خاص و استفاده از عبارت طولاني به عنوان پسوند، نرم افزار Acrobat Reader در هنگام تفكيك قسمت هاي مختلف (Parse) نام فايل، دچار خطا شده و حالت Bufferover - flow رخ مي دهد. لازم به ذكر است، بر اساس برخي بررسي‌‏ها، مجموعه كامل Acrobat Reader نيز داراي اين نقطه ضعف است و جهت دسترسي به جديدترين نگارش و به روز رساني نرم افزار Acrobut مي توان به سايت شركت Adobe مراجعه كرد.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۷۲ مراجعه امروز
۵۳۸۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : فرستادن پيام در شبكه هاي LAN
تاريخ :۱/۵/۱۳۸۳
متن خبر:
براي اين كار ابتدا وارد Command Prompt مي شويم و در آن فرمان IPCONFIG را تايپ مي كنيم. پس از چند لحظه در زير همين قسمت تمام آي پي هايي كه در آن لحظه به كامپيوتر شما يا به شبكه Lan داخلي متصل هستند نوشته مي شود. براي مثال: 192.168.0.1 192.168.0.2 و غيره... روش كار: براي شروع كار ابتدا يكي از آي بي ها را انتخاب مي كنيم (سعي مي كنيم تا صاحب آي پي مورد نظر از جنس مخالف باشد :D ) و دستور زير را براي آن آي پي مي نويسيم: NET SEND IP MESSAGE كه به ترتيب: NET SEND : دستور اوليه مي باشد. IP : اي پي شخص مورد نظر. MESSAGE : پيغام مورد نظر مي باشد. براي مثال : ..... Elahi


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۷۵ مراجعه امروز
۵۳۹۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : Spyware و Adware چيست؟
تاريخ :۱/۵/۱۳۸۳
متن خبر:
آيا از صفحات مختلفي که گاه و بيگاه ، نا خواسته روي صفحه مانيتورتان ظاهر مي شود بستوه آمده ايد ؟ يا اينکه از کاهش شدید ارتباط اينترنت خودتان متعجب شده ايد؟ آيا مي دانيدکه سيستم شما آلوده به برنامه هاي جاسوسی شده است؟ آيا تا بحال از سيستم هاي P2P استفاده کرده ايد؟ مي دانيد در هنگام استفاده از سرويس هاي File Sharing مانند Kazza و ... سيستم شما آلوده به Spyware و Adware ميگردد؟ Spyware و Adware چيست؟ Spyware و Adware فايل هائي هستند که روي کامپيوتر شما نصب مي شوند حتي بدون اينکه شما چنين چيزي را درخواست کرده باشيد!. اين برنامه ها شرکت هاي بزرگ را قادر مي سازند تمام اعمال شما را در هنگام گشت و گذار در اينترنت رديابي کنند . بدانند چه مي خواهيد ؛ چه مي خريد و حتي به چه چيزهائي علاقه داريد. متاسفانه در اکثر حالات اين جاسوسي ! قانوني است زيرا اين شرکت ها موافقت شما را با نصب اين برنامه ها در متن يادداشت License agreement خويش براي اينکه از برنامه هاي آنها (برنامه هائي مانند Kazza و...) استفاده کنيد ؛ دريافت کرده اند و در واقع کاربر از همه جا بي خبر که بدون خواندن متن اين License ها آنها را تائيد مي کند ؛ با دست خويش سيستم خود را به سمت هلاکت سوق داده است. بنا بر اين اگر در هنگام گشت و گذار در اينترنت ؛ ناگهان صفحات ناخواسته اي روي مونيتور شما ظاهر شد که اکثر آنها شما را ترغيب به کليک روي لينک خاصي مي نمايند ؛ شک نکنيد که سيستم شما آلوده به Spyware مي باشد . خوب با این اوصاف چه باید کرد؟ نگران نباشيد چون برنامه هاي متعددي جهت پاکسازي سيستم از شر اين مهمان هاي ناخوانده وجود دارد . همچنین سایتهای متعددی وجود دارند که بصورت Online سیستم شما را از حیث وجود این برنامه ها بررسی می کنند. شما با مراجعه به آدرس http://www.spywareguide.com/txt_onlinescan.html می توانید سیستم خود را پویش کنید . همچنین در سایتهای زیر نیز برنامه های Desktop ای جهت تست کامپیوترتان وجود دارد که می توانید دانلود نمائید. http://www2.palsol.com/spyrem_offer/index.html?hop=cyberw http://wvw.ttian.net/download/show.php?id=1199&down=1 یاد آور می شوم دوستان شما در گروه امنیتی آشیانه آماده پاسخگوئی به سئوالات شما عزیزان خواهند بود.


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۷۸ مراجعه امروز
۵۳۹۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

عنوان خبر : اولين ويروس رايانه‌هاي دستي مجهز به ويندوز ميكروسافت منتشر شد
تاريخ :۱/۵/۱۳۸۳
متن خبر:
اولين ويروس رايانه‌هاي دستي مجهز به نرم‌افزار ويندوز ميكروسافت در رايانه‌هاي جيبي شناسايي شده است. به گزارش بخش خبر سايت اخبار فن آوري اطلاعات ايران، از ايسنا به نقل از شبكه‌ي خبري بي.بي.سي، اين ويروس Duts نام دارد و از سوي يك شركت امنيتي رومانيايي تحت عنوان BitDefender كشف شده است. اين كمپاني اعلام كرد ويروس فوق تاكنون تهديدي در پي نداشته است و ظاهرا نويسندگان اين ويروس سعي دارند تا از آن به عنوان هشداري بر امكان توليد ويروس براي اين سخت‌افزارها استفاده شده است. اين كمپاني همچنين افزود كه ويروس Duts از سوي فردي توليد شده كه خود را راتر معرفي كرده و در گروه نويسندگان ويروسي موسوم به ”29 آ وي ايكس” فعال بوده است. طبق آمار ارايه شده از سوي اين كمپاني در حال حاضر در حدود 17 ميليون رايانه‌ي دستي مجهز به ويندوز در سراسر جهان مورد استفاده قرار دارند. اين ويروس ابتدا براي كارشناسان ضدويروسي فرستاده شده است. ماه گذشته همين گروه، ويروس ديگري را با همين هدف موسوم به Cabir براي ورود به ابزار مجهز به سيستم عامل Symbian طراحي و منتشر كرده بودند.


اولين ويروس رايانه‌هاي دستي مجهز به ويندوز ميكروسافت منتشر شد
۱/۵/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=145
Spyware و Adware چيست؟
۱/۵/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=144
فرستادن پيام در شبكه هاي LAN
۱/۵/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=143
نقطه ضعف در نرم افزار Acrobat Reader
۲۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=142
اولين ويروس براي ويندوز CE
۲۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=141


Links ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۳۸۰ مراجعه امروز
۳۹۷۲ مراجعه اين ماه
به Iran Developers Network خوش آمديد

سايت برنامه نويسان ايراني
 www.barnamenevis.com
سايت برنامه نويس دات كام يك سايت تخصصي در زمينه هاي مختلف برنامه نويسي به زبان فارسي بوده و استفاده از مقالات و برنامه هاي اين سايت جهت يادگيري مطالب ارائه شده ، كاملا رايگان ميباشد.
اين سايت سعي دارد محلي مناسب را براي تبادل نظرات برنامه نويسان فارسي زبان فراهم آورد. علاقه مندان به برنامه نويسي ميتوانند مقالات و برنامه هايي در زمينه هايي مانند :
اينترنت و وب - VB - دلفي - Sql-Server - بانكهاي اطلاعاتي - Access - ..... را در اين سايت پيدا نمايند.
اين سايت شامل بخشهاي متنوعي مانند :
- مقالات و برنامه هاي آموزشي
- مسابقات نرم افزاري
- تبادل نظر كاربران
- پرسش و پاسخهاي برنامه نويسان
- معرفي كتب و مجلات نرم افزاري
- معرفي سايتهاي نرم افزاري
 . و غيره ميباشد. علاقه مندان ميتوانند با مراجعه به اين سايت و ثبت نام در بخش خبرنامه سايت ، هر ماه از اخبار جديد سايت مطلع گردند
www.IranASP.net
 www.iranasp.net
سايتي براي يادگيري زبان برنامه نويسي ASP.Net جهت ساختن صفحات پويا به زبان فارسي و داراي محيطي براي بحث و تبادل نظر
www.IranIT.info
 www.iranIT.info
اين سايت در بر گيرنده مباحث متفاوت مربوط به تکنولوژي اطلاعات با تاکيد بر سيستم هاي بر اساس وب است . اين مباحث به صورت مقالات يا اخباري به زبان فارسي ارائه مي شود که در برگيرنده مطالب آموزشي تجارب نويسنده و از اين قبيل است
www.MajidOnline.com
 www.MajidOnline.com
سايتي در مورد مطالب و آموزشهاي برنامه هاي گرافيکي به همراه انجمن و امکانات ديگر
www.IranPHP.com
 www.IranPHP.com
اين سايت آموزش زبان PHP را به طور کامل و به زبان فارسي ارائه مي کند.
www.IranJavascript.com
www.IranJavascript.com
يک سايت آموزشي عالي در مورد جاوا اسکريپت به زبان فارسي
www.JavanSoft.com
www.JavanSoft.com
سايت شرکت جوان سافت در زمينه طراحي و توليد نرم افزار و پايگاههاي وب
www.arianexpress.com
http://www.arianexpress.com/delphi
سايت آموزشي و محيطي براي بحث و تبادل نظر برنامه نويسان دلفي


Link2Us ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۵ بيننده در حال حاضر
۱۳۸۳ مراجعه امروز
۳۹۷۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

پيوند به ما

جهت حمايت از IranDevelopers.com مي توانيد يکي از تصاوير زير را در سايت خود قرار داده و پيوند (link) آن را مطابق http://www.IranDevelopers.com قرار دهيد.

Iran Developers Network - Learn Programming
اندازه 100*30

Iran Developers Network - Learn Programming
اندازه 100*50

Iran Developers Network - Learn Programming
اندازه 468*60

در صورت قرار دادن پيوند اين سايت در سايت خودتان ، لطفا مديريت سايت را با استفاده از صفحه ارتباط با ما ، مطلع نماييد


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۳۸۹ مراجعه امروز
۳۹۸۱ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

1 تا 15 از 145 خبر
1.
۲۴/۷/۱۳۸۴
http://www.irandevelopers.com/fullstory?id=1

2. حق انحصاري فرمت GiF منقضي شد
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=2

3. بيل گيتس:Spam يک آفت است
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=3

4. نامهاي جديد در بازار محصولات قابل حمل
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=4

5. معرفي سايت irandevelopers در روزنامه همشهري
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=5

6. ويروس جديد با نام tritle.c
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=6

7. گفت و گو با نماينده وزارت ارشاد در کميته فيلترينگ
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=7

8. CeBIT،اين بار در آمريكا
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=8

9. SSL، مدعي تامين امنيت ارتباطات
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=9

10. رايانه ها در دست شما خم مي شوند
۶/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=10

11. سرويس پک 4 ويندوز 2000 آمد
۶/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=11

12. آغاز ثبت نام مركز آموزش الكترونيكي پرشيا
۹/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=12

13. گزارش نيويورک تايمز از محدوديتهای اينترنتی در ايران
۹/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=13

14. اينتل رقيب سرسخت خود را ازپاي درآورد
۹/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=14

15. هکرها آخر اين هفته اينترنت را ويران خواهند کرد
۱۲/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=15

اولين| بعدي| آخرين


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۵۴ مراجعه امروز
۵۳۷۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

1 تا 15 از 145 خبر
1.
۲۵/۷/۱۳۸۴
http://www.irandevelopers.com/fullstory?id=1

2. حق انحصاري فرمت GiF منقضي شد
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=2

3. بيل گيتس:Spam يک آفت است
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=3

4. نامهاي جديد در بازار محصولات قابل حمل
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=4

5. معرفي سايت irandevelopers در روزنامه همشهري
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=5

6. ويروس جديد با نام tritle.c
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=6

7. گفت و گو با نماينده وزارت ارشاد در کميته فيلترينگ
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=7

8. CeBIT،اين بار در آمريكا
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=8

9. SSL، مدعي تامين امنيت ارتباطات
۵/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=9

10. رايانه ها در دست شما خم مي شوند
۶/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=10

11. سرويس پک 4 ويندوز 2000 آمد
۶/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=11

12. آغاز ثبت نام مركز آموزش الكترونيكي پرشيا
۹/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=12

13. گزارش نيويورک تايمز از محدوديتهای اينترنتی در ايران
۹/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=13

14. اينتل رقيب سرسخت خود را ازپاي درآورد
۹/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=14

15. هکرها آخر اين هفته اينترنت را ويران خواهند کرد
۱۲/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=15

اولين| بعدي| آخرين


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۶۰ مراجعه امروز
۵۳۷۶ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

16 تا 30 از 145 خبر
16. آخرين مصوبات کنفرانس جهاني WRC
۱۲/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=16

17. کدهاي بازويندوز NT انتقام جويي از لينوکس؟
۲۱/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=17

18. سه Patch جديد از مايکروسافت
۲۴/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=18

19. آمريكايي‌ها به دنبال جذب متخصصان فناوري اطلاعات هندي هستند
۲۴/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=19

20. روبوت جديد MSN
۲۴/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=20

21. 81 درصد کامپيوترهاي جهان در معرض هک هستند
۲۴/۴/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=21

22. Google هم بالاخره هک شد!
۱۳/۵/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=22

23. ابزارمديريت مايکروسافت عرضه شد
۱۸/۶/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=23

24. علمي طراحي اولين نرم افزار شبيه سازي مولکولي با برنامه جاوا در دنيا
۱۸/۶/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=24

25. گوشي Orange با استفاده از تکنولوژي مايکروسافت
۱۸/۶/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=25

26. همايش استفاده از فن آوري اطلاعات در فرآيندهاي شهرسازي امروز برگزار شد.
۱۸/۶/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=26

27. جاسوسي از طريق فايلهاي کراک
۱۲/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=27

28. نسخه بروز شده QuickTime تحت جاوا عرضه شد
۱۲/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=28

29. Worldcom مجدداً باز مي گردد
۱۲/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=29

30. تغيير در قسمت Enterprise ياهو
۱۲/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=30

اولين| قبلي| بعدي| آخرين


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۶۷۱ مراجعه امروز
۵۴۸۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

31 تا 45 از 145 خبر
31. موتور جستجوي جديد آمازون موثر واقع شد
۱۲/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=31

32. تمهيدات امنيتي سيمانتک مشکل آفريد
۱۲/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=32

33. بلوجک و ويروس هاي جديد
۲۸/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=33

34. SCO شرکتهاي بيشتري را به دادگاه مي کشاند
۲۸/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=34

35. گسترش شبکه بي سيم AT&T
۲۸/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=35

36. Sun تراشه هاي AMD را در سرورهاي خود به کار مي برد
۲۸/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=36

37. ياهو مايل به سرمايه گذاري در ايران نيست
۲۸/۸/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=37

38. وب سايت بانکي جعلي در سنگاپور
۱۰/۱۰/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=38

39. فروش پررونق اينترنتي در ايام کريسمس
۱۰/۱۰/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=39

40. سايت اطلاع رساني و تبليغات انتخابات راه اندازي مي شود
۱۰/۱۰/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=40

41. اولين کنفرانس بين المللي فناوري اطلاعات و دانش گشايش يافت
۱۰/۱۰/۱۳۸۲
http://www.irandevelopers.com/fullstory?id=41

42. مايكروسافت درباره‌ى لينوكس لب مى‌گشايد
۲۴/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=42

43. تلاش مايكروسافت براى محافظت از كاربران
۲۴/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=43

44. علايم جديد از يک تهديد جدی در اينترنت
۲۴/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=44

45. نقش‌ شبكه‌هاى‌ الكترونى‌ در تعميق‌ فعاليت‌هاى‌ سازمان‌هاى‌ غيردولتى‌
۲۴/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=45

اولين| قبلي| بعدي| آخرين


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۷۳ مراجعه امروز
۵۵۸۹ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

46 تا 60 از 145 خبر
46. شبكه اينترنت بيش از 171 ميليون رايانه را به يكديگر متصل كرده است
۲۴/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=46

47. چگونه يك راهياب فلش به سايت خود بيافزاييد؟(قسمت اول)
۲۵/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=47

48. آشنايي با Actionscript در Flash
۲۶/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=48

49. هشدار به وجود حفره های جديددر مرورگر اينترنت
۲۶/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=49

50. كار با اصوات در Flash MX
۲۶/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=50

51. مايكروسافت براي بازداشتن هكرها از حمله، به سرعت اقدام مي كند
۲۶/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=51

52. مخابرات ISP ها را مسدود مي كند
۲۷/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=52

53. لب تاپ هاي Centrino حمايت رسمي لينوكس را به دست آورد
۲۷/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=53

54. ايران به تكنولوژي ساخت UPSهاي پر قدرت دست يافت
۲۷/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=54

55. برخورد با ISPها به شهرستان‌ها كشيده شد
۲۷/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=55

56. مايكروسافت، Crystal و ديگر نقايص را برطرف كرد
۲۸/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=56

57. انتشار ويروس Cabir از طريق گوشي تلفن همراه
۲۸/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=57

58. قلم رايانه اي براي جابجايي فايل هاي ديجيتالي جايگزين موشواره مي شود
۲۸/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=58

59. شركت Dell، ايتانيوم را در سرورهای با چهار پردازنده قرار داد
۲۸/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=59

60. شركت AMD، استراتژي پردازنده هاي دو هسته اي را تشريح مي كند
۲۸/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=60

اولين| قبلي| بعدي| آخرين


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۶۹ مراجعه امروز
۵۶۸۵ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

61 تا 75 از 145 خبر
61. يك محافظ فرمايشي
۳۰/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=61

62. Zafi.b کرمی که نرم افزارهای ضد ويروس را از کار می اندازد
۳۰/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=62

63. ويروس ها و اسپم ها، شركت هاي كوچكتررا بيشتر مورد هدف قرار مي دهند
۳۰/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=63

64. دسترسي سريع به شبكه
۳۰/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=64

65. ذخيره سازى اطلاعات در VB.NET ( بخش اول )
۳۰/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=65

66. بهينه سازي تصاوير براي استفاده در وب
۳۱/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=66

67. اينترانت و اكسترانت ابزارهايي مفيد براي SME
۳۱/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=67

68. تا سال 2008 ، بيست و نه درصد Server هاى جهان لينوكسى خواهند بود
۳۱/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=68

69. آيا مي دانيد كه علت از كار افتادن ديسك سخت چيست؟
۳۱/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=69

70. گوگل سرنوشت بسياری از وب سايت ها را عوض کرد
۳۱/۳/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=70

71. اولين همايش دانشجويي ICT ايران
۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=71

72. بحران در عصر ارتباط
۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=72

73. لايحه جلوگيری از گسترش نرم افزارهای جاسوسی در آمريکا
۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=73

74. 5 نكته درباره تكنولوژي
۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=74

75. گوگل دو ويژگي جديد به سايت خود اضافه مي كند
۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=75

اولين| قبلي| بعدي| آخرين


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۸۲۱ مراجعه امروز
۵۶۳۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

91 تا 105 از 145 خبر
91. تيم مايكروسافت در حال بررسي نتايج يك گزارش امنيتي!
۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=91

92. پدر اينترنت درگذشت‌
۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=92

93. پردازنده هاي PowerPC G5
۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=93

94. هشدار: يک حمله بزرگ اينترنتی در راه است
۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=94

95. آی‌بی‌ام لينوكس را جهانی می‌كند
۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=95

96. ASP چيست؟ ( بخش دوم )
۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=96

97. تشریح فعاليت های پست بانک در زمينه آی سی تی
۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=97

98. مدت زمان بسته شدن برنامه اي كه ديگر قابل دسترسي نيست را عوض كنيد
۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=98

99. داده هاي بي مصرف را از پنجره Add/Remove پاك كنيد
۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=99

100. باز هم هشدار مايکروسافت
۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=100

101. بزودي حافظه جانبي بي سيم به بازار مي آيد
۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=101

102. گيتس در مالزی: ويندوز ارزان قيمت در اختيار دولت های آسيايی قرار می دهيم
۱۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=102

103. Maxtor نسل سوم MaxLine را به بازار معرفي كرد
۱۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=103

104. قابلیتهای لینوکس برای مدیران تشریح شد
۱۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=104

105. مبانى امنيت اطلاعات
۱۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=105

اولين| قبلي| بعدي| آخرين


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۸ بيننده در حال حاضر
۱۷۲۲ مراجعه امروز
۵۵۳۸ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

106 تا 120 از 145 خبر
106. آموزش اكسس ( بخش اول )
۱۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=106

107. زمان فرستادن مرورگر Internet Explorer به زباله‌داني فرارسيده است !
۱۳/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=107

108. آموزش اكسس ( بخش دوم )
۱۳/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=108

109. آموزش فلش (بخش سوم)
۱۳/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=109

110. آموزش فلش (بخش دوم )
۱۳/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=110

111. آموزش فلش (بخش اول )
۱۳/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=111

112. تهديد نرم افزارهای جاسوسی در سالهای آينده افزايش خواهد يافت
۱۴/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=112

113. آشنايي با NetScape جديد
۱۴/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=113

114. مراقب کرم اینترنتی جديد به نام Bagle.x!proxy باشيد!
۱۵/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=114

115. هشدار نسبت به مشکلات امنيتی مرورگر مايکروسافت
۱۵/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=115

116. مايكروسافت اينترنت اكسپلورر جديد را با تغيير درپيكربندي آن متنشر كرد
۱۵/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=116

117. شركت مايكروسافت براي شناسايي پيام الكترونيكي ناخواسته فن آوري جديدي منتشر كرد
۱۶/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=117

118. سرور Power 5 تا ماه جولای می آید
۱۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=118

119. چند كاربر و يك اوت لوك
۱۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=119

120. صداي دلفين‌ها در اينترنت
۱۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=120

اولين| قبلي| بعدي| آخرين


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۷ بيننده در حال حاضر
۱۶۱۴ مراجعه امروز
۵۴۳۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

121 تا 135 از 145 خبر
121. گوش به زنگ خطر ويروس در موبايل باشيد
۱۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=121

122. گوش به زنگ خطر ويروس در موبايل باشيد
۱۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=122

123. امنيت ويندوز و سيستم عامل Mac X
۱۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=123

124. آيا مي دانيد كه سروصداي كامپيوتر شما ناشي از چيست؟
۱۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=124

125. وبگردي در يك قدمي گوگل
۱۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=125

126. مايكرو سافت به رقابت با ياهو و گوگل مي رود!
۱۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=126

127. در سرويس پك (Service Pack) ويندوز XP چه چيزهايي وجود دارد؟
۱۸/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=127

128. زيان‎ استفاده‎ طولاني‎ از كامپيوتر
۲۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=128

129. 36 درصد از نرم افزارهای جهان جعل شده هستند .
۲۱/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=129

130. آيا مي دانيد كه از گذاشتن بلندگوها در كنار مانيتور بايد خودداري نمود؟
۲۲/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=130

131. آيا مي دانيد شما به سادگي مي توانيد در برق مصرفي مانيتور خود صرفه جويي كنيد؟
۲۲/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=131

132. یکی از کارمندان مایکروسافت متهم به هک کردن موتور جستجوي AltaVista شد
۲۲/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=132

133. غیر فعال کردن مالتی مدیا و گرافیک در Internet Explorer
۲۵/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=133

134. اعلام خطر یک ویروس جدید
۲۵/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=134

135. کرم جدید Evaman وارد شبکه شد
۲۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=135

اولين| قبلي| بعدي| آخرين


اخبار-Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۱ بيننده در حال حاضر
۱۵۵۷ مراجعه امروز
۵۳۷۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

آرشيو اخبار

136 تا 145 از 145 خبر
136. مایکروسافت عرضه SP 2 را باز هم به تأخير انداخت
۲۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=136

137. SAP گونه جديدی از MAxDB را می‌سازد
۲۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=137

138. مايكروسافت نوار ابزار ضد ويروس جديدي را معرفي مي كند
۲۷/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=138

139. لينوکس با ويندوز چه تفاوتى دارد؟
۲۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=139

140. ابزار پاكسازي براي Download - Ject عرضه شد
۲۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=140

141. اولين ويروس براي ويندوز CE
۲۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=141

142. نقطه ضعف در نرم افزار Acrobat Reader
۲۹/۴/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=142

143. فرستادن پيام در شبكه هاي LAN
۱/۵/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=143

144. Spyware و Adware چيست؟
۱/۵/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=144

145. اولين ويروس رايانه‌هاي دستي مجهز به ويندوز ميكروسافت منتشر شد
۱/۵/۱۳۸۳
http://www.irandevelopers.com/fullstory?id=145

اولين| قبلي| آخرين


Send Article ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۳۹۲ مراجعه امروز
۳۹۸۴ مراجعه اين ماه
به Iran Developers Network خوش آمديد

ارسال مقاله

اگر مقاله يا نمونه برنامه ای داريد که فکر می کنيد برای ديگران مفيد است، IranDevelopers.com آن را بنام شما در سايت خود منتشر می کند. مطالب خود را به اين آدرس ارسال نمائيد: Info@IranDevelopers.com

رهنمودها و شرايط ارسال مطالب به IranDevelopers :

۱- اگر اولين بار است که برایIranDevelopers.com مقاله می فرستيد لطفا حتما مشخصات خود شامل:
• نام و نام خانوادگی
• آدرس E-mail
• شرح مختصری در حد يک يا دو خط جهت معرفی سوابق فنی خود
را ارسال نمائيد. در غير اينصورت از درج مطالب ارسالی شما معذوريم.

۲- اطلاعات زير را حتما همراه هر مقاله بفرستيد:
• عنوان مقاله
• خلاصه مقاله در يک خط
• کلمات کليدی مقاله حداکثر ده کلمه

۳- به هيچ عنوان در مقالات خود از تصوير، نمودار، جدول، صفحه آرايی، مدل يا افکت و مانند اينها استفاده نکنيد.

۴- از ارسال مطالب تکراری خودداری نمائيد.

۵- از نمونه برنامه های طولانی استفاده نکنيد.

۶- مقالات ارسالی بايد بصورت فارسی در يکی از ويرايشگرهای MS Word 97/2000 يا Notepad تحت ويندوز فارسی (عربی) تايپ شده باشد.

۷- مطالب ارسالی حتی الامکان خلاصه و کوتاه باشد. مطالب بلند را می توانيد در قالب چند مقاله ارائه کنيد.

۸- مطالب دريافتی پس از تائيد توسط مسؤول سايت بنام شما در سايت قرار می گيرد.

۹- مسؤول سايت در تائيد يا رد مطالب کاملا آزاد است.

۱۰- بررسی و درج هر مقاله ممکن است يک يا دو هفته طول بکشد.

۱۱- هيچ مطلبی به نويسنده عودت داده نخواهد شد.

۱۲- مطالب خود را تنها از طريق E-mail و بصورت يک فايل الصاقی (Attachment) و حتی الامکان بصورت zip شده به آدرس Info@IranDevelopers.com ارسال نمائيد.

منتظر دريافت مطالب شما هستيم.


Site Map ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۳۹۵ مراجعه امروز
۳۹۸۷ مراجعه اين ماه
به Iran Developers Network خوش آمديد

  • Iran Developers Network
    • معرفي
    • موضوعها
      • C
      • HTML
      • DHTML
      • JavaScript
      • VBscript
      • ASP
      • SQL
      • ADO
      • .NET
      • Delphi
      • Pascal
      • Java
      • Foxpro
      • Visual Basic
      • Visual C++
      • Assembley
      • FORTRAN
      • Internet & Network
      • Misc
      • Windows
      • PHP
    • ليست مقاله دهندگان
    • ارسال مقاله
    • سوالات متداول
    • نمونه برنامه ها
    • محيط بحث و تبادل نظر
      • C and C++
      • HTML,VBscript ,JavaScript,DHTML
      • ASP
      • SQL
      • ASP .NET, C#
      • Delphi & Pascal
      • Java
      • Visual Basic
      • Visual C++
      • Assembly
      • Access
      • ADO
      • OS
      • SQL Server
      • Oracle Server
      • Hack & Anti Hack & Virus & AntiVirus &Security
      • تجارت الکترونيک
      • ابزارها و کامپوننتهای درخواستی
      • معرفی و فروش نرم افزارها و ابزار برنامه نويسان
      • نيازمنديها
      • متفرقه
      • ايده ها و روشها
      • نرم افزارهای گرافيکی
      • PHP
      • شبکه های کامپيوتری LAN,WAN
    • کلاسها
    • ارتباط با ما
    • مقالات جديد 30 روز اخير
    • جستجو پيشرفته
    • 20 مقاله برگزيده
    • معرفي کتاب و مجلات
    • خبرنامه
    • اخبار
    • پيوند به اين سايت
    • ديگر سايتها
    • ©2005 IranDevelopers. All rights reserved. E-mail this Page


Top 20 Article ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۱۳۹۸ مراجعه امروز
۳۹۹۰ مراجعه اين ماه
به Iran Developers Network خوش آمديد
20 مقاله برگزيده

آموزش پاسکال قسمت اول
سری آموزش پاسکال
Pascal ,بهرام وکيلي,۱۰۳۱۸ بار خوانده شده,۳۹۵ رای دارد,۱۶/۱۱/۱۳۸۱
آموزش كاربردي زبان SQL قدم به قدم
SQL ,پويا عبادالهي واحد,۱۱۵۷۴ بار خوانده شده,۳۲۳ رای دارد,۸/۱۱/۱۳۸۱
استفاده از Flash در دلفى
در اين مقاله ياد می گيريد که چگونه از فلش در دلفی استفاده کنيد
Delphi ,محمد باقر معموری,۹۲۷۲ بار خوانده شده,۲۱۰ رای دارد,۲۴/۱۱/۱۳۸۱
مقدمه اى بر ASP
سری آموزش asp قسمت اول
ASP ,محمد باقر معموری,۱۱۰۶۲ بار خوانده شده,۲۵۵ رای دارد,۱۷/۱۱/۱۳۸۱
مقدمات زبان C
قسمت اول آموزش سي
C ,مديريت سايت,۷۸۲۶ بار خوانده شده,۱۹۱ رای دارد,۱۰/۸/۱۳۸۱
اتصال شبکه شما به اينترنت
در اين مقاله ياد خواهيد گرفت که چگونه کامپيوترهای شبکه خود را با استفاده از dialup به اينترنت متصل کنيد
Internet & Network ,مديريت سايت,۴۸۰۸ بار خوانده شده,۱۲۳ رای دارد,۱۶/۲/۱۳۸۲
آموزش پاسکال قسمت چهارم
سری آموزش پاسکال
Pascal ,بهرام وکيلي,۵۳۶۲ بار خوانده شده,۱۴۱ رای دارد,۱۶/۱۱/۱۳۸۱
مقدمه اي بر HTML
HTML ,مدرسه وب,۵۷۳۱ بار خوانده شده,۱۳۵ رای دارد,۲۴/۸/۱۳۸۱
آشنايى با FastReport ساده‌ترين و قوى‌ترين كمپوننت گزارش‌سازى
Delphi ,محمد باقر معموری,۵۵۱۱ بار خوانده شده,۹۴ رای دارد,۲۳/۱۱/۱۳۸۱
آموزش پاسکال قسمت دوم
سری آموزشی پاسکال
Pascal ,بهرام وکيلي,۵۲۱۵ بار خوانده شده,۹۶ رای دارد,۱۶/۱۱/۱۳۸۱
دلفي 7
Delphi ,ساسان نيكوكار ,۷۳۹۷ بار خوانده شده,۱۵۳ رای دارد,۸/۱۱/۱۳۸۱
طريقه استفاده از Microsoft Agent در دلفی
چگونگی استفاده از اجنت ميکروسافت در دلفی
Delphi ,صادق علوی زاده,۵۵۷۷ بار خوانده شده,۸۱ رای دارد,۲۶/۱۰/۱۳۸۱
آموزش دلفی قسمت دوم
سری مقالات آموزشی دلفی
Delphi ,محمد باقر معموری,۶۰۸۸ بار خوانده شده,۸۶ رای دارد,۱۶/۱۱/۱۳۸۱
MSN مسنجر چگونه کار می کند؟
روش کار MSN مسنجر - دستورات و روش برنامه نويسی
Internet & Network ,مديريت سايت,۳۶۱۹ بار خوانده شده,۸۰ رای دارد,۲۲/۱۱/۱۳۸۱
ASP را در رايانه خود راه اندازي کنيد
سری آموزش asp قسمت دوم
ASP ,محمد باقر معموری,۶۸۵۴ بار خوانده شده,۸۲ رای دارد,۱۷/۱۱/۱۳۸۱
مطالب كلي راجع به طراحي سايت
چنانچه قصد داريد برنامه نويسي را شروع كنيدمناسب است كه به نكات زير توجه نماييد
HTML ,عباس مقدس نجفيان,۵۰۵۴ بار خوانده شده,۷۲ رای دارد,۲۲/۱۱/۱۳۸۱
ارسال ايميل در ASP با استفاده از آبجکت CDONTS
طريقه استفاده از CDONT در ASP
ASP ,مديريت سايت,۳۹۰۸ بار خوانده شده,۵۵ رای دارد,۳۰/۲/۱۳۸۲
مالتي بوت كردن PC
Misc ,مجله رايانه,۴۰۴۶ بار خوانده شده,۶۳ رای دارد,۸/۱۱/۱۳۸۱
اجراي فايل exe از درون دلفي
يكي از مشكلاتي كه بسياري از تازه كاران در دلفي با آن مواجه مي شوند اجراي فايلهاي ديگر يا اجراي دستورات shell است
Delphi ,محمد باقر معموری,۳۸۳۳ بار خوانده شده,۴۷ رای دارد,۵/۲/۱۳۸۲
فارسی نويسی
HTML ,مدرسه وب,۵۵۴۰ بار خوانده شده,۵۹ رای دارد,۲۴/۸/۱۳۸۱
20 مقاله پربيننده

آموزش كاربردي زبان SQL قدم به قدم
SQL ,پويا عبادالهي واحد,۱۱۵۷۴ بار خوانده شده,۳۲۳ رای دارد,۸/۱۱/۱۳۸۱
مقدمه اى بر ASP
سری آموزش asp قسمت اول
ASP ,محمد باقر معموری,۱۱۰۶۲ بار خوانده شده,۲۵۵ رای دارد,۱۷/۱۱/۱۳۸۱
آموزش پاسکال قسمت اول
سری آموزش پاسکال
Pascal ,بهرام وکيلي,۱۰۳۱۸ بار خوانده شده,۳۹۵ رای دارد,۱۶/۱۱/۱۳۸۱
استفاده از Flash در دلفى
در اين مقاله ياد می گيريد که چگونه از فلش در دلفی استفاده کنيد
Delphi ,محمد باقر معموری,۹۲۷۲ بار خوانده شده,۲۱۰ رای دارد,۲۴/۱۱/۱۳۸۱
مقدمات زبان C
قسمت اول آموزش سي
C ,مديريت سايت,۷۸۲۶ بار خوانده شده,۱۹۱ رای دارد,۱۰/۸/۱۳۸۱
دلفي 7
Delphi ,ساسان نيكوكار ,۷۳۹۷ بار خوانده شده,۱۵۳ رای دارد,۸/۱۱/۱۳۸۱
ASP را در رايانه خود راه اندازي کنيد
سری آموزش asp قسمت دوم
ASP ,محمد باقر معموری,۶۸۵۴ بار خوانده شده,۸۲ رای دارد,۱۷/۱۱/۱۳۸۱
بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
طريقه بدست آوردن اطلاعات مربوط به هارد ديسک - سي دي رام - فلاپي ديسک
Delphi ,مديريت سايت,۶۷۸۸ بار خوانده شده,۷۶ رای دارد,۱۳/۱۱/۱۳۸۱
آموزش دلفی قسمت دوم
سری مقالات آموزشی دلفی
Delphi ,محمد باقر معموری,۶۰۸۸ بار خوانده شده,۸۶ رای دارد,۱۶/۱۱/۱۳۸۱
نكات ريز و درشت در دلفي
Delphi ,ساسان نيكوكار ,۵۷۷۴ بار خوانده شده,۴۰ رای دارد,۸/۱۱/۱۳۸۱
مقدمه اي بر HTML
HTML ,مدرسه وب,۵۷۳۱ بار خوانده شده,۱۳۵ رای دارد,۲۴/۸/۱۳۸۱
طريقه استفاده از Microsoft Agent در دلفی
چگونگی استفاده از اجنت ميکروسافت در دلفی
Delphi ,صادق علوی زاده,۵۵۷۷ بار خوانده شده,۸۱ رای دارد,۲۶/۱۰/۱۳۸۱
فارسی نويسی
HTML ,مدرسه وب,۵۵۴۰ بار خوانده شده,۵۹ رای دارد,۲۴/۸/۱۳۸۱
آشنايى با FastReport ساده‌ترين و قوى‌ترين كمپوننت گزارش‌سازى
Delphi ,محمد باقر معموری,۵۵۱۱ بار خوانده شده,۹۴ رای دارد,۲۳/۱۱/۱۳۸۱
آموزش پاسکال قسمت چهارم
سری آموزش پاسکال
Pascal ,بهرام وکيلي,۵۳۶۲ بار خوانده شده,۱۴۱ رای دارد,۱۶/۱۱/۱۳۸۱
آموزش پاسکال قسمت دوم
سری آموزشی پاسکال
Pascal ,بهرام وکيلي,۵۲۱۵ بار خوانده شده,۹۶ رای دارد,۱۶/۱۱/۱۳۸۱
مطالب كلي راجع به طراحي سايت
چنانچه قصد داريد برنامه نويسي را شروع كنيدمناسب است كه به نكات زير توجه نماييد
HTML ,عباس مقدس نجفيان,۵۰۵۴ بار خوانده شده,۷۲ رای دارد,۲۲/۱۱/۱۳۸۱
اتصال شبکه شما به اينترنت
در اين مقاله ياد خواهيد گرفت که چگونه کامپيوترهای شبکه خود را با استفاده از dialup به اينترنت متصل کنيد
Internet & Network ,مديريت سايت,۴۸۰۸ بار خوانده شده,۱۲۳ رای دارد,۱۶/۲/۱۳۸۲
نحو ASP
سری آموزش asp قسمت سوم
ASP ,محمد باقر معموری,۴۶۸۴ بار خوانده شده,۳۲ رای دارد,۱۷/۱۱/۱۳۸۱
اسمبلي ياد بگيريم - 9
Assembley ,مديريت سايت,۴۴۱۱ بار خوانده شده,۶۰ رای دارد,۳۰/۸/۱۳۸۱


l آموزش پاسکال قسمت اول
سری آموزش پاسکال
Pascal ,بهرام وکيلي,۱۰۳۱۸ بار خوانده شده,۳۹۵ رای دارد,۱۶/۱۱/۱۳۸۱
l آموزش كاربردي زبان SQL قدم به قدم
SQL ,پويا عبادالهي واحد,۱۱۵۷۴ بار خوانده شده,۳۲۳ رای دارد,۸/۱۱/۱۳۸۱
l استفاده از Flash در دلفى
در اين مقاله ياد می گيريد که چگونه از فلش در دلفی استفاده کنيد
Delphi ,محمد باقر معموری,۹۲۷۲ بار خوانده شده,۲۱۰ رای دارد,۲۴/۱۱/۱۳۸۱
l مقدمه اى بر ASP
سری آموزش asp قسمت اول
ASP ,محمد باقر معموری,۱۱۰۶۲ بار خوانده شده,۲۵۵ رای دارد,۱۷/۱۱/۱۳۸۱
l مقدمات زبان C
قسمت اول آموزش سي
C ,مديريت سايت,۷۸۲۶ بار خوانده شده,۱۹۱ رای دارد,۱۰/۸/۱۳۸۱


l برنامه روش حذفی گاوس
l قفل کردن فیلد در اکسس پس از ورود اط
l ساخت توابع خطا در اکسس
l نرم افزار C++(فوري)
l حل برنامه
l به دست آوردن اي پي
l توجه - ناظمان محترم انجمنها
l ساخت AVI با فرمت آلفا كانال
l Tile كردن تصوير در يك فرم MDI
l کوئری پارامتری


<html>
<body>

<%
response.write("Hello World!")
%>

</body>
</html>

خروجى:
Hello World!


<html>
<body>
<%
response.write("<h2>You can use HTML tags to format the text!</h2>")
%>

<%
response.write("<p style='color:#0000ff'>This text is styled with the style attribute!</p>")
%>
</body>
</html>

خروجى:

You can use HTML tags to format the text!

This text is styled with the style attribute!


<html>
<body>

<%
dim name
name="Donald Duck"
response.write("My name is: " & name)
%>

</body>
</html>

خروجى:
My name is: Donald Duck


<html>
<body>

<%
Dim famname(5),i
famname(0) = "Jan Egil"
famname(1) = "Tove"
famname(2) = "Hege"
famname(3) = "Stale"
famname(4) = "Kai Jim"
famname(5) = "Borge"

For i = 0 to 5
response.write(famname(i) & "<br />")
Next
%>

</body>
</html>

خروجى:
Jan Egil
Tove
Hege
Stale
Kai Jim
Borge


<html>
<body>

<%
dim i
for i=1 to 6
response.write("<h" & i & ">Header " & i & "</h" & i & ">")
next
%>

</body>
</html>

خروجى:

Header 1

Header 2

Header 3

Header 4

Header 5
Header 6


<html>
<body>
<%
dim h
h=hour(now())

response.write("<p>" & now())
response.write(" (Norwegian Time) </p>")
If h<12 then
response.write("Good Morning!")
else
response.write("Good day!")
end if
%>
</body>
</html>

خروجى:

04.02.2003 12:13:16 (Norwegian Time)

Good day!


<%@ language="javascript" %>
<html>
<body>
<%
var d=new Date()
var h=d.getHours()

Response.Write("<p>")
Response.Write(d + " (Norwegian Time)")
Response.Write("</p>")
if (h<12)
{
Response.Write("Good Morning!")
}
else
{
Response.Write("Good day!")
}
%>
</body>
</html>

خروجى:

Tue Feb 4 12:13:20 UTC+0100 2003 (Norwegian Time)

Good day!


<html>

<head>
<%
sub vbproc(num1,num2)
response.write(num1*num2)
end sub
%>
</head>

<body>
<p>
You can call a procedure like this:
</p>
<p>
Result: <%call vbproc(3,4)%>
</p>
<p>
Or, like this:
</p>
<p>
Result: <%vbproc 3,4%>
</p>
</body>

</html>
خروجى:

You can call a procedure like this:

Result: 12

Or, like this:

Result: 12


<%@ language="javascript" %>
<html>
<head>
<%
function jsproc(num1,num2)
{
Response.Write(num1*num2)
}
%>
</head>

<body>
<p>
Result: <%jsproc(3,4)%>
</p>
</body>

</html>
خروجى:

Result: 12


<html>
<head>
<%
sub vbproc(num1,num2)
Response.Write(num1*num2)
end sub
%>
<script language="javascript" runat="server">
function jsproc(num1,num2)
{
Response.Write(num1*num2)
}
</script>
</head>

<body>
<p>Result: <%call vbproc(3,4)%></p>
<p>Result: <%call jsproc(3,4)%></p>
</body>

</html>
خروجى:

Result: 12

Result: 12


<html>
<body>
<form action="demo_reqquery.asp" method="get">
Your name: <input type="text" name="fname" size="20">
<input type="submit" value="Submit">
</form>
<%
dim fname
fname=Request.QueryString("fname")
If fname<>"" Then
Response.Write("Hello " & fname & "!<br />")
Response.Write("How are you today?")
End If
%>
</body>
</html>
خروجى:
Your name:


<html>
<body>
<form action="demo_simpleform.asp" method="post">
Your name: <input type="text" name="fname" size="20">
<input type="submit" value="Submit">
</form>
<%
dim fname
fname=Request.Form("fname")
If fname<>"" Then
Response.Write("Hello " & fname & "!<br />")
Response.Write("How are you today?")
End If
%>
</body>
</html>
خروجى:
Your name:


<%
dim numvisits
response.cookies("NumVisits").Expires=date+365
numvisits=request.cookies("NumVisits")
%>
<html>
<body>
<%
if numvisits="" then
response.cookies("NumVisits")=1%>
Welcome! This is the first time you are visiting this Web page.
<%
else
response.cookies("NumVisits")=numvisits+1
response.write("You have visited this ")
response.write("Web page " & numvisits)
if numvisits=1 then
response.write " time before!"
else
response.write " times before!"
end if
end if
%>
</body>
</html>
خروجي:

Welcome! This is the first time you are visiting this Web page.


Discussion Forum

Iran Developers Network صفحه اصلي Iran Developers Network صفحه اصلي

خوش آمديد مهمان جستجو در انجمن نمايش ليست اعضاي انجمن
زمان فعلي در 05:30.
آخرين بازديد شما در ۲۴ مهر ۱۳۸۴ در ساعت 05:13.
 | انجمن | سوالها | ارسالها | آخرين ارسال
زبانهای برنامه نويسی و اسکريپت
انجمن فعال - بدون پيام جديد | C and C++ سوالات مربوط به سی و سی پلاس پلاس | 40 | 84 | ۲۱ مهر ۱۳۸۴ در ساعت 08:53 بوسيله Guest View Last Post
انجمن فعال - بدون پيام جديد | HTML,VBscript ,JavaScript,DHTML سوالات مربوط به اچ تی ام ال و وی بی اسکريپت , جاوا اسکريپت , دايناميک اچ تی ام ال | 62 | 164 | ۱۶ خرداد ۱۳۸۴ در ساعت 20:40 بوسيله golmaryam View Last Post
انجمن فعال - بدون پيام جديد | ASP سوالات مربوط به ای اس پی | 97 | 232 | ۱۶ خرداد ۱۳۸۴ در ساعت 20:47 بوسيله golmaryam View Last Post
انجمن فعال - بدون پيام جديد | SQL سوالات مربوط به دستورات اس کيو ال | 27 | 79 | ۱۲ مرداد ۱۳۸۴ در ساعت 20:19 بوسيله mahasanlou View Last Post
انجمن فعال - بدون پيام جديد | ASP .NET, C# سوالات مربوط به ای اس پی دات نت و سی شارپ | 24 | 44 | ۶ آذر ۱۳۸۳ در ساعت 08:46 بوسيله samira001 View Last Post
انجمن فعال - بدون پيام جديد | Delphi & Pascal سوالات مربوط به دلفی و پاسکال | 1026 | 4910 | ۲۹ شهريور ۱۳۸۴ در ساعت 23:59 بوسيله Guest View Last Post
انجمن فعال - بدون پيام جديد | Java سوالات مربوط به جاوا | 6 | 14 | ۲۱ شهريور ۱۳۸۴ در ساعت 10:26 بوسيله Guest View Last Post
انجمن فعال - بدون پيام جديد | Visual Basic سوالات مربوط به ويژوال بيسيک | 83 | 195 | ۳۱ شهريور ۱۳۸۴ در ساعت 02:52 بوسيله Saied_cp View Last Post
انجمن فعال - بدون پيام جديد | Visual C++ سوالات مربوط به ويژوال سی | 12 | 26 | ۶ مهر ۱۳۸۳ در ساعت 01:56 بوسيله mmnir View Last Post
انجمن فعال - بدون پيام جديد | Assembly سوالات مربوط به اسمبلی | 16 | 37 | ۸ مهر ۱۳۸۴ در ساعت 12:54 بوسيله Guest View Last Post
انجمن فعال - بدون پيام جديد | Access سوالات مربوط به اکسس | 25 | 95 | ۲۰ مهر ۱۳۸۴ در ساعت 14:13 بوسيله ar83 View Last Post
انجمن فعال - بدون پيام جديد | PHP در اين انجمن ميتوانيد سوالات و تجربهای پی اچ پی خود را مطرح کنيد | 11 | 26 | ۲۷ مهر ۱۳۸۳ در ساعت 14:07 بوسيله 1383 View Last Post
نرم افزار ها و واسطها
انجمن فعال - بدون پيام جديد | ADO ای دی او و برنامه نويسی با آن | 6 | 9 | ۲۳ اسفند ۱۳۸۳ در ساعت 22:00 بوسيله simin_alavi View Last Post
انجمن فعال - بدون پيام جديد | OS سوالات مربوط به سيستم عاملهای مختلف | 45 | 82 | ۲۳ مهر ۱۳۸۳ در ساعت 20:11 بوسيله ali123456 View Last Post
انجمن فعال - بدون پيام جديد | SQL Server سوالات مربوط به اس کيو ال سرور | 43 | 104 | ۱۴ ارديبهشت ۱۳۸۴ در ساعت 17:04 بوسيله maryam_gh80 View Last Post
انجمن فعال - بدون پيام جديد | Oracle Server سوالات مربوط به اوراکل سرور | 9 | 15 | ۷ شهريور ۱۳۸۴ در ساعت 16:17 بوسيله Guest View Last Post
اينترنت و شبکه
انجمن فعال - بدون پيام جديد | Hack & Anti Hack & Virus & AntiVirus &Security روشهای نفوذ به شبکه ها , راههای جلوگيری , امنيتی ضد ويروس ها ويروسها | 48 | 91 | ۱ فروردين ۱۳۸۴ در ساعت 07:32 بوسيله Guest View Last Post
انجمن فعال - بدون پيام جديد | تجارت الکترونيک E-Commerce | 9 | 15 | ۱۲ اسفند ۱۳۸۳ در ساعت 18:17 بوسيله arvin View Last Post
انجمن فعال - بدون پيام جديد | شبکه های کامپيوتری LAN,WAN مباحث و مشکلات مربوط به شبکه های کامپيوتری | 44 | 132 | ۷ مهر ۱۳۸۴ در ساعت 23:16 بوسيله Guest View Last Post
متفرقه
انجمن فعال - بدون پيام جديد | ابزارها و کامپوننتهای درخواستی در اين قسمت ابزارهای برنامه نويسی و کامپوننتهای درخواستی خود را وارد کنيد | 43 | 184 | ۱۵ مرداد ۱۳۸۴ در ساعت 17:24 بوسيله Guest View Last Post
انجمن فعال - بدون پيام جديد | معرفی و فروش نرم افزارها و ابزار برنامه نويسان در اين قسمت می توانيد نرم افزارهايي که خود نوشته ايد يا تهيه کرده ايد را معرفی کرده يا به فروش برسانيد | 16 | 41 | ۱۵ بهمن ۱۳۸۳ در ساعت 20:13 بوسيله kar20 View Last Post
انجمن فعال - بدون پيام جديد | نيازمنديها در اين انجمن می توانيد آگهی های مختلف جهت خريد و فروش و معرفی و دعوت به همکاری بنويسيد | 19 | 31 | ۲۱ تير ۱۳۸۴ در ساعت 14:12 بوسيله masoodi View Last Post
انجمن فعال - بدون پيام جديد | متفرقه در اين قسمت سوالات متفرقه و کلی خود را می توانيد مطرح کنيد | 180 | 664 | ۷ مهر ۱۳۸۴ در ساعت 02:35 بوسيله Guest View Last Post
انجمن فعال - بدون پيام جديد | ايده ها و روشها در اين قسمت نرم افزارهايي را که دوست داريد وجود داشته باشند را بنويسيد | 10 | 47 | ۲۵ تير ۱۳۸۴ در ساعت 12:29 بوسيله YING View Last Post
انجمن فعال - بدون پيام جديد | نرم افزارهای گرافيکی فتوشاپ , فلش , کورل , انيميشن سازی و ... | 20 | 52 | ۳۱ شهريور ۱۳۸۴ در ساعت 03:01 بوسيله Guest View Last Post

آخرين پيامهاي ارسال شده
برنامه روش حذفی گاوس
قفل کردن فیلد در اکسس پس از ورود اط
ساخت توابع خطا در اکسس
نرم افزار C++(فوري)
حل برنامه
به دست آوردن اي پي
توجه - ناظمان محترم انجمنها
ساخت AVI با فرمت آلفا كانال
Tile كردن تصوير در يك فرم MDI
کوئری پارامتری
وضعيت انجمنها
روش نگارش صحيح در انجمن
ويرايشگر فارسي
پيامهاي جديد
ارسال فايل بر روي سرور
7373 ارسالها 1921 موضوعات 25 انجمن
آخرين ارسال ۲۱ مهر ۱۳۸۴ در ساعت 08:53
آخرين ارسال توسط Guest
2236 اعضا انجمن
جديدترين عضو انجمن nassari
1 کاربران فعال, 1 مهمان و 0 عضو

فعالان محيط بحث و تبادل نظر
1- MrLesani = 1112 | 2- Mamouri = 542 | 3- Javan_soft = 531 | 4- Inprise = 525 | 5- NASER = 287
6- MasoodHeidarnia = 251 | 7- ramin = 213 | 8- ali643 = 188 | 9- mcmilad = 177 | 10- A.E.Moshiri = 170
11- SyntaxCheck = 154 | 12- hidarneh = 147 | 13- omid = 138 | 14- Guest = 127 | 15- hr110 = 113
16- Imbeginner = 100 | 17- Mahdiseif = 76 | 18- Mehdi = 66 | 19- noroozy = 65 | 20- tashakory = 62

انجمن فعال - بدون پيام جديد انجمن فعال - بدون پيام جديد | فقط خواندني - بدون پيام جديد فقط خواندني - بدون پيام جديد | کلمه عبور لازم است کلمه عبور لازم است
انجمن فعال - پيام جديد انجمن فعال - پيام جديد | فقط خواندني - پيام جديد فقط خواندني - پيام جديد | دسترسي وجود ندارد دسترسي وجود ندارد

همه پيامهاي جديد را علامت خوانده شد بزن :: کوکي هاي تنظيم شده توسط اين فرم را پاک کن


 Newletter ,Iran Developers Network

معرفی
موضوعها
ليست مقاله دهندگان
ارسال مقاله
همکاران برگزيده
نمونه برنامه ها
محيط بحث و تبادل نظر
کلاسها
ارتباط با ما
مقالات جديد 30 روز اخير
جستجو پيشرفته
20 مقاله برگزيده
معرفي کتاب و مجلات
خبرنامه
اخبار
دروس
HTML
DHTML
JavaScript
VBScript
ASP
SQL
ADO
.NET
Delphi
Pascal
C
Java
اينترنت
پيوند به اين سايت
ديگر سايتها
فارسی در وب
آمار سايت
۳۶ بيننده در حال حاضر
۳ مراجعه امروز
۳ مراجعه اين ماه
به Iran Developers Network خوش آمديد

خبرنامه IranDevelopers هر ماه يکبار به آدرس پست الکترونيک شما فرستاده ميشود و شامل آخرين تغييرات سايت و مطالب اضافه شده است.
پست الکترونيک: