جشنواره ۵۰٪ تخفیف فرانش به مدت محدود

جشنواره ۵۰٪ تخفیف فرانش محدود

0 روز 0 ساعت 0 دقیقه 0 ثانیه

شروع یادگیری

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

آموزش گام به گام برنامه نویسی شی گرا (OOP)

لازم است که نیازهای واقعی و پیچیده‌ی زندگی را به صورت دستوراتی قابل فهم برای کامپیوتر مدل کنیم. در این زمینه نمونه‌های مختلفی داریم که می‌توانند به ما در مدل کردن نیازهای تجاری به برنامه‌های کامپیوتری کمک کنند، مانند: برنامه‌ نویسی رویه‌ای (Procedural Programming)، برنامه ‌نویسی شی‌گرا (Object oriented programming)، برنامه‌ نویسی تابعی (Functional Programming) و غیره.
می‌خواهیم درباره‌ی یکی از همین نمونه‌ها به نام برنامه ‌نویسی شی‌گرا مطالبی بیاموزیم. برنامه ‌نویسی شی‌گرا (
OOP) نوعی فلسفه است و به زبان برنامه ‌نویسی خاصی مربوط نمی‌شود.

برای شروع یادگیری برنامه نویسی شی گرا آماده ای؟

درباره‌ی چهار مفهوم زیر صحبت خواهیم کرد که ستون‌های برنامه ‌نویسی شی‌گرا هستند.

  • Abstraction
  • Encapsulation
  • Inheritance
  • Polymorphism
بهترین زبان‌های برنامه نویسی

برنامه نویسی شی‌گرا چیست؟

زبان‌های برنامه نویسی قدیمی‌تر مثل COBOL و C دارای رویکرد برنامه نویسی رویه‌ای بودند. برنامه‌هایی که به این زبان‌ها نوشته‌ می‌شدند، مجموعه‌ای از دستورات پشت سر هم بودند. این زبان‌ها برای ماژولار کردن برنامه، از procedureها و subroutineها استفاده می‌کردند. این نوع از برنامه نویسی بیشتر روی منطق برنامه تمرکز می‌کرد، نه داده‌ها. برنامه‌های قدیمی، داده و منطق را با هم ترکیب می‌کردند.

زبان‌های برنامه‌ نویسی مدرن مثل جاوا و C# از رویکرد شی‌گرا استفاده می‌کنند. در برنامه نویسی شی‌گرا به جای نوشتن مجموعه‌ای از دستورات که کاری را انجام می‌دهند، بیشتر به داده اهمیت داده می‌شود. یک شئ (object) ایده یا چیزی است که می‌خواهید در برنامه‌ی خود مدل کنید. یک شئ می‌تواند هر چیزی باشد، مثلاً یک کارمند، حساب بانکی، ماشین و غیره.

کلاس (Class)، شئ (Object)… این‌ها واقعاً چه مفهومی دارند؟

در شروع یادگیری برنامه نویسی شئ‌گرا باید بدانیم کلاس و شئ چه هستند و تفاوت آنها در چیست. یک کلاس، درواقع نقشه‌ی یک شئ است. دقیقاً شبیه نقشه‌ی یک ساختمان.

طرحی از کلاس و شی
یک کلاس شناسه‌ها (attribute) و رفتارها (behavior) را مشخص می‌کند. اگر بخواهیم یک ماشین را در برنامه‌مان مدل کنیم، شناسه‌هایی مثل مدل ماشین، نوع سوخت، سال ساخت و رفتارهایی مانند روشن کردن، ترمز، گاز دادن را تعریف می‌کنیم.
اگر دقت کنید متوجه می‌شوید که شناسه‌ها و رفتارهایی که تعریف کردیم مخصوصِ یک مدل خاص نیستند. در اینجا تلاش می‌کنیم یک ماشین را به طور کلی تعریف کنیم؛ می‌گوییم که ماشینِ برنامه‌ی ما دارای این شناسه‌ها و رفتارهاست.
ممکن است یک ماشین شناسه‌ها و رفتارهای دیگری هم داشته باشد، اما این شناسه‌ها و رفتارهای مورد نیاز کار ماست. این به ما کمک می‌کند تا نقشه‌ی یک ماشین را طراحی کنیم و در ادامه از این کلاس برای ساخت شئ استفاده می‌کنیم؛ شئ‌های ماشین را با جزئیات می‌سازیم.

برای مثال، با استفاده از یک کلاس ‘Car’ می‌توانیم اشیاء ماشین مختلفی بسازیم که مدل، نوع سوخت و سال ساخت متفاوتی دارند، اما رفتارهای همه‌شان یکسان است.

به این ترتیب، برنامه نویسی شی‌گرا به شما این اجازه را می‌دهد که به سادگی رفتارهای پیچیده‌ی یک سیستم واقعی را مدل کنید. با برنامه نویسی شی‌گرا، داده و تابع (شناسه‌ها و متدها (method)) با هم در یک شئ جمع می‌شوند.
این مسئله نیاز به داشتن داده‌های مشترک (
shared data) یا داده‌های سراسری (global data) را در برنامه کم می‌کند. این تفاوت اصلی برنامه نویسی شی‌گرا و رویکردهای رویه‌ای است.

دوره‌های مرتبط در فرانش

Abstraction (انتزاع)

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

انتزاع به این معناست که ویژگی‌های اصلی را بدون جزئیات پس‌زمینه و پیاده‌سازی یا نحوه‌ی کارکرد عنوان کنیم.

 

تلاش می‌کنیم تنها روی چیزهایی تمرکز کنیم که برایمان مهم است. در مورد برنامه نویسی، روی چیزهایی تمرکز می‌کنیم که برای ماژول‌مان مهم است. تغییر یک ماژول روی ماژول‌های دیگر تأثیری نمی‌گذارد.
تنها چیزی که برنامه‌نویس باید بداند این است که یک ماژول چه چیزی به شما می‌دهد. کسی که از ماژول استفاده می‌کند، لازم نیست بداند که ماژول این کار را چگونه انجام می‌دهد یا دقیقاً در پس‌زمینه چه اتفاقی می‌افتد.
انتزاع همه‌جا هست. تمامی اشیائی که روزمره از آنها استفاده می‌کنیم، به اندازه‌های مختلفی انتزاعی هستند. برای مثال ترمز ماشین یا دوچرخه‌‌ را درنظر بگیرید.

سیستم ترمز انتزاعی است و می‌توانید با استفاده از یک دسته، از آن برای متوقف کردن ماشین یا دوچرخه استفاده کنید. اگر سیستم سرعت‌دهی (گاز) ماشین را عوض کنیم، سیستم ترمز تغییری نخواهد کرد. آنها از هم مستقلند.
هم‌چنین اصلاً لازم نیست که بدانید سیستم داخلی ترمز چگونه کار می‌کند، تنها کافی است دسته‌ی ترمز را فشار دهید و فرقی نمی‌کند که نوع ترمزتان دیسکی باشد یا درام، وسیله‌ی شما متوقف خواهد شد.

 

آموزش PHP : راهنمای جامع و رایگان برای مبتدیان

 

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

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

وقتی کاربر دسترسی مستقیم به امور داخلی سیستم دارد

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

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

Inheritance (ارث‌بری)

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

ارث‌بری یک رابطه‌ی “هست یک” (IS A) است. ما در دنیای واقعی اینطور صحبت می‌کنیم. یک طوطی ”هست یک” پرنده. دلار امریکا ”هست یک”نوع ارز. اما عبارت “بانک هست یک حساب بانکی” درست نیست.
وقتی سعی می‌کنید چندین موجودیت (
Entity) را در یک جمله‌ی تجاری/سؤالی توصیف کنید، رابطه‌ی مورد نظر آشکار است.

با ارث‌بری می‌توانید یک رفتار/پیاده‌سازی معمول را تعریف کنید و بعداً آن را برای کلاس‌های خاص‌تر تغییر دهید.

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

ارث‌بری مکانیزمی برای کاهش تعداد خط کدهاست و به کاهش کدهای تکراری در برنامه کمک می‌کند.

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

دوره‌های مرتبط در فرانش

Polymorphism (چندریختی)

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

ابزار نوشتن/ ابزار نوشتن مخصوص

 

مثلاً، اگر بخواهید متنی را روی کاغذ بنویسید، می‌توانید از خودکار، مداد، ماژیک یا مداد شمعی استفاده کنید. تنها چیزی که می‌خواهید این است که بتوانید ابزار موردنظر را در دستتان جا دهید و وقتی آن را روی کاغذ می‌کشید، اثری روی کاغد به جا بگذارد.
بنابراین عمل نوشتن به شما کمک می‌کند ردی روی کاغذ بگذارید و اینکه از چه ابزاری برای این کار استفاده می‌کنید، به انتخاب‌تان بستگی دارد. به عنوان مثالی دیگر، هواپیما و سفینه‌ی فضایی هر دو اشیائی پرنده هستند.
اما شیوه‌ی پروازشان متفاوت است. به عبارت دیگر، شیوه‌ی پیاده‌سازی پرواز متفاوت است. اما از دید بیننده، هر دو می‌توانند پرواز کنند.

می‌توان از ارث‌بری برای رسیدن به چندریختی استفاده کرد. به این صورت که می‌توانیم رفتار تعریف شده در کلاس فرزند را با پیاده‌سازی یک متد مخصوص به آن کلاس بازنویسی کنیم. به این کار method overriding گفته می‌شود و هم‌چنین با نام چندریختی زمان اجر (Run Time Polymorphism) نیز شناخته می‌شود.

کد زیر نوع دیگری از چند ریختی به نام method overloading است و خبری از ارث‌بری در اینجا نیست. نام متد تغییر نمی‌کند، اما آرگومان‌هایش عوض می‌شوند.

 

ویدیو آموزش برنامه نویسی شی گرا:

در صورتی که آموزش مقدماتی برنامه نویسی شی گرا برایتان مفیده بوده:

می‌توانید برای یادگیری بیشتر دوره‌های آنلاین آموزش برنامه نویسی شی گرا را مشاهده نمایید.

 

دوره‌های مرتبط در فرانش

 

مرتضی شایق

مرتضی شایق

مدیر دیجیتال مارکتینگ

فعال در دیجیتال مارکتینگ در تخصص‌های: SEO (بهینه‌سازی سایت برای موتورهای جستجوگر)، SEM (بازاریابی در موتورهای جستجوگر)، UX (تجربه کاربری)

2 دیدگاه

  • ممنون از مطلب خوبتون قشنگ دستم اومد

    پاسخ

    • سلام مهدی جان
      خواهش میکنم

دیدگاهتان را بنویسید