• توجه: در صورتی که از کاربران قدیمی ایران انجمن هستید و امکان ورود به سایت را ندارید، میتوانید با آیدی altin_admin@ در تلگرام تماس حاصل نمایید.

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

admin

Administrator
عضو کادر مدیریت
برنامه‌نویسی شیءگرا (به انگلیسی Object Oriented Programming مخفف OOP) یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی تشکیل دهنده برنامه‌ها در آنها اشیا هستند.اشیاء صورت‌های مجرد از ماهیت‌های مطرح در مسئله هستند که دارای وضعیت (درونی) و همچنین عملیات بر روی داده‌ها (وضعیت درونی) می‌باشند. این نوع نگرش دارای مزایای بسیاری از جمله مدیریت پیچیدگی وهزینهٔ نگهداری کمتری است.

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

admin

Administrator
عضو کادر مدیریت
وراثت
وراثت یا ارث بری (Inheritance) از مفاهیم اساسی برنامه نویسی شیءگراست. هر شیء یک نمونه از یک کلاس است و هر کلاس می‌تواند از کلاس یا کلاسهای دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاس‌های دیگر را به ارث ببرد). در یک مثال ساده می‌توان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، فرمان، بدنه، در و غیره، می‌توان یک کلاس پایه از اتومبیل ایجاد کرد سپس مثلاً برای اتومبیل زانتیا مدل C5 یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. این ویژگی باعث صرفه‌جویی در نوشتن کد و تا حدودی تضمین صحت کد موجود می‌شود. به عنوان مثال اگر کلاس پایه مشکلی داشته باشد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاس‌هایی که از این کلاس پایه ویژگی‌ای ا به ارث برده‌اند این تغییر اعمال خواهد شد.
 

admin

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

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

admin

Administrator
عضو کادر مدیریت
چندریختی
چند ريختي(Polymorphism) چند ریختی،كميتي است كه به يك رابط امكان مي دهد تا براي يك كلاس عمومي،از عمليات يكساني استفاده كند.عمل خاص كلاس را ذات حقيقي شيء تعيين مي كند.مثال ساده اي از چند ريختي،فرمان اتومبيل است.عمل فرمان اتومبيل براي تمام اتومبيل ها بدون توجه به ساز و كاري كه دارند،يكسان است.فرمان براي اتومبيل كه به طور مكانيكي كار مي كند يا با نيروي برق يا هر چيز ديگري،عمل يكساني را انجام مي دهد.بنابراين،پس از اينكه شما عملكرد فرمان را ياد گرفتيد،مي توانيد فرمان هر اتومبيلي را كنترل كنيد.همين هدف در برناهه نويسي نيز اعمال مي شود. به طور كلي،مفهوم چند ريختي،اغلب با عبارت ((يك رابط،چندين روش))بيان مي شود. اين بدين معني است كه امكان طراحي رابط عمومي براي گروهي از عمليات مرتبط وجود دارد. چند ريختي یا چندشکلی (Polymorphism) به این معنا است که اشیاء می‌توانند در موقعیت‌های مختلف، رفتارهای متفاوتی بروز دهند. مثلاً یک تابع در صورتی که بر روی نمونه‌ای از کلاس آ فراخوانی شود، رفتار ب را بروز دهد در حالی که اگر بر روی کلاس ج (که فرزند کلاس آ است) فراخوانی شود، رفتاری متفاوت انجام دهد.
 

admin

Administrator
عضو کادر مدیریت
انتزاع / تجرید
به این معنا است که بخشی از یک موجودیّت یک مفهوم را که میان همهٔ وارثان مشترک است، پیش تعریف کنیم. این توانایی منجر به داشتن نگاه مشابه به موجودیّت های مشابه می‌گردد.
 

admin

Administrator
عضو کادر مدیریت
یک مثال کاربردی
در اطراف ما اشیاء زیادی وجود دارد و می‌توان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. مثلاً یک ماشین باربری. این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشياء در آن و.... این ماشین در صورتی که ما پدال گاز آن را فشار دهیم، حرکت می‌کند. در صورتی که فرمان آن را بچرخانیم تغییر مسیر می‌دهد. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان می‌دهد. ولی فقط این یک ماشین نیست که این کار را انجام می‌دهد. تمامی ماشین‌ها این کارها را انجام می‌دهند. پس می‌توانیم این ماشین را 'تعریف' کنیم و بگوییم:

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

مفاهیم فوق در زبان‌های برنامه نویسی شیءگرا گنجانده شده‌اند. در این زبان‌ها، اشیاء زیادی از پیش وجود دارند که برنامه‌نویسان می‌توانند از آنها استفاده کنند.
 

admin

Administrator
عضو کادر مدیریت


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

ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری خودروییاست که صندوق عقب داشته باشد.

* اگر کسی به درب کارخانه مراجعه کند و بگوید که 'خودرو' میخواهد، چیزی دریافت نمی‌کند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد پس مشتری تنها می‌تواتند ماشین باربری یا ماشین سواری بخواهد.
* کارواش را در نظر می‌گیریم. این کارواش خودرو را تمیز می‌کند و دیگر به طور جزئی عنوان نمی‌کند که کدام نوع خودرو را تمیز می‌کند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
* وقتی شخصی قصد اجاره خودرویی دارد، و میخواهد جنسی را حمل کند در هنگام نماس با متصدی کرایه ماشین می‌گوید: «اگر خودرو شمااز نوع باربری است، برای من ارسال کنید»، ولی اگر قصد جابجا شدن را دارد می‌گوید : «برای من یک ماشین سواری بفرستید.»

در زبان‌های برنامه نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشيا از یکدیگر ارث بری می‌کنند. برخی از تعاریف کاملاً عام است و نمی‌توان از آنها نمونه شیئی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته می‌شود.​
 

admin

Administrator
عضو کادر مدیریت
کلاس
در مهندسی نرم‌افزار و مهندسی دانش کلاس نقشهٔ نوعی و مشترک برای گروهی از اشیاء است که ویژگی‌های مشترکی داشته، و رفتارهای مشترکی از خود نشان می‌دهند. در‌واقع، کلاس‌ها انوع جدیدی هستند که شخص برنامه‌نویس، خود، آن‌ها را برای حل مسئله‌های دنیای واقعی طراحی می‌کند، و حاوی تعریف‌های لازم برای دو عنصر اساسی زیر می‌باشند:

* داده‌ها، یا صفات
* عملیات‌، یا روش‌ها

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

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

مثال: رانندگی خودرو بدون اطلاع از خصوصیات طرز کار داخلی موتور و سیستم‌های اگزوز و جعبه‌دنده امکان‌پدیر است. در مهندسی نرم‌افزار ضرورت پنهان‌سازی اطلاعات امری بسیار مهم هست.

در زبان‌های رویه‌ای برنامه‌نویسی، مثل زبان سی، برنامه‌نویسی، بیشتر عملگرایانه است. در‌حالی‌که، زبان‌های برنامه‌نویسی سی‌پلاس‌پلاس، جاوا، و سی‌شارپ شیء‌گرایانه هستند. واحد برنامه‌نویسی در زبان‌های رویه‌ای تابع است، ولی، در زبان‌های اشیاءنگر کلاس‌ها - که اشیاء نهایتا از آنها ایجاد می‌شوند ( یا اصطلاحا نمونه‌سازی می‌شوند) - واحد برنامه‌نویسی را تشکیل می‌دهند. توابع نیز در داخل کلاس‌ها به عنوان متدهایی محصور می‌شوند.

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