خرداد ۶, ۱۳۹۸ Mostafa بدون دیدگاه

اگر دنبال برنامه نویس برای ساخت افزونه ،قالب،سایت،برنامه ویندوز،اپلیکیشین اندروید،ربات تلگرام و.... هستید ،سفارش برنامه نویسی را مطالعه نمایید.

توجه : درخواست افزونه ،قالب، اسکریپت و نرم افزار و ... و سوالات و مشکلات خود را در انجمن ارسال نمایید

در این مطلب ، مفاهیم و مبانی OOP را فراخواهیم گرفت. برنامه نویسی شی گرا یک الگو یا تکنیک برنامه نویسی است که مفاهیمی نظیر وراثت (inheritance)، اتصال داده ها (data binding)، چندریختی (polymorphism) و غیره .. را معرفی کرده و بکار می گیرد.

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

تشریح سیستم برنامه نویسی شی گرا (OOPs)

در دنیای واقعی به هر موجودیت مستقل حقیقی یک آبجکت گفته می شود از جمله خودکار، صندلی، میز و … . برنامه نویسی شی گرا یک روش یا الگوی طراحی و برنامه نویسی است که از مفاهیم کلاس و آبجکت استفاده می کند. OOP با معرفی و بهره گیری از مفاهیم زیر توسعه ی نرم افزار و نگهداشت آن را سهل می سازد:

  • آبجکت یا شی
  • کلاس
  • وراثت (inheritance)
  • چندریختی (Polymorphism)
  • انتزاع یا تجرید (Abstraction)
  • کپسوله سازی (Encapsulation)

آبجکت یا شی (Object)

هر موجودیتی که دارای اطلاعات، وضعیت و رفتار خاصی باشد یک آبجکت یا شی شناخته می شود. برای مثال می توان از صندلی، خودکار، میز، صفحه کلید، دوچرخه و غیره … نام برد. یک آبجکت می تواند موجودیتی فیزیکی یا منطقی باشد.

کلاس

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

وراثت یا Inheritance

زمانی که یک آبجکت تمامی property ها (ویژگی ها) و قابلیت یا رفتارهای (متدها) آبجکت پدر (parent) را کسب می کند (به ارث می برد)، در OOP به آن وراثت گفته می شود. این امکان به توسعه دهنده اجازه ی استفاده ی مجدد از کد مورد نظر در بخش های مختلف پروژه را می دهد. به واسطه وراثت می توان چندریختی یا polymorphism را در زمان اجرای برنامه پیاده سازی کرد.

چندریختی (Polymorphism)

زمانی که یک کار یا وظیفه ی معین به اشکال و روش های مختلف قابل اجرا می باشد، در دنیای برنامه نویسی به آن چندریختی یا polymorphism گفته می شود. برای مثال، می توان به روش های مختلف متقاعد کردن مشتری یا فعل ترسیم که برای کشیدن اشکال مختلف بکار گرفته می شود اشاره کرد. به واسطه ی مفهوم چندریختی می توان متدها یا توابعی را نوشت که با وجود نامی یکسان دارای کاربرد متفاوت باشند.

در زبان Java با استفاده از (فراخوانی متدی با نام یکسان ولی پارامترهای مختلف) overloading و (بازنویسی بدنه ی متد کلاس پدر در کلاس فرزند که دارای پارامترها و signature یکسان هستند) overriding مفهوم چندریختی را پیاده سازی می کنیم.

مثال دیگری که می توان به آن اشاره کرد قابلیت صحبت کردن می باشد. برای مثال گربه صدای meow، سگ صدای پارس و اردک صدای quack را تولید می کنند.

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

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

در زبان Java برای پیاده سازی این مفهوم از کلاس های abstract (کلاسی برای نگهداری فیلدها و متدهای مشترک بین تمامی کلاس های زیرمجموعه و مشتق شده) و interface ها (الگوهایی برای پیاده سازی متدها) استفاده می کنیم.

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

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

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

برتری زبان های شی گرا بر زبان های تابع محور یا procedure-oriented

  1. زبان های شی گرا توسعه و نگهداشت نرم افزار را آسان می سازند. این در حالی که نگهداشت و مدیریت کد برنامه های نوشته شده با زبان های تابع محور به محض بزرگ تر شدن پروژه بسیار طاقت فرسا می شود.
  2. زبان های شی گرا قابلیت data hiding را ارائه می دهند که به واسطه ی آن داده های تعریف داخل بدنه ی کلاس برای اعضای خارج از آن غیرقابل دسترسی می شوند. این در حالی است که در برنامه های تابع محور داده های سراسری (global) از همه جای یک برنامه قابل دسترسی می باشند.
  3. زبان های شی گرا این امکان را به توسعه دهنده می دهند تا رخدادهای دنیای واقعی را به مراتب کاراتر شبیه سازی کند. در واقع توسعه دهنده می تواند با بهره گیری از زبان شی گرا برای پیاده سازی نرم افزار، برای معضلات واقعی، راه حل های مناسب ارائه دهد.

شرح تفاوت بین زبان شی گرا و زبان مبتنی بر شی

زبان های مبتنی بر شی (object-based) تمامی ویژگی ها و اصول OOP را به استثنای Inheritance یا وراثت رعایت می کنند. JavaScript و VBScript از این دسته از زبان ها هستند.

 

چند سوال معمول درباره ی جاوا:

  1. آیا می توان متد main را overload کرد (با امضاهای مختلف صدا)؟
  2. تابع سازنده (constructor) در خروجی مقداری را برمی گرداند اما … ؟
  3. آیا می توان یک برنامه را بدون متد main ایجاد کرد؟
  4. 6 روش مختلف برای استفاده از کلیدواژه ی this چه هستند؟
  5. چرا وراثت چندگانه (multiple inheritance) در جاوا پشتیبانی نمی شود؟
  6. چرا توصیه می شود که از تجمیع یا (رابطه ی یک طرفه بین دو کلاس) aggregation در جاوا استفاده شود؟
  7. آیا می توان متد static را بازنویسی (override) کرد؟
  8. نوع بازگشتی covariant چیست؟
  9. سه مورد استفاده ی کلیدواژه ی super چیست؟
  10. چرا باید از قطعه کد مقداردهنده ی اولیه آبجکت (instance initializer block) استفاده شود؟
  11. متغیر فاقد مقدار که با کلیدواژه ی final تعریف شده (blank final variable)، چه کاربردی دارد؟
  12. marker یا tagged interface/اینترفیس نام گذاری شده چیست؟
  13. چندریختی پویا (runtime polymorphism) یا انتخاب و فراخوانی پیاده سازی مورد نظر از متد در زمان اجرا (dynamic method dispatch) چیست؟
  14. چه تفاوتی میان (اتصال کد متد به فراخوانی و بدنه ی آن در زمان کامپایل)binding static و (اتصال کد متد به فراخوانی و بدنه ی آن در زمان اجرا) dynamic وجود دارد؟
  15. چگونه می توان downcasting (تبدیل از کلاس پایه به کلاس مشتق شده) را در جاوا پیاده سازی کرد؟
  16. هدف و مورد استفاده ی تابع سازنده (private constructor) با سطح دسترسی private چیست؟
  17. object cloning یا ساختن نمونه ی عینی از روی کلاس یعنی چه؟

 

در شی گرایی یا OOP با مفاهیم زیر آشنا خواهید شد:

  1. مزایای استفاده از تکنیک برنامه نویسی شی گرا و مفاهیم آن
  2. استاندارد و قراردادهای نام گذاری (naming convention)
  3. مفاهیم آبجکت و کلاس
  4. فراخوانی متدی با نام یکسان با پارامترهای مختلف (overloading)
  5. مفهوم Constructor یا تابع سازنده
  6. کلیدواژه ی static
  7. کلیدواژه ی this و 6 کاربرد آن
  8. وراثت (inheritance)
  9. aggregation (تجمیع دو کلاس با رابطه ی یک طرفه)
  10. بازنویسی بدنه ی متد (overriding)
  11. خروجی تابع از نوع covariant چیست؟
  12. کلیدواژه ی super
  13. قطعه کد مقداردهنده ی اولیه آبجکت (Instance Initializer block)
  14. کلیدواژه ی final
  15. کلاس انتزاعی (abstract class)
  16. Interface (الگوی پیاده سازی متد ها)
  17. Runtime Polymorphism
  18. Static & Dynamic binding
  19. انجام downcasting با عملگر instanceof
  20. package یا پوشه ی حاوی کلاس های پروژه
  21. تنظیم کنندگان سطح دسترسی/Access modifier
  22. کپسوله سازی (encapsulation)
  23. ساخت نمونه ی عینی از روی آبجکت یا object cloning

برچسب ها
نظرات

توجه : لطفاً فقط نظرات خود را از این طریق ارسال نمایید و سوالات و مشکلات خود را در انجمن سایت مطرح نمایید.