سیستم مدیریت پایگاه دادهها (DBMS )، يك یا مجموعهای از چند برنامه كامپیوتری است كه برای مدیریت پایگاه دادهها، مجموعه عظیمی از دادههای ساخت یافته و عملیات اجرایی بر روی دادههای درخواستی كاربران، طراحی شده است. سیستمهای حسابداری، منابع انسانی و پشتیبان مشترك، نمونههایی از كاربرد سیستم مدیریت پایگاه دادهها هستند. این سیستمها كه پیشتر فقط در شركتهای بزرگ مطرح بودند، اخیرا بخش مهمی در شركت محسوب میشوند. تفاوت سیستمهای مدیریت پایگاه دادهها با برنامههای پایگاه دادهها در این است كه سیستمهای مذكور به عنوان موتور سیستم چندكاربره طراحی شدهاند. این سیستمها برای ایفای چنین نقشی، در كرنل مالتی تسكينگ خصوصی با پشتیبان شبكهای از پیش ساخته شده، قرار گرفتهاند. يك برنامه پایگاه داده نمونه، این گونهها را در درون خود ندارد، اما شاید بتواند با كمك سیستم عامل از عملكرد چنین گونههایی پشتیبانی كند.
تاریخچه
پایگاه دادهها در اولین روزهای پیدایش محاسبات الكترونيك به كار گرفته شدند. اما اكثر آنها برنامههای سفارشیای بودند كه برای دستیبابی به پایگاه دادههای سفارشی نوشته میشدند . این سیستمها بر خلاف سیستمهای مدرنی كه میتوانند در پایگاه دادههای مختلف به كار گرفته شوند، ارتباط تنگاتنگی با پایگاه دادهها دارند. انواع پایگاه دادهها عبارتند از:
پایگاه دادههای پیمایشی
رشد كاربری كامپیوتر، پیدایش سیستمهای پایگاه دادههای همه منظوره را موجب گردید. و در اواسط 1960 چنین سیستمهایی در بخش تجاری به كار گرفته شد. چارلز بچ من، نویسنده يكی از چنین محصولاتی با نام IDS، گروه Database Task Group را بنیان نهاد كه این گروه مسوول ایجاد و استاندارد سازی COBOL شد. آنها در سال 1971 استاندارد خود را عرضه نمودند. این استاندارد Codasyle approach نام داشت. این شیوه مبتنی بر پیمایش دستی مجموعه دادهها بود. هنگامی كه پایگاه دادهها برای اولین بار برنامه را باز میكرد، به اولین ركورد در پایگاه دادهها و به همین ترتیب نیز به سایر بخشهای داده نیز اشاره میشد. برنامه نویس برای دسترسی به يك ركورد خاص مجبور بود تا این اشارهگرها رابه ترتیب دنبال كند تا به ركورد موردنظر برسد. در query های ساده مانند " یافتن تمام افرادی كه در سوئد زندگی میكنند " باید برای جستجو در كل مجموعه دادهها برنامه نویسی میشد و دستوری به نام find وجود نداشت. شركت IBM سیستم مدیریت پایگاه دادههایی به نام IMS داشت. این سیستم از نظر مفهوم مشابه codasyle بود، اما برخلاف آن كه از مدل شبكهای استفاده مینمود، IMS مدل سلسله مراتبی را به كار میبرد.
پایگاه دادههای رابطهای
ادگار كاد كه در شركت آیبیام كار میكرد در سال 1970 مقالاتی در زمینه شیوه جدیدی برای ساخت پایگاه دادهها نوشت. يكی از مقالات وی كه Relational Model of Data for Shared Data Bank نام داشت، به بررسی سیستم جدیدی برای ذخیره سازی و كار با پایگاه دادههای بزرگ پرداخته بود. در این شیوه به جای اينكه ركورد به صورت ركوردهای free-form همانگونه كه در روش codasyle آمده بود، ذخیره شوند، از جدولی با ركوردهایی با طول ثابت استفاده میشد.
چنین سیستمی برای ذخیره سازی پایگاه دادههای پراكنده و در جاييكه بعضی از دادههای ركورد خالی هستند، كارآیی ندارد. مدل رابطهای این مشكل را حل كرده است. بدین صورت كه دادهها به يكسری جدول تقسیم میشوند و عناصر اختیاری از جدول اصلی خارج میگردند و در صورت نیاز در جدول قرار میگیرند. چنین سیستمی برای ردیابی اطلاعات كاربران، اسامی و نشانی آنان و غیره به كار میرود. دادهها در روش پیمایشی در يك ركورد جای میگیرند و آیتمهایی كه مورد استفاده قرار نگیرند، در پایگاه دادهها نیز نخواهند بود. دادهها در شیوه رابطهای در جداول جداگانهای، مثلا جدول اسامی، جدول نشانیها و غیره جای میگیرند. برقراری ارتباط بین اطلاعات نكته مهم در این سیستم است. درمدل رابطهای بعضی از بیتهای اطلاعات به عنوان كليد معرفی میشوند و منحصرا بیانگر ركورد خاصی هستند. هنگامی كه اطلاعات كاربر جمع آوری میشود، میتوان این اطلاعات را كه در جداول اختیاری ذخیره میشوند، با جستجوی كليد مربوطه یافت.
پایگاه دادههای چند بعدی
پایگاه دادههای رابطهای توانست به سرعت بازار را تسخیر كند، هرچند كارهایی نیز وجود داشت كه این پایگاه دادهها نمیتوانست به خوبی انجام دهد. به ویژه به كارگیری كليدها در چند ركورد مرتبط به هم و در چند پایگاه داده مشترك، كندی سیستم را موجب میشد. برای نمونه برای یافتن نشانی كاربری با نام دیوید، سیستم رابطهای باید نام وی را در جدول كاربر جستجو كند و كليد اصلی (primary key ) را بیابد و سپس در جدول نشانیها، دنبال آن كليد بگردد. اگر چه این وضعیت
از نظر كاربر، فقط يك عملیات محسوب، اما به جستجو درجداول نیازمند است كه این كار پیچیده و زمان بر خواهد بود. راه كار این مشكل این است كه پایگاه دادهها اطلاعات صریح درباره ارتباط بین دادهها را ذخیره نماید. میتوان به جای یافتن نشانی دیوید با جستجو ی كليد در جدول نشانی، اشارهگر به دادهها را ذخیره نمود. در واقع، اگر ركورد اصلی، مالك داده باشد، در همان مكان فیزيكی ذخیره خواهد شد و از سوی دیگر سرعت دسترسی افزایش خواهد یافت.
چنین سیستمی را پایگاه دادههای چند بعدی مینامند. این سیستم در هنگامی كه از مجموعه دادههای بزرگ استفاده میشود، بسیار سودمند خواهد بود. از آنجاييكه این سیستم برای مجموعه دادههای بزرگ به كار میرود، هیچگاه در بازار به طور مستقیم عمومیت نخواهد یافت.
پایگاه دادههای شیء
اگر چه سیستمهای چند بعدی نتوانستند بازار را تسخیر نمایند، اما به توسعه سیستمهای شیء منجر شدند. این سیستمها كه مبتنی بر ساختار و مفاهیم سیستمهای چند بعدی هستند، به كاربر امكان میدهند تا اشیاء را به طور مستقیم در پایگاه دادهها ذخیره نماید. بدین ترتیب ساختار برنامه نویسی شیء گرا (object oriented ) را میتوان به طور مستقیم و بدون تبدیل نمودن به سایر فرمتها، در پایگاه دادهها مورد استفاده قرار داد. این وضعیت به دلیل مفاهیم مالكيت (ownership) در سیستم چند بعدی، رخ میدهد. در برنامه شیء گرا (OO)، يك شیء خاص "مالك " سایر اشیاء در حافظه است، مثلا دیوید مالك نشانی خود میباشد. در صورتی كه مفهوم مالكيت در پایگاه دادههای رابطهای وجود ندارد.
ویژگیهای سیستم مدیریت پایگاه دادهها
پس از این مقدمه به توصیف سیستم مدیریت پایگاه دادهها میپردازیم. سیستم مدیریت پایگاه دادهها، مجموعهای پیچیده از برنامههای نرمافزاری است كه ذخیره سازی و بازیابی دادههای (فیلدها، ركوردها و فایلها) سازمان را در پایگاه دادهها، كنترل میكند. این سیستم، كنترل امنیت و صحت پایگاه دادهها را نیز بر عهده دارد. سیستم مدیریت پایگاه دادهها، درخواستهای داده را از برنامه میپذیرد و به سیستم عامل دستور میدهد تا دادهها ی مناسب را انتقال دهد. هنگامی كه چنین سیستمی مورد استفاده قرار میگیرد، اگر نیازمندیهای اطلاعاتی سازمانی تغییر یابد، سیستمهای اطلاعاتی نیز آسانتر تغییر خواهند یافت. سیستم مذكور از صحت پایگاه دادهها پشتیبانی میكند. بدین ترتیب كه اجازه نمیدهد بیش از يك كاربر در هر لحظه، يك ركورد را به روز رسانی كند. این سیستم ركوردهای تكراری را در خارج پایگاه دادهها نگاه میدارد. برای مثال، هیچ دو مشترك با يك شماره مشتری، نمیتوانند در پایگاه دادهها وارد شوند. این سیستم روشی برای ورود و به روز رسانی تعاملی پایگاه دادهها فراهم میآورد. يك سیستم اطلاعات كسب و كار از موضوعاتی نظیر (مشتریان، كارمندان، فروشندگان و غیره) و فعالیتهایی چون (سفارشات، پرداختها، خریدها و غیره) تشكيل شده است. طراحی پایگاه دادهها، فرایند تصمیم گیری درباره نحوه سازماندهی این دادهها در انواع ركوردها و برقراری ارتباط بین ركوردهاست.سیستم مدیریت پایگاه دادهها میتواند ساختار دادهها و ارتباط آنها را در سازمان به طور اثر بخش نشان دهد. سه نوع مدل متداول سازمانی عبارتند از: سلسله مراتبی، شبكهای و رابطهای. يك سیستم مدیریت پایگاه دادهها ممكن است يك، دو یا هر سه روش را فراهم آورد.
سرورهای پایگاه دادهها، كامپیوترهایی هستند كه پایگاه دادههای واقعی را نگاه میدارند و فقط سیستم مدیریت پایگاه دادهها و نرمافزار مربوطه را اجرا میكنند. معمولا این سرورها كامپیوترهای چند پردازندهای با آرایههای ديسك RAID برای ذخیره سازی میباشند.
فهرست سیستمهای متداول مدیریت پایگاه دادهها
Closed source :
-
IBM (DB2)
-
FileMaker, Inc (FileMaker Pro)
-
IBM (IMS)
-
Informix
-
Computer Associates (Ingres)
-
Borland (InterBase)
-
Micosoft (Microsoft SQL Server)
-
Microsoft (Microsoft Access)
-
Mimer AB (Mimer SQL)
-
Oracle
-
Sybase
-
NCR Corporation (Teradata)
Open Source :
-
Sleepycat software (Berkeley DB )
-
IBPhoenix (Firebird)
-
My SQL AB (My SQL)
-
PostgreSQL
-
MaxDB
-
SQLite
-
مقایسه پایگاه داده هالینک به مقایسه انواع سیستم های مدیریت پایگاه داده
http://www.cs.indiana.edu/~cmw/i308/fall2004/pdf/model-questions.pdf
Until the 1980s, databases were viewed as computer systems that stored record oriented and business type data such as manufacturing inventories, bank records, sales transactions, etc. A database system was not expected to merge numeric data with text, images, or multimedia information, nor was it expected to automatically notice patterns in the data it stored. In the late 1980’s the concept of an “Intelligent Database” was put forward as a system that manages information (rather than data) in a way that appears natural to users and which goes beyond simple record keeping.
The term Intelligent Database was introduced in 1989 by the book “Intelligent Databases” by Kamran Parsaye, Mark Chignell, Setrag Khoshafian and Harry Wong. This concept postulated three levels of intelligence for such systems: 1. high level tools, 2. the user interface and 3. the database engine. The high level tools manage data quality and automatically discover relevant patterns in the data with a process called data mining. This layer often relies on the use of artificial intelligence techniques. The user interface uses hypermedia in a form that uniformly manages text, images and numeric data. The intelligent database engine supports the other two other layers, often merging relational database techniques with object orientation.
In the twenty first century, intelligent databases have now become widespread, e.g. hospital databases can now call up patient histories consisting of charts, text and x-ray images just with a few mouse clicks, and many corporate databases include decision support tools based on sales pattern analysis, etc.
When a search is conducted using a traditional full-text database, the mere presence of keywords and phrases in a referenced file does not guarantee that the contents of that file will be relevant in a given context. An intelligent database provides expanded and more flexible options for conducting queries. For example, a user might type in a question as a full sentence. The database then provides a list of hits arranged according to the likelihood (from highest to lowest) that the resulting data contains a useful answer to that question. The AI may correct suspected errors (such as inaccurate spelling) input by the user. Some intelligent databases display synonyms (items with similar meanings) or antonyms (items with opposite or negative meanings) for keywords and phrases.
In order to derive the most benefit from an intelligent database, the user must formulate queries with forethought, phrasing them with care, just as is necessary when interrogating a person. For example, a user might type, "When will my computer be able to predict stock prices?" If this question does not provide satisfactory results, the user can ask a more specific question, or change the nature of the query. A search can be restricted to a particular computer, server, or network, or it can include the entire Internet. A search can be restricted to specific fields or topics such as specific products, world news, regional news, local news, business news, images, white papers, or the field of information technology. Queries can be limited to certain languages, geographic regions, or historical periods. An intelligent database can provide the user with a history of searches recently made, so if it is necessary to refine the search later or conduct another search on the same topic, the user does not have to start all over again.
http://searchsqlserver.techtarget.com/sDefinition/0,290660,sid87_gci1124415,00.html
| از آنجائيکه اطلاع رسانی ، برنامه های کاربردی بر مبنای Web و نياز وجود پايگاههای داده بر روی اينترنت از موضوعات مطرح اين سالها گرديده است ، بر آن شديم که تحقيقاتی در زمينه تکنولوژی های موجود دراين زمينه انجام دهيم . هدفی که در اين تحقيق دنبال می کرديم پيدا کردن ترکيبی مناسب از تکنولوژيهای پايگاه داده و تکنولوژيهای پردازش سمت Server ، از لحاظ سرعت و هزينه ای بود که بابت اين تکنولوژيها بايد پرداخت میشد. برای اين منظور Benchmark ای طراحی گرديده و برای ترکيبهای مختلفی از پايگاههای داده و تکنولوژی ها سمت Server اين Benchmark اجرا شده است ؛ جدولی که در ادامه آمده است بيانگر نتيجه اجرای اين آزمايش می باشد .
mySQL – سريعترين تکنولوژی سمت Server را PHP معرفی کرد . Access - سريعترين تکنولوژی سمت Server را Java Servlet معرفی کرد . Oracle - سريعترين تکنولوژی سمت Server را ASP معرفی کرد . SQL Server - سريعترين تکنولوژی سمت Server را Java Servlet معرفی کرد . نتيجه گيريهای صورت گرفته به صورت زير می باشد : PHP با mySQL سريعتر عمل می نمايد. ASP با Oracle سريعتر عمل می نمايد. Java Servlet با SQL Server سريعتر عمل می نمايد. ترين ها : سريعترين ترکيب پايگاه داده و تکنولوژی سمت Server ترکيب Java Servlet و SQL Server می باشد . کند ترين ترکيب پايگاه داده و تکنولوژی سمت Server ترکيب ASP و SQL Server می باشد . مشخصات ماشين ها : Oracle بروی يک ماشين Compaq ، PentiumIII 600 مگاهرتز و 256 مگابايت حافظه اصلی با سيستم عامل Windows 2000 Advanced Server SP2 اجرا شده است. SQL Server بروی يک ماشين Compaq ، PentiumIII 500 مگاهرتز و 256 مگابايت حافظه اصلی با سيستم عامل Windows 2000 Advanced Server SP2 اجرا شده است. MySQL بروی يک ماشين Compaq ، PentiumIII 500 مگاهرتز و 256 مگابايت حافظه اصلی با سيستم عامل Windows 2000 Advanced Server SP2 اجرا شده است. Access بروی يک ماشين Compaq ، PentiumIII 600 مگاهرتز و 512 مگابايت حافظه اصلی با سيستم عامل Windows 2000 Advanced Server SP2 اجرا شده است. PHP و ASP بروی IIS در يک ماشين Compaq ، PentiumIII 600 مگاهرتز و 512 مگابايت حافظه اصلی با سيستم عامل Windows 2000 Professional SP2 اجرا شده است . Java Servlet بروی Tomcat و در همان ماشينی که ASP و PHP اجرا می شوند اجرا شده است. و برای اطلاع دقيقتر لازم به توضيح است که : ماشين PentiumIII ای که دارای پردازنده 600 مگاهرتز با 512 مگابايت حافظه اصلی بود از يک هارد ديسک 12.1 گيگابايتی Seagate با سرعت 5200 دور در دقيقه استفاده می کرد. ماشين PentiumIII ای که دارای پردازنده 500 مگاهرتز با 256 مگابايت حافظه اصلی بود از يک هارد ديسک 12.6 گيگابايتی Seagate با سرعت 5200 دور در دقيقه استفاده می کرد. ماشين PentiumIII ای که دارای پردازنده 600 مگاهرتز با 256 مگابايت حافظه اصلی بود از يک هارد ديسک9.3 گيگابايتی Seagate با سرعت 5200 دور در دقيقه استفاده می کرد. نکات مطرح و عوامل تست : در زمان اجرا تست هر ماشين تنها دارای يک Client متصل به آن بوده است و تنها ، نرم افزار پايگاه داده بروی آن در حال اجرا بود. در مورد نرم افزار WebServer تنها پروسه در حال اجرا در سمت Server همين نرم افزار و در سمت Client تنها يک Web Browser ( IE 6.00 beta 2 ) در حال اجرا بود . پايگاه داده دارای 243573 رکورد بوده است . پايگاه داده های Oracle ، mySQL ، Access و SQL Server همگی از شمای زير استفاده کرده بوده اند: id – INT (signed, not null) [number in Access]
با تشکر از آقای میثم خوشبخت بر گرفته شده از : http://www.hamrahnet.com/persian/compare.htm
|
ادامه مطلب
اکنون زمان مناسبی برای بحث درباره انتزاع است. برخی اشياء تا حدودی انتزاعی هستند و برخی ديگر کاملاً واقعی. بعنوان مثال، چيزی بعنوان 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، صورت گرفته است.
کلاسه کردن اشياء (مقدمه ای بر ارث بری 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 های خود را دارا ميباشد و بعلت ارثبری نيازی به تعريف مجدد اين صفات برای شیء جديد نمیباشد. به بيان ديگر ميتوان گفت، ارثبری روشی برای استفاده مجدد از صفات و رفتارهای موجود است.
استفاده از ارثبری اين امکان را برای طراحان نرم افزار فراهم ميکند تا وقت بيشتری برای تفکر بر روی منطق برنامه صرف کنند و درگير پيچيدگيهای پيادهسازی و نگهداری نرم افزار نشوند.
يكي ديگر از مفاهيم پايهاي در شيگرايي، چند ريختي (Polymorphism) است. با استفاده از اين ويژگي، ميتوان براي متد كلاس مشتق شده پيادهسازي متفاوتي از پيادهسازي متد كلاس پايه ايجاد نمود. اين ويژگي در جايي مناسب است كه ميخواهيد گروهي از اشياء را به يك آرايه تخصيص دهيد و سپس از متد هر يك از آنها را استفاده كنيد. اين اشياء الزاما نبايد از يك نوع شيء باشند. هرچند اگر اين اشياء بواسطه ارثبري به يكديگر مرتبت باشند، ميتوان آنها را بعنوان انواع ارثبري شده به آرايه اضافه نمود. اگر هر يك از اين اشياء داراي متدي با نام مشترك باشند، آنگاه ميتوان هر يك از آنها را جداگانه پيادهسازي و استفاده نمود. در اين درس با چگونگي انجام اين عمل آشنا ميگرديد.
متد مجازي (Virtual Method)
using System;
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
مثال 1-9 كلاس DrawingObject را نشان ميدهد. اين كلاس ميتواند بعنوان كلاسي پايه چهت كلاسهاي ديگر در نظر گرفته شود. اين كلاس تنها داراي يك متد با نام Draw() ميباشد. اين متد داراي پيشوند virtual است. وجود كلمه virtual بيان ميدارد كه كلاسهاي مشتق شده از اين كلاس ميتوانند، اين متد را override نماييد و آنرا به طريقه دلخواه پيادهسازي كنند.
using System;
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.");
}
http://csharp-persian.netfirms.com/Lesson_9_Polymorphism_In_C_Sharp.htm
Flow layout panel control
In some applications, you need to add controls dynamically to the form depending
on some condition. In such cases, you need to place the newly added control at
an appropriate location via code. However, this means that you need to carefully
calculate their left and top coordinates depending on surrounding controls.
This can get tricky and tedious at times. To make the problem clear, develop a
form that adds a few buttons dynamically to a GroupBox control. Add a new form to
the project and drag and drop a GroupBox control to it. The GroupBox control is a
container control and can house other controls inside it. Now, add the following
code in the Load event of the form.
private void FlowLayoutDemo_Load(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
Button b = new Button();
b.Text = "Button " + i.ToString();
groupBox1.Controls.Add(b);
}
}
The code above runs a for loop. With each iteration, a new Button is created and
added to the Controls collection of the GroupBox.
all the dynamically added buttons assume the same left and top
coordinates and as a result overlap each other. To arrange all of them, you need
to write code. The FlowLayoutPanel control makes your job easy. See how.
Drag and drop a FlowLayoutPanel control on the same form and add the following code
to the Load event of the form.
private void FlowLayoutDemo_Load(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
Button b = new Button();
b.Text = "Button " + i.ToString();
groupBox1.Controls.Add(b);
}
for (int i = 0; i < 5; i++)
{
Button b = new Button();
b.Text = "Button " + i.ToString();
flowLayoutPanel1.Controls.Add(b);
}
}
The code adds another for loop. This time, the new for loop adds buttons to
FlowLayoutPanel control. If you run the form, you will observe that buttons
added to FlowLayoutPanel automatically get arranged one after the other .
The FlowLayoutPanel control has a property called FlowDirection that governs the
direction in which the child controls are arranged. The FlowDirection property has
four possible values: LeftToRight, TopDown, RightToLeft, and BottomUp.
The WrapContents boolean property governs whether the contents of FlowLayoutPanel
will be wrapped or clipped depending on the FlowLayoutPanel width.
TableLayoutPanel control
The FlowLayoutPanel control arranges child controls in a flow;
in other words, one beside other. At times, however, you need
the ability to place controls in a tabular fashion.
That is where the TableLayoutPanel control comes into the picture.
The TableLayoutPanel control consists of rows and columns.
You can place a control in a specific row and column.
To see how TableLayoutPanel works, add a new form to the project.
Drag and drop two TableLayoutPanel controls on the form.
Set the AutoSize property of the form and both the
TableLayoutPanel controls to true. Set the GrowStyle property of
the first TableLayoutPanel control to AddRows and that of the
second TableLayoutPanel control to AddColumns. The GrowStyle
property should happen when new controls are added to the
TableLayoutPanel and no cells are available to accommodate them.
The value of AddRows indicates that the TableLayoutPanel control
will add a new row to accommodate additional controls whereas the
value of AddColumns indicates that the TableLayoutPanel control
will add extra columns to accommodate new controls. Now, add the
following code in the Load event of the form.
private void TableLayoutPanelDemo_Load(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
Button b = new Button();
b.Text = "Button " + i.ToString();
TableLayoutPanelCellPosition pos =
new TableLayoutPanelCellPosition(0, i);
tableLayoutPanel1.SetCellPosition(b, pos);
tableLayoutPanel1.Controls.Add(b);
}
for (int i = 0; i < 5; i++)
{
Button b = new Button();
b.Text = "Button " + i.ToString();
tableLayoutPanel2.Controls.Add(b);
}
}