بررسی مجموعه اشیاء برنزی دوره ساسانی (ظروف،پیکره ها،مسکوکات)

 بررسی مجموعه اشیاء برنزی دوره ساسانی (ظروف،پیکره ها،مسکوکات)

یکی از درخشانترین دوره های تاریخ فرهنگ و تمدن ایران از نظر ترویج هنرهای گوناگون، دوره ساسانی است. دوره طولانی جهانداری ساسانیان (652-224م) که خود را وارث شیوه و منشی جهانداری هخامنشیان می دانستند، از پادشاهی اردشیر اول آغاز گردیده و با ظهور اسلام و شکست یزدگرد سوم پایان گرفته است.
هنر این دوره دارای ویژگیهای درباری، رسمی و مذهبی می باشد. تاثیرات مذهب در فرهنگ و هنر از آغاز تا پایان دوره کاملاً نمایان است.
دوره ساسانی نه تنها تضمین کننده ی تداوم خلاقیتهای گذشته بوده بلکه با نوآوریهای هنری خود سهم مهمی در عرصه جهانی ایفا کرده است. جامعه و تمدن ساسانی ضمن نگاه به گذشته و بی تفاوت نبودن بر جریانهای فرهنگی روز به دلیل وسعت شاهنشاهی ساسانی که از سرحدات گرجستان و ارمنستان تا سواحل خلیج فارس و دریای عمان و از سواحل سند تا روز فرات گسترده بود، ضمن پذیرش جریانهای متفاوت فرهنگی، عناصر فرهنگی آنها را منطبق با نیازها و سنتهای ملی خود تغییر شکل و محتوا می دهد و تبدیل به محصول فرهنگی نوینی می کند.
با انقراض این شاهنشاهی، سنت هنری آن دوره پایان نمی پذیرد، بلکه خلافت بنی امیه وبنی عباس را تحت تاثیر شدید افکار و عقاید هنری خود قرار می دهد و تا نواحی دوردست اقیانوس اطلس و اقیانوس آرام و امپراتوری عظیم روم شرق نیز نفوذ می کند.
در دوره ساسانی بدلیل وسعت شاهنشاهی که برگستره وسیعی از جهان قدیم فرمانروایی می کرد، شاهد تنوع فرهنگی و اقلیمی و هنرهای رایج هستیم، هنرهای همچون معماری، فلزکاری، مهرسازی، گچ بری، پارچه بافی، سکه زنی و غیره، هر یک از این هنرها به اوج شکوفایی خود رسیده بوده اند که امروزه بر آثار باقی مانده قابل مشاهده است.یکی از این هنرها که به اوج شکوفایی خود رسیده بود هنر و صنعت فلزکاری است. اشیاء فراوانی از فلزهای گوناگون همچون طلا، نقره، مفرغ و غیره ساخته شده است. این اشیاء از ظروف گرفته تازیورآلات، مسکوکات، ادوات جنگی و پیکره ها و ...
در حال حاضر بسیاری از این آثار ارزشمند در موزه های معروف جهان همچون موزه لوور، بریتانیا، ارمیتاژ، متروپولتین و همچنین مجموعه های خصوصی نگهداری می شوند.
امروزه به اشیاء ساخته شده از طلا و نقره بخصوص ظروف، مسکوکات توجه فراوانی شده است و مطالعات جامع و کاملی از جنبه های مختلف بر روی این آثار توسط پژوهشگران ایرانی و خارجی صورت گرفته که بصورت مقالات و کتابهای متعدد منتشر گردیده است.
ولی متاسفانه به اشیاء مفرغی این دوره اهمیت چندانی داده نشده است.
در دوره ساسانی اشیاء فراوانی از مفرغ* ساخته شده است که از این میان می توان به ادوات جنگی، زیورآلات ظروف، پیکره ها، قلاب کمرها و مسکوکات اشاره نمود که هر کدام از آنها دارای اهمیت و زیبایی خاص به خود می باشند.
بدلیل اینکه مطالعه و بررسی همگی آثار مفرغی این دوره، بخاطر گستردگی در این پایان‌نامه میسر نمی باشد. بنابراین در این پایان‌نامه سعی بر آن شده است که مجموعه از این آثار را که شامل ظروف، پیکره ها و مسکوکات می باشد را مورد بررسی و مطالعه قرار داده و با تفکیک و معرفی آثار به تحلیل و مقایسه تطبیقی با سایر آثار این دوره  پرداخته شود.
امید است مطالب این تحقیق گاهی کوچک باشد در جهت شناخت و معرفی هنر مفرغ کاری این دوره بخصوص اواخر دوره ساسانی و اوایل اسلام . 

فهرست مطالب

مقدمه  1
فصل اول: کلیات 3
1-1 بیان مسئله 4
1-2 اهداف تحقیق 4
1-3 سوالات تحقیق 5
1-4 فرضیات تحقیق 5
1-5 روش تحقیق 5
1-6 محدودیتهای تحقیق 6

فصل دوم: تاریخ سیاسی ساسانیان 7

فصل سوم: ظروف 11
3-1 مشخصات کلی ظروف دوره ساسانی  12
3-1-1 شکل ظروف 12
3-1-2 تکنیک ساخت ظروف 15
3-1-3 تکنیک تزیینات ظروف 16
3-1-4 تزیینات ظروف و گاهنگاری آنها 17
3-2 ظروف مفرغی 23
3-2-1 بشقابها 27
3-2-2 سینی ها 37
3-2-3 کاسه ها 49
3-2-4 ابریق ها 67
3-2-5 گلدانها 71
3-3 نتیجه گیری فصل 81

فصل چهارم: پیکره ها 85
4-1 مشخصات کلی پیکره سازی دوره ساسانی 86
4-2 پیکره های مفرغی 95
4-3 نتیجه گیری فصل 142

فصل پنجم: مسکوکات 145
5-1 مشخصات کلی سکه های دوره ساسانی 146
5-2 سکه های مفرغی 158
5-3 نتیجه گیری فصل 197

فصل ششم: نتیجه گیری کلی و پیشنهادات 199
6-1 نتیجه گیری کلی 200
6-2 پیشنهادات  201
پیوست  203
منابع و مآخذ   204
چکیده انگلیسی  215

کتابنامه:
-Amiet, P. 1970. "Ofrevrerie Sassanide au Musee du Louvre," Syria 47, Paris, P. 51-52.
-Azarnaush, M. 1994. The Sassanian Manor House at Hajiabad, Iran, Monagraphy Di Mesepotamia III, Florence, Case Editrece latter.
-Bivar, A. D. H. 1969. Catalogue of the Western Asiatic Seals in the Biritish museum Stamp Seals, The Sassanian Dynasty, London: Biritish Museum.
-Curtis, V. 2001."Coins", The Splandour of Iran, Vol: I, London: Booth.Clibbron, P:737.
-Curtis, V. & J., Rogers. The Art Areachealogy of Ancient Persian, New light on the Parthian and Sassanian Empire, London – Newyork:I.B. Taurls Publishers, in association With the British institure.
-Erdmann, K. 1936. "Die Sassanidisehen, Jagdschalen : Untersuchungen Zur Entwicklungsges Chichte der iranischen Edelmetallkunst unter den Sassanin", Jahrbuch der Preusischen Kunstsammlungen, 57, P:193-232.
-Erdmann, K. 1937. Sassanidesche Kunst, Staatlich Museum Zu Berlin, Bilderhefte der Islamischen Abteilung4, Berlin: Lank wite.
-Göbl, R. 1971. Sassanian Numismatics, Kilnkhardt, Biermann, BraunXchweig.
-Graber, O. 1967. Sassanian Silver, Late Antique and Early mediaeval Arts of Luxury from Ann, Arbor, university of Michgan Museum of Art.
-Gyslen, R. 1993. "LesMonnaies", In Splendeur des Sassanides, Bruxells: Musees royauy d, Art et d, historie, P:127-130.
-Harper, P. O. 1978. The Royal Hunter, Art of the Sassanian Empir, Newyork: Asia Socity.
-Harper, P. O. 1988. "Boat – Shaped Bowls of the Sassanian Period", Iranica Antiqua 23, P:331-345.
-Harper, P. O. 1993. "Le Vaisselle en Metal", in Splendeur des Sassanids, Bruxelles: Musees royouy d Art et d Historire, P:103-106.
-Harper, P. O. 2001. "Metalwork", in The Splandour of Iran, London: Booth – clibbron, Vol: I, P:396-401.
-Harper, P. O. & P. Meyers. 1981. Silver Vessels of the Sasanian Period, Royal Imagry, Newyork: Metropolitan Museum of Art and Princeton university Press.
-Kröger, J. 1982. Sassanidischer Stuckdekor, Baghdader Farschungen Bd. 5. Maniz: Philipp Von Zabern.
-Laporte, P. & A. Jeroussalimskaja & B. Marshak & A. Nikitin & others. 1993. " Catalogue", in Splendeur des Sasanides, Bruyelles; Musees royouy d Art et d historire,
-Mahbobian, h. 1997. Art of Ancient Iran, copper and Bronze:The Hushang Mahbobian family collection, London: philip wilson.
-Louknine, V. & I, Antoni. 2003. Persian Art, London:Sirocdo.
-Muscarella, O. 1988. Bronze and Iron, Ancient Near Eastern Artifact in the Metropolitan Museum of Art, Newyork: Metropolitan Museum of Art.
-Orbeli, J. 1983. "Sasanian and early Islamic Metalwork", in A Survey of Persian, A.U. pope. London – Newyork: Oxford University Press, Vol:II, P:763-770.
-Orbeli, J. & C. V. Trever. 1935. Sasanidskii Metal, Moscow and Saintpetersburg: Acedemia.
-Parrot, A. 1953. "Acquisition et Inedits du Musee de Louvre Bronze, Iraniens, Bust de Roi Sasanides", Syria, Vol:XXX, Paris, P:1-11.
-Parrot, A. 1955. "Bronze Royal Sasanide", Syria, Vol: XXXII, Paris, P:308-309.
-Paruck, F. 1924. Sasanian Coins, Book Corportion, New Delhi, Bombay.
-Ringbom, I, L, 1938. "The Sasanian Bronze Salvers With Paridaeza Motifs", in A Survey of Persian Art, A. U. pope, Vol: XIV, London Newyork: Oxford University Press, P:3029-3038.
-Sarre, F. 1910. Dia Kunst Alten Persian, Berlin: mann.
-Sellwood, D. 1985. An Introduction of Sasanian Coins, London: Spink.
-Trever, C. 1938. "Sasanian Coinage", in A Survey of Persian, A. U. pope. Vol: II, London- Newyork: Oxford University Press, P:820-826.
-Walker, J, M. 1976. A Catalogue of the Arab- Sasanian Coins, London- Newyork : Oxford University press.

آلرام، میشائیل. 1380. 7000هزار سال هنر ایران. ترجمه فرانک بحرالعلومی، (تهران:انتشارات موزه ملی ایران).
احسانی، محمد تقی. 1382. هفت هزار سال هنر فلز کاری در ایران، (‌تهران: انتشارات علمی و فرهنگی).
امینی، امین. 1385. سکه‌های ساسانی، (یزد: انتشارات مولف).
براون،‌ مایکل. 1374. « سکه‌سازی »، هنرهای ایران، ترجمه پرویز مرزبان، (‌تهران: انتشارات فروزان).
پاکزادیان، حسن. 1384. تاریخ و گاهشماری در سکه‌های ساسانی، ( تهران: انتشارات مولف)
پوپ، آرتور. 1338. شاهکارهای هنر ایران، ترجمه پرویز ناتل خانلری، چاپ اول، (‌تهران:بنگاه مطبوعاتی صفعلی شاه).
رحیمی، فرشته. 1380. بررسی تکنیکی و تعیین اصالت مجموعه اشیاء نقره‌ای غارقوری قلعه، پایان نامه کارشناسی ارشد، (‌دانشگاه آزاد اسلامی واحد تهران مرکزی منتشر نگردیده است).
ریاضی،‌ محمد رضا. 1383. «طرحها و نقشهای دوران ساسانی 2»، نشان، شماره 5، (تهران)، ص53-51.
شراتو، امبرتو و ماریوبوسایلی. 1383. تاریخ هنر ایران( هنر پارت و ساسانی)،‌ ترجمه یعقوب آژند، (‌تهران: انتشارات مولی).
شیب مان، کلاووس. 1383. تاریخ شاهنشاهی ساسانی، ترجمه فرامرز نجارسمیعی، ( تهران: پژوهشکده زبان وگویش).
کورتیس، جان. 1385. ایران باستان، ترجمه آذربصیر، (‌تهران: انتشارات امیرکبیر).
گانتر، آن سی وپل جت. 1383. فلز کاری ایران در دوران هخامنشی، اشکانی، ساسانی، ترجمه شهرام حیدر آبادیان، (‌تهران:گنجینه هنر).
گدار، آندره. 1377. هنر ایران، ترجمه دکتر بهروز حبیبی، (‌تهران: انتشارات دانشگاه شهید بهشتی).
گیرشمن، رمان. 1350. هنر ایران (‌پارت و ساسانی)، ترجمه بهرام فره‌وشی (‌تهران:بنگاه ترجمه و نشر کتاب).
گیرشمن، رمان. 1381. ایران از آغاز تا اسلام، ترجمه محمد معین، ( تهران: بنگاه ترجمه و نشر کتاب).
لک پور، سیمین. 1375. سفید روی. (‌تهران: میراث فرهنگی کشور).
لوکونین، ولادیمیر. 1352. کاتالوگ شاهکارهای ساسانی در موزه ارمیتاژ، (‌تهران: انتشارات موزه ملی ایران).
لوکونین، ولادیمیر. 1350. تمدن ایران ساسانی، ترجمه عنایت الله رضا، (‌تهران: ترجمه ونشر کتاب)
مرادی، یوسف. 1382. « سرستونهای نویافته ساسانی در کرمانشاه، بازشناسی اسب سوار ایران بزرگ طاق بستان و ایزدان سرستونهای ساسانی»، تاریخ وباستان شناسی، ش35، ص35-34.
مقدم،‌ محمد. 1380. جستار درباره مهر و ناهید، (‌تهران: انتشارات هیرمند).
موزه ملی ایران، 1385. کاتالوگ گچبری در آرایه‌ها و تزئینات معماری دوران اشکانی، ساسانی، (تهران: انتشارات موزه ملی ایران).
هارپر، پرودنس. 1379. « سیمینه‌های درباری ساسانیان»، اوجهای درخشان هنر ایران، ترجمه هرمز عبداللهی و رویین پاکباز، (‌تهران : انتشارات آگاه).
هرمان، جورجینا، 1373. تجدید حیات هنر و تمدن ایران باستان، ترجمه مهرداد وحدتی، (‌تهران: مرکز نشر دانشگاهی).
یارشاطر، احسان. 1348. تاریخ ایران از سلوکیان تا فروپاشی دولت ساسانی، ترجمه حسن انوشه، ج دوم، (‌تهران: انتشارات امیرکبیر).
ویلسن، کریستی 1317. تاریخ صنایع ایران، ترجمه عبدالله فریاد، (‌تهران: چاپخانه بروخیم).

فهرست جدول ها
3-1-1 جدول جنبه نمادین برخی از نقوش ظروف فلزی دوره ساسانی   18
3-1-2 جدول طبقه بندی و گاهنگاری ظروف فلزی دوره ساسانی    22
3-2-1 جدول مشخصات ظروف مفرغی مورد مطالعه   80
4-2-1 جدول مشخصات پیکره های مفرغی مورد مطالعه  141
5-2-1 جدول مشخصات سکه های مفرغی مورد مطالعه   194
5-2-2 جدول تاجهای پادشاهان ساسانی بر روی سکه ها    196

 فهرست شکلها
3-2-2-1-1 شکل کاخ بازسازی شده از روی تصویر سینی مفرغی 39
3-2-2-1-2 شکل سینی مفرغی کاخ 40
3-2-2-2-1 شکل سینی مفرغی با نقوش انسانی 43
4-2-2-3-1  شکل سینی مفرغی با نقوش گیاهی 47
3-2-4-1-1  شکل ابریق مفرغی 69
4-1-1  شکل نیم ستون با نیم تنه گچی  91
4-2-1-1  شکل تاج پادشاهان ساسانی  98
4-2-1-3-1  شکل تاج پیروز اول 105
4-2-1-4-1 شکل تاج یزدگرد دوم و بلاش بر روی سکه ها  107
5-2-1-1  شکل نوع تاجها و آتشدانهای سکه های اردشیر اول  160
5-2-2-1   شکل نوع تاجها و آتشدانهای سکه های شاپور اول  164
5-2-3-1   شکل نوع تاجها و آتشدانهای سکه های بهرام اول  167
5-2-5-1  شکل نوع تاجها و آتشدانهای سکه های نرسی  170
5-2-6-1  شکل نوع تاجها و آتشدانهای سکه های هرمز دوم 172
5-2-7-1  شکل نوع تاجها و آتشدانهای سکه های شاپور دوم  174
5-2-8-1  شکل نوع تاجها و آتشدانهای سکه های شاپور سوم  177
5-2-9-1  شکل نوع تاجها و آتشدانهای سکه های بهرام چهارم  179
5-2-10-1  شکل نوع تاجها و آتشدانهای سکه های یزدگرد اول 181
5-2-11-1  شکل نوع تاجها و آتشدانهای سکه های پیروز  183
5-2-12-1  شکل نوع تاجها و آتشدانهای سکه های قباد اول 185
5-2-13-1  شکل نوع تاجها و آتشدانهای سکه های خسرو اول  187
5-2-14-1  شکل نوع تاجها و آتشدانهای سکه های خسرو دوم  189
5-2-15-1  شکل نوع تاجها و آتشدانهای سکه های یزدگرد سوم  193



خرید و دانلود  بررسی مجموعه اشیاء برنزی دوره ساسانی (ظروف،پیکره ها،مسکوکات)


پایان نامه کاردانی تهیه نرم افزار حقوق و دستمزد

پایان نامه کاردانی تهیه نرم افزار حقوق و دستمزد

فرمت فایل: word

تعداد صفحه:77

پایان نامه جهت اخذ درجه  کاردانی در رشته مهندسی کامپیوتر گرایش نرم افزار

عنوان:

تهیه نرم افزار حقوق و دستمزد

فهرست مطالب

مقدمه   
فصل اول : آشنایی با نرم افزارهای استفاده شده در سیستم حقوق و دستمزد     
۱-۱ مطرح شدن بعنوان یک استاندارد صنعتی    ۲
۲-۱ C#چیست ؟    ۲
۱-۲-۱ کد مدیریت یافته    ۳
۲-۲-۱ روش یادگیری C#    ۳
۳-۲-۱ مفاهیم شیء گرایی در C#    ۴
۳-۱ شیء چیست؟    ۴
۱-۳-۱ کلاسه کردن اشیاء مقدمه ای بر ارث بری Inheritance))    ۶
۲-۳-۱ سلسله مراتب اشیاء (بررسی ارث بری در محیط شیءگرا)    ۷
۳-۳-۱ انتزاع (Abstraction)    ۸
۴-۳-۱ اشیاء درون اشیاء (مقدمه ای بر کپسوله‌کردن یا Encapsulation)    ۹
۵-۳-۱ اشیائی با رفتارهایی متفاوت (مقدمه بر چند ریختی یا Polymorphism)    ۱۱
۴-۱ .NET چیست و چگونه شکل گرفت؟    ۱۴
۱-۴-۱ یک پلات فرم مناسب برای آینده    ۱۵
۲-۴-۱ ایده های اولیه    ۱۶
۳-۴-۱ تولد دات نت    ۱۶
۴-۴-۱ مروری بر Frame work دات نت:    ۱۷
۵-۱ مفاهیم مبنایی پایگاه داده ها :    ۱۸
۱-۵-۱منظور از کنترل و مدیریت :    ۱۹
۲-۵-۱ مفهوم داده :    ۲۲
۳-۵-۱ مفاهیم ابتدائی    ۲۴
۴-۵-۱ شکل کلی دستور :    ۲۵
۵-۵-۱ذخیره تصاویر در SQL Server    ۲۵
۶-۱ آشنایی با نسخه‌های SQL Server 2005    ۲۷
۱-۶-۱ کدام سیستم عامل؟    ۲۸
۲-۶-۱ آشنایی با محیط Sqlserver management studio    ۳۰
۷-۱ انتقال اطلاعات با Replication در SQLserver     ۳۴
۱-۷-۱ معرفی Replication     ۳۴
۲-۷-۱ انتقال اطلاعات به روش ادغام (Merge)     ۳۵
۳-۷-۱ تصویر برداری از اطلاعات (snapshot)    ۳۵
۴-۷-۱ انتقال بر اساس فرآیند (Transactional)     ۳۶
۵-۷-۱ تعریف ناشر و مشترکین     ۳۶
۶-۷-۱ طرح یک مسئله    ۳۷
۷-۷-۱ مراحل ایجاد ناشر     ۳۷
۸-۱ مراحل ایجاد مشترکین     ۳۸
۱-۸-۱ روش pul (از طریق مشترک)    ۳۸
۲-۸-۱ روش push (از طریق ناشر)     ۳۸
۳-۸-۱ snapshot lsolation level     ۳۹
۴-۸-۱ باز هم دات نت     ۳۸
۹-۱ ADO.Net وارد می‌شود    ۴۰
۱۰-۱ تکنولوژی xml    ۴۱
۱۱-۱ سرویس اعلان (Notification)     ۴۲
۱۲-۱ سرویس گزارش گیری     ۴۲
۱۳-۱ مدیریت خطا     ۴۳
فصل دوم : تجزیه و تحلیل سیستم
۱-۲ نمودارER-MODELING    ۴۵
۲-۲ نمودار دیدهای فرمها و کاربران نسبت به هم    ۴۶
۳-۲ تعاریف    ۴۷
۴-۲ کارکرد نرم افزار حقوق و دستمزد :    ۴۷
۱-۴-۲ جدول پرسنلی (Personally) :    ۴۸
۲-۴-۲ جدول پایانی (Final) :    ۴۸
۳-۴-۲ تصویر اضافه کار (Ezkar) :    ۴۹
۵-۲ گزارش ماهانه :    ۴۹
۱-۵-۲ فیش حقوقی :    ۵۰
۲-۵-۲ فیلدهای جداول جدول ساعت زنی Time :    ۵۰
۳-۵-۲ جدول پرسنلی Personally    ۵۰
۴-۵-۲ جدول محاسباتی حقوق    ۵۱
۵-۵-۲ تصویر اضافه کار (Ezkar)    ۵۱
۶-۵-۲ گزارش ماهانه    ۵۱
فصل سوم : طراحی فرم‌ها و چگونگی کارکرد نرم افزار
۱-۳ فرم شروع    ۵۳
۱-۱-۳ فرم ساعت زنی    ۵۴
۲-۱-۳ فرم  ثبت کارمندان    ۵۶
۳-۱-۳ فرم نمایش همه کاربران    ۵۷
۴-۱-۳ محاسبه حقوق    ۵۸
۲-۳ فرمول های محاسبات :    ۵۹
فصل چهارم ‌: نحوه پیاده سازی سیستم
مقدمه    ۶۱
۱-۴ کلاس add    ۶۱
۱-۱-۴ نحوه استفاده از کلاس add در برنامه برای اضافه کردن کارمند جدید به لیست کامندان    ۶۲
۲-۴ نحوه گزارش گیری با کریستال ریپورت    ۶۶
فهرست منابع    ۶۸

چکیده:

در نرم افزار محاسبه حقوق و دستمزد با توجه به مدرک و سابقه افراد حقوق و پایه در نظر گرفته می شود و در ضمن نوع شغل نیز می تواند بر میزان حقوق موثر باشد .

در این نرم افزار ساعت حضور و غیاب از ساعت سیستم خوانده می شود و ساعت مرخصی بر حقوق ماهیانه تاثیر می گذارد میزان تاخیر روزانه نیز بریا هر فرد مشخص می گردد .

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

مقدمه

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

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

مطرح شدن بعنوان یک استاندارد صنعتی

انجمن تولیدکنندگان کامپیوتر اروپا (ECMA) زبان C#را در سوم اکتبر سال ۲۰۰۱ بعنوان یک  استاندارد پذیرفته (ECMA-334) و بدنبال آن تلاش های وسیعی برای کسب گواهی ISO نیز انجام شده است. زبان فوق در ابتدا توسط شرکت مایکروسافت و بعنوان بخشی از دات نت پیاده سازی و بلافاصله پس از آن توسط شرکت های اینتل، هیولیت پاکارد و مایکروسافت مشترکا، جهت استاندارسازی پیشنهاد گردید.

زبان C#بگونه ای طراحی شده است که نه تنها وابستگی به یک Platform خاص را ندارد، بلکه در اغلب موارد وابستگی RunTime نیز ندارد. کامپایلر C#می تواند بر روی هر نوع معماری سخت افزاری طراحی و اجرا گردد. در برخی از نسخه های اولیه کامپایلر زبان فوق که توسط برخی از شرکت های جانبی ارائه شده است، کدهای C#را به بایت کدهای جاوا کمپایل می کنند. یکی از چنین کامپایلرهائی را می توان در سایت Halcyonsoft.com مشاهده نمود. بنابراین کدهای  C#براحتی قابلیت حمل بر روی محیط های متفاوت را دارا خواهند بود.

مشخصات تعریف شده زبان C#با سایر استاندارهای تعریف شده ECMA نظیر (ECMA-335) CLI (Common Language Infrastructure) بخوبی مطابقت می نمایند. CLI قلب و روح دات نت و CLR(Common Language Runtime) است. اولین نسخه از کامپایلر زبان  C#که از CLI استفاده می کند، NET Framwork. مایکروسافت است.

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

۲-۱ C#چیست ؟

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

طراحان زبان C#، با درک اهمیت موضوع فوق، این ویژگی را کماکان در آن گنجانده ولی بمنظور ممانعت از استفاده نادرست و ایجاد اطمینان های لازم مسئله حفاظت نیز مورد توجه قرار گرفته است. جهت استفاده از ویژگی فوق، برنامه نویسان می بایست با صراحت و به روشنی خواسته خود را از طریق استفاده از Keyword های مربوطهاعلان نمایند( فراخوانی یک توانائی و استفاده از آن).

C#بعنوان یک زبان شی گراء عالی است. این زبان First-Class را برای مفهوم Property (Data Member) بهمراه سایر خصائص عمومی برنامه نویسی شی گراء حمایت می کند. در C و  ++C  و جاوا یک متد get/set اغلب برای دستیابی به ویژگی های هر Property استفاده می گردد. CLI  همچنان تعریف Property را به متدهای get/ser ترجمه کرده تا بدین طریق بتواند دارای حداکثر ارتباط متقابل با سایر زبانهای برنامه نویسی باشد  .C#

بصورت فطریEvents ، Declared Value، Reference Type ، Operator Overloading را نیز حمایت می کند.

 ۱-۲-۱ کد مدیریت یافته

با استفاده از نسخه پیاده سازی شده  C# توسط مایکروسافت، می توان همواره کد مدیریت یافته ای را تولید کرد. یک برنامه  C# پس از کامپایل، بصورت برنامه ای در خواهد آمد که شامل دستورالعمل های تلفیق شده (CIL)Common Intermediate Language است -درست بر خلاف دستورالعمل های مختص یک ماشین خاص-.

CILگاهاً با نام   MSIL (Microsoft Intermediate Language)  یا به اختصار IL نیز نامیده می شود)، در مفهوم مشابه بایت کدهای جاوا بوده و شامل مجموعه ای از دستورالعمل های سطح پایین قابل فهم توسط تکنولوژی مبتنی بر CLI نظیر CLR مایکروسافت خواهد بود. این برنامه ها بدین دلیل کد مدیریت یافته، نامیده می شوند که CLR مسئولیت تبدیل این دستورالعمل ها به کدهای قابل اجرا برروی ماشین و ارائه اغلب سرویس های اساسی برای کدینگ نظیر : Garbage Collection، مدیریت Heap و عمر مفید یک Object و یا Type Verification را فـراهم می کند.

۲-۲-۱ روش یادگیری C#

یادگیری این زبان برای افرادیکه دارای سابقه آشنائی با یکی از زبانهای برنامه نویسی ++C ،C  و یا جاوا باشند کار مشکلی نخواهد بود، حتی افرادیکه دارای آشنائی اولیه با جاوا اسکریپت و یا دیگر زبانهای برنامه نویسی نظیر ویژوال بیسک می باشند، امکان پذیر و راحت خواهد بود. برخی از برنامه نویسان حرفه ای بر این باور هستند که  C# نسبت به VB.NET با اقبال بیشتر و سریعتری مواجه خواهد شد، چراکه  C# نسبت به ویژوال بیسک خلاصه تر است. حتی برنامه های بزرگ و پیچیده ای که توسط  C# نوشته می گردند خواناتر، کوتاه و زیبا خواهند بود. برخی از ویژگی های ارائه شده در  C# نظیر Unsigned Integer، Operator OverLoading و امنیت بیشتر Type ها، در VB.NET وجود نداشته و این امر می تواند دلیلی بر فراگیرتر شدن  C# نسبت به VB.NET نزد برنامه نویسان با تجربه باشد.

برای یادگیری هر یک از زبانهای حمایت شده در دات نت، می بایست از BCL (Basic Class Library) مربوط به.NET Framework   شروع کرد. C#  خود صرفاً دارای ۷۷ کلمه کلیدی یا Keyword  بوده که برای اکثر برنامه نویسان ناآشنا نخواهند بود. در مقابل BCL، دارای ۴۵۰۰ کلاس و تعداد بیشماری متد و Property است که برنامه نویسان C# ، می توانند از آنها برای انجام عملیات دلخواه خود استفاده نمایند. شاید یکی از مسائل قابل توجه جهت یادگیری این زبان برای برخی از برنامه نویسان حرفه ای عدم وجود برخی از ویژگی ها و امکاناتی باشد که در گذشته و از طریق سایر زبانهای استفاده شده، بخدمت گرفته می شدند. مثلا عدم وجود امکاناتی جهت توارث چندگانه (MI) سلسله مراتبی یک شئ.

۳-۲-۱ مفاهیم شیء گرایی در C#

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

۳-۱ شیء چیست؟

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

در شیء گرایی به “شکل ظاهر” در اصطلاح، صفت یا Attribute و به عملی که شیء انجام می دهد، رفتار یا Behavior می گویند.

برای مثال یک صندلی را در نظر بگیرید. صندلی صفات مختلفی دارد ولی رفتار خاصی ندارد. مثلاً پایه های صندلی جزو صفات آن بشمار می روند. با کمی دقیق تر شدن می توان از این صفات برای توصیف صندلی استفاده کرد. بعنوان مثال تعداد پایه های صندلی می تواند عددی بین ۳ تا ۵ باشد. محل نشستن صندلی می تواند جمله‌ای در وصف جنس آن و مقدار مصرف ماده سازنده آن باشد. پشتی صندلی را نیز می توان بعنوان متغییری boolean در نظر گرفت چراکه برخی از صندلی ها فاقد پشتی هستند. با استفاده از این سه صفت ساده، به راحتی می توان صندلی را توصیف نمود و با همین سه صفت میتوان گونه‌های مختلفی از صندلی را نیز توصیف کرد.

منظور از رفتار، عملی است که یک شیء انجام می دهد. از اینرو برای صندلی نمی توان به سادگی صفات آن، رفتاری را متصور شد. مثلاً می‌توانیم بگوئیم تاشو بودن صندلی یکی از رفتارهای آن می تواند باشد، چراکه عملی است که می تواند یک صندلی آنرا انجام دهد.

حال شیء دیگری مانند تلویزیون را در نظر بگیرید. صفاتی که می توان برای تلویزیون در نظر گرفت عبارتند از: صفحه نمایش، سازنده آن و … برای تلویزیون به راحتی می توان رفتار در نظر گرفت: خاموش و روشن شدن، تغییر کانال و کم و زیاد کردن صدا. این رفتارها بر اثر درخواست یک انسان یا همان کاربر اتفاق می افتند. شیء تلویزیون را میتوان بصورت زیر نمایش داد :

بطور کلی، یک شیء را میتوان بوسیله صفات و رفتارهای آن بطور کامل توصیف نمود. یک شیء حتماً جسمی فیزیکی نیست، بلکه هر چیز قابل تصوری است که دارای صفت و رفتار است. در حقیقت میتوان گفت یک شیء شبیه به یک اسم است. اگر بتوان برای این اسم، صفت و رفتاری تعریف کرد، آن وقت تبدیل به شیء می شود.

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

در زبان C#، اشیاء بوسیله کلاسها (Class) نمایش داده می شوند. داخل کلاس، صفات بصورت فیلدها ظاهر می شوند و جهت پیاده سازی رفتارها از متدها استفاده می گردد. به مثال زیر توجه نماید :

کد:

class Time
{
int hours;
int minutes;
int seconds;
void pastime()
{
//some implementation
}
}

در این مثال، کلاس Time مشاهده می شود. این کلاس با کلمه کلیدی class اعلان گردیده است. همانطور که میدانید، دو کروشه باز و بسته {} نیز ابتدا و انتهای کلاس را مشخص می‌کند. فیلدها دارای نام و نوع هستند. متدها دارای نام و نوع بازگشتی می باشند و پیاده‌سازی آنها داخل بلوک مربوط به خود آنها (بین دو {}) انجام میگردد.

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

۱-۳-۱ کلاسه کردن اشیاء مقدمه ای بر ارث بری Inheritance))

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

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

کد:

class Bird
{
string beakDescription;
int wingSpan;
string typeOfBird;
void fly()
{
//some implementation
}
}

می توان این کلاس را بعنوان کلاسی عمومی برای پرندگان در نظر گرفت که دارای فیلدی جهت تعیین نوع پرنده نیز می‌باشد. با استفاده از فیلد typeOfBird می‌توان گونه پرنده مورد نظر را معین نمود.

۲-۳-۱ سلسله مراتب اشیاء (بررسی ارث بری در محیط شیءگرا)

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

اتفاقی که در مورد زیر شاخه‌ها رخ می‌دهد، ایجاد یک سلسله مراتب طبیعی است. برنامه‌نویسی شیءگرا ، متدولوژیی را جهت مدیریت سلسله مراتب طبیعی فراهم می نماید. بعنوان مثال، اگر در یک پروژه یکی از طبقه بندیهای ما حیوانات باشند، منطقی است که شیءای از طبقه حیوانات در رأس سلسله مراتب قرار گیرد و در طبقات و زیر شاخه‌های سطوح پائینی، پرندگان، مهره داران و خزندگان قرار گیرند. در سطح بعدی می‌توان چند پرنده مانند اردک، کلاغ و … را نیز در زیر شاخه پرندگان قرار داد. این سلسله مراتب تا سطح مورد نظر قابل تعمیم است.

در برنامه نویسی شیءگرا، مفهومی که اشیاء را تحت یک سلسله مراتب خاص قرار میدهد، ارث‌بری یا Inheritance نامیده می‌شود. مثلاً طبقه‌بندی حیوانات را در نظر بگیرید، شیءای که در بالاترین سطح قرار می‌گیرد، شیء Animal است. این شیء دارای ویژگیهایی بسیار کلی و عمومی است و باید چنین هم باشد، چراکه سرگروه باید همیشه ویژگیهایی را داشته باشد که در زیر شاخه ها بطور مشترک وجود دارد و هر یک از زیر شاخه‌ها به ویژگیهای سرگروه خود، ویژگیها و مشخصات خاص خود را می افزایند.

در این مثال، سرگروه Animal تنها می‌تواند دارای صفت یگانه “زیستن” باشد، چراکه همین صفت آنرا از سایر اشیاء، نظیر سنگ و در و پنجره و بطور کل اجسام، متمایز می‌نماید. رفتار این شیء نیز می تواند “تنفس کردن” و “غذا خوردن” باشد. حال برای اینکه شیءای بتواند در این سلسله مراتب وارد شود، حداقل باید دارای صفت شیء سرگروه این سلسله مراتب باشد، درغیر اینصورت نمی‌تواند در زیر شاخه آن قرار گیرد.

تفاوت Animal با سایر اشیاء که در این سلسله مراتب قرار می‌گیرند در آنست که سایر اشیاء می‌بایست صفاتی دیگر و – یا رفتارهای دیگری را نیز به صفات و رفتارهای Animal اضافه کنند. این صفات و رفتارها مسلماً جزئی‌تر و دقیق‌تر از صفات و رفتارهای سرگروه است. همین مسئله مفهومی را در پیمایش سلسله مراتب‌ها بوجود می‌آورد : در پیمایش بالا به پائین (Top-Down) سلسله مراتب‌ها به جزئیات یا گونه‌های خاص برخورد می‌کنیم، حال آنکه در پیمایش پائین با بالا (Bottom-Up) به گروهها و دسته‌های عمومی می‌رسیم.

اشیاء سطوح پائینی (که به آنها child می‌گوئیم) صفات و رفتارهای اشیاء سطح بالاتر خود را به ارث می‌برند. به این اشیاء بالاتر یا سرگروهها نیز parent می‌گوئیم. به این رابطه موجود بین child و parent در اصطلاح رابطه “هست” یا “بودن” (is-a relationship) می‌گویند. مثلاً می‌گوئیم “اردک یک پرنده است”.

سادگی ارث بری از نحوه ایجاد سلسله مراتب ارث‌بری نشأط می‌گیرد. اشیاء سطوح پائینی (child) در تعریف خود اشیاء سطوح بالایی (parent) خود را مشخص می‌کنند. در این جا تنها کاری که لازم است یک child نسبت به parent خود انجام دهد افزودن صفات و رفتارهای مربوط به خود است. شکل زیر یک سلسله مراتب را نشان می‌دهد.

همانطور که در این شکل ملاحظه می‌کنید، سرگروه که همان Animal است، دارای صفت Living و رفتارهایی همچون Eat() می‌باشد. زیر شاخه این شیء کلیه صفات آنرا به ارث می‌برد، بعلاوه اینکه صفت Wing و رفتار Fly() را نیز به صفات و رفتارهای parent خود می‌ا‌فزاید. حال برای زیر شاخه‌ای که در زیر Bird قرار می‌گیرد نیز می‌توان صفات و رفتارهای خاص دیگری در نظر گرفت.

علاوه بر طبقه‌بندی اشیاء در دسته‌های مختلف و سادگی در سازماندهی آنها بوسیله ارث‌بری، استفاده از ارث‌بری در انجام کارها نیز صرفه‌جویی ایجاد می‌کند. هر شیء جدیدی که به یک سلسله مراتب وارد می‌شود، بطور خودکار تمامی صفات و رفتارهای کلیه parent های خود را دارا می‌باشد و بعلت ارث‌بری نیازی به تعریف مجدد این صفات برای شیء جدید نمی‌باشد. به بیان دیگر می‌توان گفت، ارث‌بری روشی برای استفاده مجدد از صفات و رفتارهای موجود است.

استفاده از ارث‌بری این امکان را برای طراحان نرم افزار فراهم می‌کند تا وقت بیشتری برای تفکر بر روی منطق برنامه صرف کنند و درگیر پیچیدگی‌های پیاده‌سازی و نگهداری نرم افزار نشوند.

۳-۳-۱ انتزاع (Abstraction)

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

از طرف دیگر شیءای وجود دارد بنام اردک که واقعاً یک اردک است و دارای کلیه صفات و رفتارهای آن می‌باشد. البته باید توجه داشت که هر اردک تنها نمونه‌ای از “اردک” است. (منظور در اینجا آنست که موجودیتی مانند یک اردک که واقعا وجود دارد، خود نمونه‌ای (instance) از کلاس اردک است. درک مطالب در اینجا شاید به اندکی تأمل و حوصله نیاز داشته باشد!

برای شیءای مانند Animal یا Bird، نمی‌توان صفتی همچون “پاهایی پهن” و یا رفتاری مانند “را رفتن شبیه به اردک” را تعریف نمود. همچنین از اشیاء Animal و Bird تنها یک نمونه می‌تواند وجود داشته باشد که این نمونه‌ها نیز بسیار مهم هستند، چراکه این نمونه‌ها هستند که ساختار یک سلسله مراتب را تشکیل می‌دهند و صفات و رفتارهای کلی آن را معین می‌نمایند. ( البته توجه کنید که استفاده از کلمه abstract در زبان C# خود یگانه بودن و همچنین انتزاعی بودن کلاس را نشان می‌دهد).

تعریف و توصیف صحیح این اشیاء انتزاعی، همچون Animal و Bird، در طبقه‌بندی و کارآمدی ساختار سلسله مراتبی بسیار می‌تواند موثر باشد. مثال زیر نحوه تعریف و ایجاد اشیاء انتزاعی در C# را نشان می دهد.

کد:

abstract class Animal
{
//abstract definitions and implementations
}
class Bird : Animal
{
//class implementation
}

در این مثال کلاس Animal بصورت abstract اعلان شده تا مشخص شود که شیءای انتزاعی است. چون شیء انتزاعی عملاً وجود ندارد، نمی‌توان نمونه‌ای جدید از روی آن ایجاد کرد و تنها یک شیء از آن وجود دارد. در کلاس دوم، Bird، نشان داده شده است که این کلاس از کلاس انتزاعی Animal ارث‌بری دارد. این عمل با استـفاده از “:” در جــلوی نام Bird و سپس به دنبال آن نـــام کلاسی که Bird از آن ارث‌بری می‌کند، یعنی همان Animal، صورت گرفته است.

۴-۳-۱ اشیاء درون اشیاء (مقدمه ای بر کپسوله‌کردن یا Encapsulation)

ساختارهای سلسله مراتبی روشی جهت دستیابی به روابط بین اشیاء هستند. هر چند روشهای دیگری نیز برای نشان دادن روابط بین اشیاء وجود دارد. یکی از این روشها که بسیار معمول نیز هست، استفاده از اشیاء درون اشیائی دیگر است.

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

شیء Bird را که قبلاً درباره آن صحبت کردیم، در نظر بگیرید. پرندگان دارای منقار و بال هستند. خود بال یک شیء است که دارای صفاتی نظیر پر و اندازه است. رفتار آن نیز می‌توان باز و بسته شدن در حین پرواز باشد. نکته قابل اشاره در اینجا، کلمه “داشتن” است. اعمالی وجود دارند که پرنده آنها را انجام می‌دهد و این اعمال خود جزئی از پرنده هستند.

بطور کلی، رابطه “داشتن” (has-a relationship) بین یک شیء و اعمالی که بر روی اجزای خود انجام می‌دهد، وجود دارد. بعنوان مثال می‌گوئیم “پرنده بال دارد”. در اینجا چون بال شیءای متعلق به پرنده است که پرنده روی آن عملی انجام می‌دهد، مفهوم کپسوله‌کردن رخ می‌دهد، شیءای درون شیءای دیگر. مثال زیر نحوه پیاده‌سازی کپسوله‌کردن را نشان می‌دهد.

کد:

class Wing
{
int foreWingSize;
int backWingSize;
void flap()
{
//implementation
}
void fold()
{
//implementation
}
}
class Bird : Animal
{
int beakSize;
Wing wings;
void Fly()
{
//implementation
}
}

در این مثال، دو کلاس Bird و Wing وجود دارند. کلاس Wing فیلدها و متدهای مربوط به خود را دارد. درون کلاس Bird اعلانی از کلاس Wing با استفاده از نام wings صورت گرفته است. این عمل رابطه مالکیتی بین Bird و Wing ایجاد می‌نماید. “پرنده دارای بال است”. تنها چیزی که کافیست بدانیم آنست که کلاس انتزاعی پرنده دارای بال است. توجه کنید که صفات و رفتارهای کلاس Wing بوسیله خود این کلاس کنترل می‌شوند.

۵-۳-۱ اشیائی با رفتارهایی متفاوت (مقدمه ای بر چندریختی یا Polymorphism)

خرید و دانلود پایان نامه کاردانی تهیه نرم افزار حقوق و دستمزد