PDA

نسخه کامل مشاهده نسخه کامل : چرا شیئ گرایی



subrosa
18-04-2007, 11:56
سلام
یه سوال داشتم اینکه اصلا چرا به برنامه نویسی شیئ گرا رو آوردند ، اولین بار چه کسی این کارو کرد؟ (ایده ی چه کسی بود؟ ) چه زمانی این اتفاق افتاد؟

someone
18-04-2007, 18:56
سلام.
میتونید به لینکه های زیر مراجعه کنین.
هر دو از Wikipedia هستن که اولی مفصلا در موردش صحبت کرده :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] 6%D9%88%DB%8C%D8%B3%DB%8C_%D8%B4%DB%8C%E2%80%8C%DA %AF%D8%B1%D8%A7

paranoid_android
18-04-2007, 19:19
با تشکر از someone عزیز، مطالب جالبی در مورد OOP بود. به نظرم مفیدترین بخش اون ، متن زیر از این مقاله ست:


Object-oriented programming came into existence because human consciousness, understanding and logic are highly object-oriented. By way of "objectifying" software modules, it is intended to promote greater flexibility and maintainability in programming, and is widely popular in large-scale software engineering. By virtue of its strong emphasis on modularity, object oriented code is intended to be simpler to develop and easier to understand later on, lending itself to more direct analysis, coding, and understanding of complex situations and procedures than less modular programming methods

dr.b4ne
26-01-2012, 23:35
سلام
یه سوال داشتم اینکه اصلا چرا به برنامه نویسی شیئ گرا رو آوردند ، اولین بار چه کسی این کارو کرد؟ (ایده ی چه کسی بود؟ ) چه زمانی این اتفاق افتاد؟

شی گرا Object Oriented
شیء گرایی (Object-Oriented) لغتی است که امروزه در صنعت نرم افزار باب شده است. شرکتها به سرعت حرکت می کنند تا خود را با این تکنولوژی سازگار کنند و آن را در برنامه های موجود خود وارد نمایند. در حقیقت بیشتر برنامه ها امروزه با شی گرایی توسعه می یابند.
متد شیء گرایی یک راه متفاوت مشاهده برنامه هاست. با متد شیء گرایی شما یک برنامه را به قطعات بسیار کوچک یا آبجکتهایی تقسیم می کنید که تا اندازه ای مستقل از یکدیگر می باشند. به آن مانند ساختمانی از بلوکها نگاه کنید. به محض اینکه تعدادی آبجکتهای اساسی را در دنیای کامپیوتر ساختید یا بدست آوردید میتوانید به سادگی آنها را کنار هم بگذارید تا برنامه های جدید را ایجاد نمائید.
تعریف :
یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی تشکیل دهنده برنامه‌ها در آنها اشیا هستند.اشیاء صورت‌های مجرد از ماهیت‌های مطرح در مسئله هستند که دارای وضعیت (درونی) و همچنین عملیات بر روی داده‌ها (وضعیت درونی) می‌باشند.
یکی از امتیازات اساسی متد شیء گرایی این است که می توانید یکبار اجزاء را ساخته و بارها و بارها استفاده کنید. یک بلاک ساختمان را می توانید در یک خانه یا یک قصر یا یک سفینه فضایی دوباره استفاده کنید. همچنین می توانید از یک قطعه طرح یا کد شیء گرایی در یک سیستم حسابداری، یک سیستم بازرگانی یا یک سیستم پردازش سفارش استفاده مجدد نمائید.
تفاوت متد شیء گرایی با روش سنتی توسعه چیست ؟
در روش سنتی روش توسعه به همراه اطلاعاتی که سیستم نگهداری خواهد کرد به خودمان وابسته است. در این روش ما از کاربران می پرسیم که چه اطلاعاتی را نیاز دارند. پایگاه داده ای را طراحی می کنیم که اطلاعات را نگه دارد. صفحاتی را تهیه می کنیم که اطلاعات را بگیرد و گزارشاتی را چاپ می کنیم تا اطلاعات را برای کاربران نمایش دهد.
به عبارت دیگر ما بر روی اطلاعات متمرکز می شویم و کمتر توجه می کنیم که چه کاری با اطلاعات انجام شده است یا رفتار سیستم چگونه است؟
این روش Data Senteric یا مبتنی بر داده نامیده شده است و برای ایجاد سیستمهای زیادی تا کنون استفاده شده است.
یک چالش بسیار بزرگ که روش مبتنی بر داده با آن روبرو می شود این است که درخواستهای سیستمها معمولا چندین بار تغییر می نماید. این سیستمها تغییرات در پایگاه داده را به آسانی پوشش می دهند ولی تغییرات در رفتار سیستم را به آسانی نمی توانند پوشش دهند. متد شیء گرایی در پاسخ به این مشکل ایجاد شده است. با متد شیء گرایی هم بر اطلاعات و هم بر رفتار متمرکز می شویم. در نتیجه اکنون می توانیم سیستم هایی را ایجاد نماییم که انعطاف پذیر شده اند تا اطلاعات یا رفتار را تغییر دهند.
مشاهده و درک این انعطاف پذیری با شناخت تعدادی از اصول شیء گرایی نمایان خواهد شد: نهان سازی یا Encapsulation - وراثت یا Inheritance و چند ریختی یا Polymorphism
مزایای شی گرایی
شی گرایی در دنیای برنامه نویسی هم به همین صورت است. برنامه نویس در طول کار خود اشیای مورد نیاز خود را ایجاد میکند و یا از اشیای آماده ای که توسط برنامه نویسان دیگر ایجاد شده است استفاده میکند — تا با در کنار هم قرار دادن آن ها برنامه ای را به وجود آورد که از اشیای مختلفی تشکیل شده است. این روش مزیت های زیادی دارد که در زیر چند نمونه از اصلی ترین آن ها را با هم مرور میکنیم:
بهینه شدن ساختار برنامه :
شی گرایی باعث تولید برنامه های ساخت یافته تری می شود که امکان تغییر و توسعه در برنامه را ساده تر میکند. مثال: اگر بخواهید قسمت خاصی از برنامه را تغییر دهید، دیگر لازم نیست تمام کدهای برنامه را ویرایش کنید چون می دانید که تغییرات شما فقط در همان قسمت مد نظرتان اعمال میشود و خللی در کار قسمت های دیگر به وجود نمی آید.
استفاده مجدد از کدها :
وقتی شما یک شی جدید را خلق میکنید میتوانید تا مدت ها از آن استفاده کنید و یا آن را با دیگران به اشتراک بگذارید. این مزیت هنگام ساخت کتابخانه های شی گرا بسیار کارآمد است. مثال: یک دوچرخه می تواند تا مدت زمان زیادی به شما سواری دهد. تازه میتوانید برای سواری آن را به دوستانتان هم قرض بدهید.
کپسوله سازی :
در برنامه نویسی هر چه اشیای تشکیل دهنده ی یک برنامه از طرز کار یکدیگر بی خبرتر باشند، برنامه شما ساختار بهتری پیدا خواهد کرد زیرا در این شرایط اشیا در کار یکدیگر دخالت نمی کنند؛ با استفاده از شی گرایی قسمت های مختلف برنامه ی شما از نحوه ی کار همدیگر بی خبرند و این مساله در حالی اتفاق می افتد که شما به عنوان برنامه نویس از طرز کار آن ها اطلاع دارید. مثال: یک نجار می داند که فرو رفتن میخ در چوب، به خاطر نوک تیز آن است. اما چکشی که روی میخ می کوبد از نحوه ی فرو رفتن میخ در چوب بی خبر است. وظیفه ی چکش فقط کوبیدن میخ است. در حقیقت وظیفه ی چکش فقط کوبیدن است، یک کوبیدن خالص! یعنی بهتر است که چکش حتی از شی ای که به آن نیرو وارد می کند هم بی خبر بماند. به زبان دیگر چکش فقط باید ضربه بزند، این که شی ضرب دیده میخ باشد یا دیوار، دیگر در حیطه ی معلومات چکش نمی گنجد!
وراثت :
این قابلیت دقیقا متناسب با نامش عمل میکند. یعنی اگر یک شی "الف" از شی "ب" ارث ببرد، یک سری از خصوصیات شی "ب" به شی "الف" وارد می شود. در برنامه نویسی به شی "الف" فرزند، و به شی "ب" والد گفته می شود.
تاریخچه شی گرایی :
دیدگاه شی گرایی (Object Oriented) از اواسط دهه 1970 تا اواخر 1980 در حال مطرح شدن بود.
در این دوران تلاشهای زیادی برای ایجاد روشهای تحلیل و طراحی شی گرا صورت پذیرفت. در نتیجه این تلاشها بود که در طول 5 سال یعنی 1989تا 1994 ، تعداد متدلوژیهای شی گرا از کمتر از 10 متدلوژی به بیش از 50 متدلوژی رسید. تکثیر متدلوژیها و زبانهای شی گرایی و رقابت بین اینها به حدی بود که این دوران به عنوان "جنگ متدلوژیها " لقب گرفت. از جمله متدلوژیهای پر کاربرد آن زمان می توان ازShlayer- Mellor ، Coad-yourdan ، Fusion ،OMT ،OOSE ، Booch و غیره نام برد. فروانی و اشباع متدلوژیها و روشهای شی گرایی و نیز نبودن یک زبان مدلسازی استاندارد ، باعث مشکلات فروانی شده بود . از یک طرف کاربران از متدلوژیهای موجود خسته شده بودند ، زیرا مجبور بودند از میان روشهای مختلف شبیه به هم که تفاوت کمی در قدرت و قابلیت داشتند یکی را انتخاب کنند . بسیاری از این روشها ، مفاهیم مشترک شی گرایی را در قالبهای مختلف بیان می کردند که این واگرایی و نبودن توافق میان این زبانها ، کاربران تازه کار را از دنیای شی گرایی زده می کرد و آنها را از این حیطه دور می ساخت . عدم وجود یک زبان استاندارد ، برای فروشندگان محصولات نرم افزاری نیز مشکلات زیادی ایجاد کرده بود.
پیدایش شی گرایی
برنامه نویسی شی گرا در اوایل دهه ۱۹۷۰ توسط آلن کی Alan Kay طراحی شده یعنی اولین قدمهای این سبک برنامه نویسی توسط آلن کی برداشته شده است. اولین زبان شی گرا توسط آلن کی طراحی شد. اسم این زبان Small Talk است.
آلن کی گفته بود که : آن چیزی که باعث شد این فکر به ذهنم برسد نحوه عملکرد سلولهای زیست محیطی بود. یعنی این سبک برنامه نویسی از روی سلولهای جاندارها الگو برداری شده است.
آن چیزی که باعث شد که آلن کی از روی سلول های جانداران الگو برداری کند نحوه زندگی سلولها بود:
* هر سلول نمونه ای از اصل است و هر خصوصیاتی که دارد از اصل خود به ارث برده.(ژنتیک سلول). همچنین هر سلول رفتارهایی دارد که از اصل خود به ارث برده.
* سلولها همگی مستقل از هم زندگی می کنند و براساس ارسال پیام های شیمیایی با یکدیگر ارتباط برقرار می کنند. ارسال پیام به این صورت است که پیام از پوسته یکی خارج و به پوسته دیگری وارد می شود.
* سلولها می توانند از یکدیگر متمایز شوند.
با توجه به گفته های بالا
می توان متوجه شد که همان مشخصه کلاسها رو بیان می کند یعنی هر شی از یک کلاسی تشکیل شده که ویژگی های آن کلاس رو با خودش به ارث برده است.
همانطور که می دانیم اشیا با یکدیگر ارتباط برقرار می کنند. نحوه ارتباط یا فرستادن پیام در اشیا هنگام فراخوانی رفتارها در یک رویداد است.
هر شی خودش یک شناسنامه یا Identifier دارد که ویژگی های آن شی را بیان می کند.
Small Talk مانند سلولهای جانداری عمل می کند. یعنی آلن کی در تمامی قسمتهای این زبان تعیین کرده بود که اشیا با هم ارتباط برقرار می کنند و دارای شناسنامه ای هستند و همچنین مستقل از همدیگر کار می کنند.

اصول اولیه ای که آلن کی برای برنامه نویسی شی گرا تعیین کرده بود اینها هستن:
* هر چیزی یک شی است.
* هر برنامه ای شامل اشیا هست که اشیا با ارسال پیام به یکدیگر تعیین می کنند که چه کاری باید الان انجام بشود.
* هر شی یک حافظه Memory برای خودش دارد که بتوان به وسیله آن اشیای دیگر را ساخت.
* هر شی خودش از یک کلاس Class هست.
ارکان شی گرا:
Object:
تعریف عمومی:
در دنیای واقعی هر مفهوم مادی یا معنایی را شی می گوییم
تعریف در حوزه شی گرایی:
الف - یک شی یک نمونه از یک کلاس است
ب - یک شی متشکل از سه مولفه است
Attribute-1 یکتا یی که آن شی را از سایر اشیا متمایز می کند . مثل : کد کتاب , شماره State-2 مجموعه مقادیری که آن شی را مشخص می کند Behavioure-3 می گویند مجموعه عملهای قابل اعمال روی شی را رفتار شی
انواع ارتباط اشیا :
بین اشیا سه گونه رابطه هست
یک به یک : خیلی کم هستند
یک به چند : خیلی مهم هستند . مطرح ترین نوع رابطه به شمار می آیند
چند به چند : حضورشان در سیستم کامپیوتری ممنوع است
: Class کلاس
تعریف بصورت عام یک مجموعه همگون از اشیا به لحاظ ساختار و رفتار کلاس روشی برای بسته بندی نوع داده مجرد است . در کلاس امکان بسته بندی و محصور کردن (Encapsulation) مجموعه ای از داده ها است . روال های پردازش کننده این داده ها را به صورت یک بسته فراهم می کند.
داده های داخل یک کلاس به وسیله کلاس محافظت می گردد. به گونه ای که پردازش داده های خصوصی یک کلاس از طریق روال های دخلی آن امکان پذیر است . داده های یک کلاس را متغیرهای کلاس و روال های آن را روش نامیده اند.
برای مثال کلاس انسان ها یک کلاس قابل تعریف است. در این کلاس خصوصیات مشترک انسانها تعریف می گردد و هیچ انسان خاصی را نشان نمی دهد. کلاس یک نوع است. همانگونه که مثلا int یک نوع است.
عملیات محاسباتی (یا غیر محاسباتی) بر روی نوع داده انجام نمی شود. بلکه این عملیات بر روی متغیرهایی که از این نوع داده تعریف می گردد انجام می شود. به طور مشابه عملیات محاسباتی (یا غیر محاسباتی) روی کلاس انجام نمی شود.

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

انتزاع:
به آن چیزی می گویند که شما در مورد آن فکر می کنید و در یک دید کلی مطرح می کنید. مثلاً وقتی به یک دانه شن فکر می کنید ناخوداگاه فکرتان به سمت ساحل می رود یا وقتی به یک درخت فکر می کنید ذهنتان به سمت جنگل متمرکز می شود. به این انتزاع می گویند که در این سبک برنامه نویسی مطرح می شود که اشیا با توجه به کلاس های خودشان ساخته می شوند که خود کلاس ها ممکن است که از کلاسهای دیگری مشتق شده باشند.
یک مثال کاربردی
در اطراف ما اشیاء زیادی وجود دارد و می‌توان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. مثلاً یک ماشین باربری. این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشیاء در آن و.... این ماشین در صورتی که ما پدال گاز آن را فشار دهیم، حرکت می‌کند. در صورتی که فرمان آن را بچرخانیم تغییر مسیر می‌دهد. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان می‌دهد. ولی فقط این یک ماشین نیست که این کار را انجام می‌دهد. تمامی ماشین‌ها این کارها را انجام می‌دهند. پس می‌توانیم این ماشین را 'تعریف' کنیم و بگوییم:
ماشین باربری وسیله‌ای است که چهار چرخ، یک گاز، یک ترمز، یک فرمان و یک محل برای حمل بار دارد و اگر پدال گاز آن فشار داده شود حرکت می‌کند. این تعریف این ماشین است ولی خود آن نیست. هر زمانی چنین ماشینی بخواهیم به کارخانه تولید آن می‌رویم و از فروشندگان می‌خواهیم تا با توجه به این تعریف یک ماشین به ما بدهند.
برنامه نویسی شی گرا چیست؟
از آنجا که اساس تکوین C++ برنامه نویسی شی گرا است. پس مهم است که تعریف دقیقی را از برنامه نویسی شی گرا ارائه دهیم . شی گرا از بهترین مفاهیم برنامه سازی ساخت یافته بوجود آمده است و با چندین مفهوم قوی ترکیب شده که امکان سازماندهی برنامه ها را به طور کارآمد را فراهم می کند.
به طور کلی هنگامی که در حالتی شی گرا نیز برنامه می نویسید مساله را به بخش های تشکیل دهنده آن تجزیه می کنید. هر مولفه ای یک شی خود ظرف می شود که شامل دستورالعملهای خودش و داده های مرتبط با آن شی است . از طریق این عملیات پیچیدگی کاهش یافته و می توان برنامه های بزرگ را مدیریت کرد . همه زبان های برنامه نویسی شی گرا در سه چیز مشترک هستند : کپسوله سازی ، چند ریختی و وراثت. که در زیر اشاره مختصری به هریک از آنها می کنیم.
کپسوله سازی
همانطور که می دانید تمام برنامه ها از دو عنصر اصلی تشکیل می شوند : عبارت برنامه (کد) و داده ها . کد بخشی از برنامه است کد عملیات را اجرا می کند و داده ها اطلاعاتی است که توسط این عملیات تحت تاثیر قرار گرفته . کپسوله سازی یک مکانیزم برنامه نویسی است که کد و داده ها را با هم در یک جا قرار داده و هر دو را از استفاده نادرست و تداخل خارجی ایمن نگه می دارد .
در یک زبان شی گرا ، کد و داده ممکن است با هم در چنین روش محدود شوند که یک جعبه سیاه خود ظرف را ایجاد می کند . درون جعبه تمام داده های مورد نیاز و کد است . هنگامی که در این روش کد و داده ها با هم پیوند برقرار می کنند یک شی به وجود می آید . به عبارت دیگر یک شی ابزاری است که ازکپسوله سازی پشتیبانی می کند.
درون یک شی (کد وداده ها) یا هردو ممکن است برای آن شی محلی خصوصی(Private) یا عمومی (Public) باشند.کد یا داده های محلی فقط توسط بخش دیگری از شی شناخته شده و قابل دست یابی هستند.
به همین دلیل کد یا داده محلی برای قطعه ای از برنامه که خارج از شی است قابل دسترس نمی باشد . هنگامی که کد یا داده ها عمومی هستند بخش ها دیگری از برنامه ممکن است به آنها دسترسی داشته باشند حتی اگر درون شی تعریف شده باشند بخش های عمومی یک شی برای ارائه یک ارتباط کنترل شده با عناصر محلی شی مورد استفاده قرار می گیرند.
چند ریختی
چند ریختی کمیتی است که به یک رابط امکان می دهد تا برای یک کلاس عمومی از عملیات مورد استفاده قرار می گیرد . عمل خاص توسط ذات حقیقی شی تعیین می شود.به عنوان مثال یک پشته را در نظر بگیرید . ممکن است برنامه ای داشته باشید که نیاز به سه نوع مختلف پشته داشته باشید یک پشته برای مقادیر صحیح ،یک پشته برای اعداد اعشاری و یک پشته برای کاراکترها مورد استفاده قرار می گیرد.در این صورت الگوریتمی که هر سه پشته را پیاده می کند یکسان است حتی اگر داده هایی که در آنها ذخیره می شود متفاوت باشند . در یک زبان غیر شی گرا نیاز خواهید داشت تا سه نوع مختلف از روال های پشته را ایجاد کرده . به هر کدام نام متفاوتی قرار داده و برای هر کدام از روابط خاص خودش استفاده کنید . به دلیل وجود چند ریختی در C++ می توانید یک مجموعه روال عمومی از پشته ایجاد کرده وآن را برای هر سه نوع به کار ببرید.
به طور کلی مفهوم چندریختی اغلب توسط عبارت "یک رابط چندین روشی" بیان می شود . این بدین معنی است که امکان طراحی یک رابط عمومی برای گروهی از عملیات مرتبط وجود دارد.
چند ریختی با اعمال رابط یکسانی که برای تعیین یک کلاس عمومی مورد استفاده قرار می گیرد . به کاهش پیچیدگی کمک می کند . این است وظیفه کامپایلر تا فعالیت خاصی (مثل متد) را برای اعمال روی آن انتخاب کند . شما به عنوان برنامه نویس نیاز ندارید تا این انتخاب را انجام دهید شما فقط نیاز دارید روابط عمومی را به خاطر سپرده و استفاده کنید.
زبان های برنامه نویسی شی گرای اولیه چون به صورت مفسری بودند از چند ریختی در زمان اجرا پشتیبانی می کردند. ولی چون C++ کامپایلری است پس هم در زمان اجرا و هم در زمان کامپایل از چند ریختی پشتیبانی می کند.
وراثت
وراثت عملی است که یک شی می تواند مشخصه های شی دیگری را به دست آورد. به همین دلیل از مفهوم دسته بندی سلسه مراتبی پشتیبانی می کند.
بدون استفاده از وراثت هر شی به طور مجزا بایستی تمام مشخصه های خودش را تعریف کند . با استفاده از وراثت شی فقط نیاز به تعریف مشخصه هایی دارد که در داخل آن کلاس منحصر به فرد هستند . این سبب می شود که صفات عمومی را از پدرشان به ارث ببرند.
بنابراین مکانیزم وراثت به یک شی امکان می دهد تا نمونه خاص از یک حالت عمومی تر باشد.
شی گرایی در زبان C#
شی گرایی (oop) در C# بر چند پایه استوار است که به قرار زیرند:
*Inheritance
*Encapsulation
*Polymorphism
*Abstraction
*Interface
اکنون به توضیح مختصر هر یک می پردازیم:
Inheritance ارث بری
پدر و فرزندی را در نظر بگیرید . هر پدری مشخصات فردی به خصوصی دارد . فرزند وی می تواند همه خصوصیات او را به ارث برد و خصوصیتهای دیگری نیز داشته باشد که پدرش ندارد . این یعنی ارث بری !
در برنامه نویسی شی گرا از مفهوم ارث بری استفاده های زیادی می شود . قابلیت استفاده دوباره از کد (Reusability) یکی از مزیات اصلی ارث بری است.
Encapsulation
همانطور که از اسمش پیداست ، به قرار دادن پیاده سازی در یک کپسول اشاره می کند ، به طوری که کاربر بیرونی از نحوه پیاده سازی مطلع نباشد و فقط بداند که این کپسول کار خاصی را انجام می دهد.
هدف Encapsulationاین است که ما را از پرداختن به ریز موضوعات رها کند و اشیا را به صورت یک جعبه سیاهی بدانیم که به ازای یک ورودی خاص خروجی خاصی می دهند .
در C# برای کپسوله کردن از Access Modifier های Private ، Protected ، Public استفاده شود.
Polymorphism
فرض کنید پدر شما کار خاصی را به طریق خاصی انجام می دهد . مثلا برای پختن غذا اول ظرفهای دیشب را شسته و بعد گاز را روشن می کند و بعد غذا را می پزد! شما که خصوصیات پدر و کارهای او را به ارث می برید برای مثال برای پختن غذا ابتدا گاز را روشن می کنید بعد کبریت می کشید،غذا را می پزید و بعد ظرفهای دیشب را می شویید! پختن غذا کاری است که شما از پدر خود به ارث می برید ، ولی آن را به طریق دیگری انجام می دهید . یعنی یک کار توسط فرزندان مختلف یک پدر به طرق مختلفی انجام می شود . این دقیقا همان چیزی است که به آن چند شکلی یا Polymorphismمی گویند.
Abstraction
تجرید یا مجرد سازی ! به کلاسی مجرد گفته می شود که پیاده سازی متدها در آن انجام نمی شود. فرض می کنیم که شما رئیس یک شرکت بزرگ برنامه نویسی هستید و می خواهید پروژه بزرگی را انجام دهید. برای اجرای پروژه از برنامه نویسان مختلفی استفاده می کنید که ممکن است همه آنها هموطن نباشند! مثلا هندی ، ایرانی یا آلمانی باشند! اگر قرار باشد هر برنامه نویسی در نامگذاری متدها و کلاسهایش آزاد باشد ، در کد نویسی هرج ومرج به وجود می آید . شما به عنوان مدیر پروژه ، کلاسی تعریف می کنید که در آن تمام متدها با ورودی و خروجی هایشان مشخص با شند . ولی این متدها را پیاده سازی نمی کنید و کار پیاده سازی را به برنامه نویسان می دهید و از آنها می خواهید که همه کلاسهایی که می نویسند از این کلاس شما به ارث ببرند و متدها را به طور دلخواه پیاده سازی کنند . این باعث می شود که با داشتن یک کلاس ، ورودی و خروجی های مورد نظر خود را داشته باشید و دیگر نگران برنامه نویسان نباشید. کلاسی که شما تعریف می کنید یک کلاس مجرد نامیده می شود.
برای تعریف یک کلاس مجرد از کلمه کلیدی abstract استفاده می کنیم. فیلدهایی که می خواهیم در کلاس های مشتق شده از این کلاس پیاده سازی شوند حتما باید با abstract تعریف شوند . یک کلاس مجرد می تواند فیلدها و متدهای نا مجرد داشته باشد.اگر متد نا مجردی در یک کلاس مجرد تعریف کردید، حتما باید آن را پیاده سازی کنید و نمی توانید پیاده سازی آن را به کلاسهای مشتق شده بسپارید.
Interface
اینترفیس در برنامه نویسی همانند همان کلاس است تنها با این تفاوت که هیچکدام از اعضای آن پیاده سازی نمی شوند . در واقع یک اینترفیس گروهی از متدها ، خصوصیات ، رویدادها و Indexer ها هستند که در کنار هم جمع شده اند. اینترفیس ها را نمی توان Instantiate (وهله سازی) کرد (یعنی نمی توان وهله ای از یک اینترفیس ایجاد کرد !) . تناه چیزی که اینترفیس دارا می باشد امضای (signature) تمامی اعضای آن می باشد. به ای معنی که ورودی و خروجی متدها ، نوع property ها و ... در آن تعریف می شوند ولی چیزی پیاده سازی نمی شود. اینترفیس ها سازنده و فیلد ندارد. یک اینترفیس نمی تواند Operator Overload داشته باشد و دلیل آن این است که در صورت و جود ویژگی ، احتمال بروز مشکلاتی از قبیل ناسازگازی با دیگر زبانهای .Net مانند VB.Net که از این قابلیت پشتیبانی نمی کند وجود داشت. نحوه تعریف اینترفیس بسیار شبیه تعریف کلاس است تنها با این تفاوت که در اینترفیس پیاده سازی وجود ندارد.

. . .
شی گرایی یعنی دنیایی از نظم و طبقه بندی و مدیریت مجتمع و . . . که البته گاهی هم نظم زیاد دردسر ایجاد میکند !!!!