Everything & Nothing

۱ مطلب با موضوع «برنامه نویسی» ثبت شده است

۱۴ مرداد ۹۲ ، ۲۳:۳۰

برنامه نویسی شی گرا


برنامه‌نویسی شیءگرا (Object-Oriented Programming مخفف OOP)

یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی اجزای آن،شی ها می باشند

برنامه نویسی شی گرا توسط آلن کی Alan Kay طراحی شده یعنی اولین قدمهای این سبک برنامه نویسی توسط آلن کی برداشته شده است. اولین زبان شی گرا توسط آلن کی طراحی شد. اسم این زبان Small Talk است. و جرقه ی این ذهنیت بر اساس نحوه عملکرد سلول های زیست محیطی بوده است

شرحی از نحوه زندگی سلولها :
هر سلول نمونه ای از اصل است و هر خصوصیاتی که دارد از اصل خود به ارث برده.(ژنتیک سلول). همچنین هر سلول رفتارهایی دارد که از اصل خود به ارث برده.
سلولها همگی مستقل از هم زندگی می کنند و براساس ارسال پیام های شیمیایی با یکدیگر ارتباط برقرار می کنند. ارسال پیام به این صورت است که پیام از پوسته یکی خارج و به پوسته دیگری وارد می شود.
سلولها می توانند از یکدیگر متمایز شوند.

پس:

هر شی از یک کلاسی تشکیل شده که ویژگی های آن کلاس رو با خودش به ارث برده است.
همانطور که می دانیم اشیا با یکدیگر ارتباط برقرار می کنند. نحوه ارتباط یا فرستادن پیام در اشیا هنگام فراخوانی رفتارها در یک رویداد است.
هر شی خودش یک شناسنامه یا Identifier دارد که ویژگی های آن شی را بیان می کند.

اصول اولیه ای که آلن کی برای برنامه نویسی شی گرا تعیین کرده بود اینها هستن:

هر چیزی یک شی است.
هر برنامه ای شامل اشیا هست که اشیا با ارسال پیام به یکدیگر تعیین می کنند که چه کاری باید الان انجام بشود.
هر شی یک حافظه Memory برای خودش دارد که بتوان به وسیله آن اشیای دیگر را ساخت.
هر شی خودش از یک کلاس Class هست.

شئی گرایی در زبان ++C

همه زبان های برنامه نویسی شی گرا در سه چیز مشترک هستند : کپسوله سازی (Encapsulation)‏ ، چند ریختی (Polymorphism) و وراثت (Inheritance).

کپسوله سازی (Encapsulation)‏

عبارت برنامه (کد) + داده ها = به وجود آمدن یک شی

(من برای راحت تر هضم شدن مطلب، برای کد و داده یک نشانه گذاشتم

عبارت برنامه = فرمول های ریاضی میباشند ، داده ها = اعداد ما میباشند)

که یک شی ابزاری است که از کپسوله سازی پشتیبانی میکند .

شی ممکن است محلی (خصوصی private ) یا عمومی ( public ) باشد .

شی محلی : برای قطعه ای از برنامه که خارج از شی است قابل دسترسی نمی باشد.

شی عمومی : بخش های دیگری از برنامه نیز ممکن است به آنها دسترسی داشته باشند.

چند ریختی (Polymorphism)

مفهوم چندریختی اغلب توسط عبارت "یک رابط چندین روشی" بیان می شود.

در اینجا هم به یک نشانه دیگر برای فهم مطلب میپردازم

بیس راه اندازهی ماشین رو در نظر بگیرید ...اما می توان از این ساختار یک بنز طراحی کرد یا یک ژیان

پس تفاوت در متد ها = چند ریختی میشود .

وراثت (Inheritance)

وراثت عملی است که یک شی می تواند مشخصه های شی دیگری را به دست آورد.

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

بنابراین مکانیزم وراثت به یک شی امکان می دهد تا نمونه خاص از یک حالت عمومی تر باشد.

شی گرایی در زبان #C

شی گرایی (oop) در #C بر چند پایه استوار است که به قرار زیرند:

وراثت (Inheritance)
کپسوله سازی (Encapsulation)‏
چند ریختی (Polymorphism)
تجرید، انتزاع (Abstraction)
رابط (Interface)

اکنون به توضیح مختصر هر یک می پردازیم:

وراثت (Inheritance)

پدر و فرزندی را در نظر بگیرید . هر پدری مشخصات فردی به خصوصی دارد . فرزند وی می تواند همه خصوصیات او را به ارث برد و خصوصیتهای دیگری نیز داشته باشد که پدرش ندارد . این یعنی ارث بری !

قابلیت استفاده دوباره از کد (Reusability) یکی از مزیات اصلی ارث بری است.

کپسوله سازی (Encapsulation)‏


در #C برای کپسوله کردن از Access Modifier های Private ، Protected ، Public استفاده شود.

هدف Encapsulationاین است که ما را از پرداختن به ریز موضوعات رها کند.

چند ریختی (Polymorphism)

به توضیح بالا مراجعه شود !!

تجرید، انتزاع (Abstraction)

باز هم اول با مثالی غیر برنامه نویسی شروع میکنم:

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

برای مثال ، وجه مشترک دوستان ما انسانیت است در صورتی که قد و وزن و .. با یکدیگر متفاوت است

پس مفهوم انسانیت از آنها انتزاع شده است.

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

برای تعریف یک کلاس مجرد از کلمه کلیدی abstract استفاده می کنیم.

رابط (Interface)


اینترفیس در برنامه نویسی همانند همان کلاس است تنها با این تفاوت که هیچکدام از اعضای آن پیاده سازی نمی شوند . در واقع یک اینترفیس گروهی از متدها ، خصوصیات ، رویدادها و Indexer ها هستند که در کنار هم جمع شده اند. اینترفیس ها را نمی توان Instantiate (وهله سازی) کرد (یعنی نمی توان وهله ای از یک اینترفیس ایجاد کرد !) . تناه چیزی که اینترفیس دارا می باشد امضای (signature) تمامی اعضای آن می باشد. به ای معنی که ورودی و خروجی متدها ، نوع property ها و ... در آن تعریف می شوند ولی چیزی پیاده سازی نمی شود. اینترفیس ها سازنده و فیلد ندارد. یک اینترفیس نمی تواند Operator Overload داشته باشد و دلیل آن این است که در صورت و جود ویژگی ، احتمال بروز مشکلاتی از قبیل ناسازگازی با دیگر زبانهای .Net مانند VB.Net که از این قابلیت پشتیبانی نمی کند وجود داشت. نحوه تعریف اینترفیس بسیار شبیه تعریف کلاس است تنها با این تفاوت که در اینترفیس پیاده سازی وجود ندارد.

mahnaz hayati