پرش به محتوا

تفاوت میان نسخه‌های «برنامه‌نویسی شیءگرا»

جز
(اصللح اشتباه نگارشی)
برچسب‌ها: ویرایش با تلفن همراه ویرایش با مرورگر تلفن همراه
{{شیوه‌های برنامه‌نویسی}}
 
'''برنامه‌نویسی شی‌گرا''' (به [[زبان انگلیسی|انگلیسی]] ''Object-Oriented Programming'' مخفف:OOP) یک شیوه برنامه‌نویسی است که ساختار یا بلوک اصلی اجزای آن، [[شی (علوم رایانه)|شی‌ها]] می‌باشند. در واقع در این شیوه برنامه نویسی،برنامه‌نویسی، برنامه به شی گرایش پیدا می‌کند. به این معنا که [[داده‌ها]] و توابعی که قرار است بر روی این داده‌ها عمل کنند، تا حد امکان در قالبی به نام شی در کنار یکدیگر قرار گرفته، جمع‌بندی شده و یک واحد (شی) را تشکیل داده و نسبت به محیط بیرونِ خود، [[کپسوله‌سازی (علم رایانه)|کپسوله]] می‌شوند و از این طریق، توابع بیگانهٔ خارج از آن شی، دیگر امکان ایجاد تغییر در داده‌های درون آن شی را ندارند. به‌طور مثال [[حساب بانکی]] شما که شامل مشخصات فردی شما و میزان سپردهٔ شما در بانک است، تشکیل یک شی را می‌دهند و به دلیل دارا بودن ویژگی کپسوله، امکان دستکاری در میزان سپرده یا مشخصات شما، توسط دیگران وجود ندارد.<ref>http://de.wikipedia.org/wiki/Objektorientierte_Programmierung</ref> از دیگر ویژگی‌های برنامه‌نویسی شی گرا، پیچیدگی کم، هزینه کم، امکان گسترش سریع برنامه با خطای کمتر نسبت به سایر پارادایم‌های برنامه‌نویسی است.
 
فلسفه‌ای که منجر به شکل‌گیری ی زبان‌های شی گرا شد، عبارت بود از این واقعیت که نحوهٔ عملکرد مغز و شیوهٔ دریافت اطلاعات از محیط پیرامون و پردازش آن اطلاعات (اندیشیدن)، شیوه‌ای شی گراست، از همین روی می‌بایستی زبانی تعریف می‌شد که همین شیوه را مبنای کار خود قرار داده و بازتولید می‌کرد؛ و دقیقاً به همان شکل که اشیا در جهان خارج، دارای هویت و کارکرد مشخص و یگانه برای خود هستند و در عین حال با دیگر اشیا در ارتباطی تنگاتنگ و مستقیم اند، در [[زبان‌های برنامه نویسیبرنامه‌نویسی]] نیز می‌بایستی این اصول کلی برقرار می‌شد.<ref>Christian Ullenboom, Java ist auch eine Insel, 10. Auflage, ISBN 383621802X3-8362-1802-X</ref> تا به این شکل، برنامه نویسبرنامه‌نویس بتواند با بهره‌گیری از زبانی که به روش اندیشیدنش، نزدیکی بیشتری دارد، شی‌های مختلفی را تعریف نموده، این شی‌ها را در ارتباط با یکدیگر قرار داده و از شی‌های پویای تولید شده برای [[حل مسئله]] ی پیش روی استفاده نماید. امروزه اکثر [[زبان‌های دستوری]] برنامه‌نویسی از فنون شی‌گرایی پشتیبانی می‌کنند. زبانهایی مانند [[جاوا (زبان برنامه نویسیبرنامه‌نویسی)|جاوا]]، [[سی++]]، [[سی شارپ]]، [[دلفی (زبان برنامه نویسیبرنامه‌نویسی)|دلفی]] از جمله زبانهای شی‌گرا هستند. حتی بسیاری از [[زبانهای روال گونه]] که ساختار برنامه‌ها در آن‌ها بلوک‌هایی با نام پروسیجر است امروزه از فنون شی‌گرایی نیز پشتبانی می‌کنند. زبانهای [[سی++]] <ref>{{یادکرد کتاب|عنوان=برنامه سازی پیشرفته با ++C|نام خانوادگی=دکتر بابک بشری راد|نام=|ناشر=ناقوس|سال=1394|شابک=۹۷۸-۹۶۴-۳۷۷-۷۴۶-۳|مکان=تهران|صفحات=}}</ref> و [[پی‌اچ‌پی]] از این جمله هستند. هر شیء یک سری خصوصیت و قابلیت دارد، که اصطلاحاً Properties و Operation خوانده می‌شوند. در این پارادایم برنامه نویسی،برنامه‌نویسی، دید برنامه نویسبرنامه‌نویس به سیستم دید شخصی است که سعی می‌نماید با پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آن‌ها سیستم را تولید نماید. (مفهوم مدیریت دیداری)
 
مفاهیم عمده
 
== کلاس ==
کلاس نوع خاصی از [[آرایه (ساختمان داده‌ها)|آرایه]] است که امکان ذخیره و جمع‌بندی تعداد زیادی المان را (که شامل داده‌ها و توابع هستند) برای یک شی جدید فراهم آورده و تحت یک نام مشترک ذخیره می‌کند. اما بر خلاف آرایه که تنها قادر به ذخیرهٔ داده‌هایی هم جنس است، کلاس می‌تواند داده‌هایی از جنس‌های مختلف را ذخیره نماید.<ref name="ReferenceA">Prof. Hanspeter Mössenböck, Sprechen Sie Java?, 3.Auflage, ISBN 389864362X3-89864-362-X</ref> به‌طور مثال در نظر بگیرید که می‌خواهیم تاریخ ۱۳ نوامبر ۲۰۰۶ را که تشکیل شده از روز، ماه و سال است مورد استفاده قرار دهیم. برای این منظور سه نوع متغیر متفاوت مورد نیاز است:
 
<syntaxhighlight lang=Java>
</syntaxhighlight>
 
حال در نظر بگیرید که نه فقط یک تاریخ، بلکه n تاریخ متفاوت مورد نیاز است. این بدان معنی ست که می‌بایستی به تعداد n بار، سه متغیر بالا، جداگانه تعریف شوند و تعریفِ تک تک و پیاپی متغیرها، نه فقط از لحاظ زمانی بسیار وقت گیر می‌نماید، بلکه از لحاظ میزان کد مورد نیاز نیز بسیار غیر عملی ست، چرا که هر بار می‌بایستی نام جدیدی برای متغیرها در نظر گرفته شود (دو متغیر متفاوت نمی‌توانند هم نام باشند). در اینجاست که کلاس‌ها به خوبی وارد عمل می‌شوند. با استفاده از کلاس‌ها می‌توان متغیرهای متعدد را زیر عنوان یک جنسیت مشترک جدید (به‌طور مثال هر سه را در یک کلاس با نام Date)، تعریف و جمع‌بندی نمود؛ و بعد از آن، بدون نیاز به تعریف مجدد روز، ماه و سال، از کلاس Date به میزان مورد نیاز استفاده کرد:<ref name="ReferenceA" />
{{سخ}}
{{سخ}}
{{سخ}}
 
حال در نظر بگیرید که نه فقط یک تاریخ، بلکه n تاریخ متفاوت مورد نیاز است. این بدان معنی ست که می‌بایستی به تعداد n بار، سه متغیر بالا، جداگانه تعریف شوند و تعریفِ تک تک و پیاپی متغیرها، نه فقط از لحاظ زمانی بسیار وقت گیر می‌نماید، بلکه از لحاظ میزان کد مورد نیاز نیز بسیار غیر عملی ست، چرا که هر بار می‌بایستی نام جدیدی برای متغیرها در نظر گرفته شود (دو متغیر متفاوت نمی‌توانند هم نام باشند). در اینجاست که کلاس‌ها به خوبی وارد عمل می‌شوند. با استفاده از کلاس‌ها می‌توان متغیرهای متعدد را زیر عنوان یک جنسیت مشترک جدید (به‌طور مثال هر سه را در یک کلاس با نام Date)، تعریف و جمع‌بندی نمود؛ و بعد از آن، بدون نیاز به تعریف مجدد روز، ماه و سال، از کلاس Date به میزان مورد نیاز استفاده کرد:<ref name="ReferenceA"/>
 
<syntaxhighlight lang=Java>
مقالهٔ اصلی: [[کپسوله سازی (علم رایانه)]]
 
کپسوله سازی، مخفی‌سازی (Encapsulation)، یا لفافه‌بندی، به این مفهوم اشاره دارد که باید بعضی خصوصیات یا رفتارهای شیء را از دید دیگران پنهان کرد. فرض کنید شما به عنوان یک راننده می‌خواهید اتومبیل شخصی تان را روشن کنید و به محل کارتان عزیمت کنید سوییچ را بر می‌دارید،برمی‌دارید، استارت می‌زنید و با فشار آوردن به پدال‌های گاز و ترمز و چرخش فرمان و ... به محل کارتان خواهید رسید. در طول این مسیر در اتومبیل شما به عنوان یک شیء اعمال مختلفی در حال انجام بود. مثلاً [[لنت ترمز]] به دیسک چرخ برخورد می‌کرد و باعث کم شدن سرعت می‌شد یا شمع‌ها شروع به جرقه زدن در زمانی بخصوصی می‌کردند. حال فرض کنید که عمل مخفی سازی وجود نداشت و شما مجبور بودید که جرقه زدن شمعها را کنترل می‌کردید و به سیستم سوخت رسانی در موقع لزوم دستور می‌دادید که سوخت را بداخل سیلندرها ارسال کند و...و… یا هیچ‌گاه به مقصد نمی‌رسیدید! یا سالم نمی‌رسیدید!
 
عمل مخفی سازی باعث می‌شود که اشیاء بدون آنکه از چگونگی کارکرد یکدیگر اطلاع داشته باشند با هم کار کنند.
 
چند ریختی(Polymorphism)
چند ریختی، کمیتی است که به یک رابط امکان می‌دهد تا از عملیات یکسانی در قالب یک کلاس عمومی استفاده کند. عمل خاص کلاس را ذات حقیقی شیء تعیین می‌کند. مثال ساده‌ای از چند ریختی، فرمان اتومبیل است. عمل فرمان اتومبیل برای تمام اتومبیل‌ها بدون توجه به ساز و کاری که دارند، یکسان است. فرمان برای اتومبیل که به‌طور مکانیکی کار می‌کند یا با نیروی برق یا هر چیز دیگری، عمل یکسانی را انجام می‌دهد؛ بنابراین، پس از اینکه شما عملکرد فرمان را یاد گرفتید،یادگرفتید، می‌توانید فرمان هر اتومبیلی را کنترل کنید. همین هدف در برنامه‌نویسی نیز اعمال می‌شود.
به‌طور کلی، مفهوم چند ریختی، اغلب با عبارت ((«یک رابط، چندین روش))» بیان می‌شود. این بدین معنی است که امکان طراحی رابط عمومی برای گروهی از عملیات مرتبط وجود دارد. چند ریختی یا چندشکلی (Polymorphism) به این معنا است که اشیاء می‌توانند در موقعیت‌های مختلف، رفتارهای متفاوتی بروز دهند. مثلاً یک تابع در صورتی که بر روی نمونه‌ای از کلاس آ فراخوانی شود، رفتار ب را بروز دهد در حالی که اگر بر روی کلاس ج (که فرزند کلاس آ است) فراخوانی شود، رفتاری متفاوت انجام دهد.
 
== انتزاع / تجرید ==
 
== یک مثال کاربردی ==
در اطراف ما اشیاء زیادی وجود دارد و می‌توان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. مثلاً یک ماشین باربری. این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشیاء در آن و...و… این ماشین در صورتی که ما [[پدال گاز]] آن را فشار دهیم، حرکت می‌کند. در صورتی که فرمان آن را بچرخانیم تغییر مسیر می‌دهد. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان می‌دهد؛ ولی فقط این یک ماشین نیست که این کار را انجام می‌دهد. تمامی ماشین‌ها این کارها را انجام می‌دهند. پس می‌توانیم این ماشین را 'تعریف' کنیم و بگوییم:
 
''ماشین باربری وسیله‌ای است که چهار چرخ، یک گاز، یک ترمز، یک فرمان و یک محل برای حمل بار دارد و اگر پدال گاز آن فشار داده شود حرکت می‌کند. این تعریف این ماشین است ولی خود آن نیست. هر زمانی چنین ماشینی بخواهیم به کارخانه تولید آن می‌رویم و از فروشندگان می‌خواهیم تا با توجه به این تعریف یک ماشین به ما بدهند. ''
 
مفاهیم فوق در [[زبان‌های برنامه نویسیبرنامه‌نویسی]] شیءگرا گنجانده شده‌اند. در این زبان‌ها، اشیاء زیادی از پیش وجود دارند که برنامه‌نویسان می‌توانند از آن‌ها استفاده کنند.
 
== ارتباط اشیاء ==