در این مدت که در حوزه برنامه نویسی فعال هستم یکی از چیزهایی که افراد در هنگام مواجهه با دچار استرس و یک جور سردرگمی می شوند بحث شی گرایی است. شاید در این مدت سوالاتی مثل شی گرا به چه معناست، مفهوم شی گرایی به زبان ساده را میشه توضیح بدید، شی گرایی در کامپیوتر چیست، شی گرا در برنامه نویسی واسه چی هستش، شی گرایی به زبان ساده را بیشتر توضیح بدید و شی گرایی را تعریف کنید رو ازم سوال کردن و هر سری باید دونه به دونه توضیح میدادم. ولی در این مقاله تصمیم گرفتم به صورت کامل و کاملا ساده بگم برنامه نویسی شی گرا چیست؟ و تعریف درستی از این موضوع داشته باشم و در آخر هم ویژگی شی گرا رو مورد بررسی قرار میدهم.
برای اینکه شی گرایی به زبان ساده رو توضیح دهیم باید یک تعریف درست و دقیق از شی گرایی داشته باشیم. پس ابتدا تعریف عامیانه آن را مورد بررسی قرار میدهیم و بعد شروع به تعریف ساده می کنیم. پس اگر میخواهید به جواب سوال برنامه نویسی شی گرا چیست؟ حتما مقاله رو تا انتها و با دقت مطالعه کنید.
برنامه نویسی شی گرا چیست؟
برنامهنویسی شیگرا معمولا با عنوان OOP شناخته می شود که این سه حرف مخفف کلمات Object-Oriented Programming می باشد. یک شیوه برنامهنویسی است که ساختار یا بلوک اصلی اجزای آن، شیها میباشند.
زبان های سطح پایین به زبان ماشین (زبان صفر و یک) نزدیک هستند. اما زبان های سطح بالا برای تعامل بهتر ما با کامپیوتر ها ساخته شده اند. یعنی زبان های سطح بالا به زبان ما انسانها شباهت بیشتری دارند. به همین دلیل میتوانیم اندیشه ها و تفکرات خود را راحت تر به برنامه و کد تبدیل کنیم. شی گرایی هم دقیقا در ادامه همین ساده سازی برنامه نویسی به وجود آمده است. این تفکر دقیقا از روی اشیائی که در زندگی خود می بینیم گرفته شده است. یعنی سعی میکند که همه اجزا برنامه نویسی را با شی مدل کند. در ادامه مفهوم شی گرایی را با مثال هایی به شما توضیح میدهم.
مفهوم شی گرایی به زبان ساده
برای اینکه مفهوم شی گرایی به زبان ساده را خوب درک کنیم ابتدا این تصویر رو ببینید بعد متن پایین رو بخونید. با دیدن این تصویر و خواندن متن تا حدودی با مفهوم شی گرایی آشنا می شوید.
Object یا شی، یکی از اجزای برنامه نویسی شی گرا میباشد. زبان های برنامه نویسی جاوا و کاتلین هر دو از شی گرایی پشتیبانی میکنند. شی گرایی به زبان ساده یعنی در هنگام برنامه نویسی، یک مدل تعریف میکنیم که شامل خصوصیات مشخصی است، آنگاه میتوانیم از روی این مدل، هر تعداد شی جداگانه که خواستیم، بسازیم. این شی ها خاصیت یکسان دارند اما با یکدیگر فرق میکنند. اگر هنوز هم متوجه نشده اید، با یک مثال، موضوع روشن تر میشود.
جامعه انسان ها را در نظر بگیرید. هر کدام از ما یک انسان هستیم. یعنی مدل ما یکی است. همه از روی مدل انسان ساخته شده ایم. دارای دست، پا، چشم، گوش و مواردی مثل بقیه هستیم. یعنی کاملا فرق یک انسان و چیزی که غیر انسان است، واضح میباشد. اما با این حال انسان ها با یکدیگر فرق میکنند. هرکدام قیافه ی خاص، رفتار خاص، اخلاق خاص و در یک کلام ویژگی های خاص خود را دارند.
هرکدام از انسان ها یک شی هستند. در برنامه نویسی اندروید هم دقیقا به همین شکل عمل میشود. در ابتدا ما یک مدل میسازیم (که به این مدل در زبان برنامه نویسی، کلاس گفته میشود). این مدل (کلاس) ویژگی های کلی را مشخص میکند. سپس میتوانیم از روی این مدل، شی های متعدد بسازیم. اشیایی که از روی آنها ساخته میشوند دارای ویژگی های کلی همان کلاس هستند.
اما ویژگی های خاص آنها و خصوصیاتشان میتواند با یکدیگر متفاوت باشد. مثلا ما یک کلاس تعریف میکنیم که ویژگی های کلی دکمه ها را مشخص میکند. میتوانیم هر تعداد دکمه که میخواهیم در اکتیویتی قرار دهیم. هر کدام از این دکمه ها یک شی هستند. هر دکمه میتواند کار مخصوص خود را انجام دهد، متن متفاوتی داشته باشد و یا ظاهر آن با بقیه ی دکمه ها فرق کند.
به عنوان مثال های دیگر میتوانید همه چیز اطراف خودتان را شی در نظر بگیرید. مثلا در حوزه ی وسایل نقلیه، می شود کاملا تفاوت بین هواپیما، کامیون، اتوبوس، موتور و … را تشخیص داد. هرکدام از این سری ها، به عنوان مجموعه های متفاوت اشیا شناخته میشوند. برای نمونه ما سری موتور سیکلت ها را در نظر میگیریم. هر شرکت سازنده به عنوان یک کلاس (الگو) شناخته میشود. هر موتور سیکلت هم یک شی به حساب می آید که توسط این الگو ها ساخته میشود.
به عنوان مثال اگر دو موتور هوندا که مدل و سال ساخت و مشخصات فنی یکسانی دارد را کنار یکدیگر بگذاریم، باز هم هر کدام از این اشیاء، ویژگی های خاص و هویت مخصوص خود را دارند. هرکدام شماره موتور و شاسی مخصوص به خود و شماره سری تولید اختصاصی خود را دارند.
اشیاء در برنامه نویسی شی گرایی هم دقیقا همینگونه هستند. ممکن است صدها شی از روی یک کلاس ساخته شوند، اما هرکدام از آنها دارای هویت و رفتار منحصر بفرد خودشان میباشند.
مثال دیگر برای مفهموم شی گرایی به زبان ساده
فرض کنیم که قرار است ما یک آپارتمان ۱۰ طبقه بسازیم. هر ۱۰ طبقه از آپارتمان ما دارای یکسری ویژگی های خاص و منحصر به فرد است مثل اینکه رنگ دیوار های طبقه اول سفید است و درهای آن کرم رنگ هستند اما این در حالی است که رنگ دیوار های طبقه هفتم صورتی است و درهای آن سفید است و …
در حقیقت هر یک از طبقه های آپارتمان ما همچون یک Object یا شی در یک زبان برنامه نویسی شی گرا همچون جاوا است. اگرچه که هر یک از طبقات آپارتمان ما دارای یکسری ویژگی های خاص است، اما این در حالی است که کلیه طبقات آپارتمان از یکسری ویژگی های ثابت همچون اتاق خواب، سرویس، آشپزخانه و پنجره برخوردارند. در زبان برنامه نویسی جاوا یک Class دقیقاً چنین نقشی را ایفا می کند. به عبارت دیگر در یک برنامه ی نوشته شده با زبان جاوا، Class به منزله یک نقشه ی خانه است که هر یک از طبقات آپارتمان از روی آن ساخته می شود اما هر یک از طبقات علیرغم داشتن یک پلان ثابت دارای یکسری ویژگی های منحصر به فرد خود است که اصطلاحاً به هر یک از آن طبقات یک Object گفته می شود.
برای درک بهتر مفهوم شی و و شی گرایی پیشنهاد میکنم تصویر زیر رو ببینید:
برنامه نویسی شی گرا یک الگوی برنامه نویسی است. این الگو بر اساس مفهوم اشیاء طراحی شده است. این اشیاء دارای اطلاعاتی هستند که در قالب فیلدها ذخیره میشوند. به این اطلاعات، صفات آن شی می گویند. کدهای شی در قالب پروسیجرها ذخیره میشوند و به آنها متد میگویند. این متدها می توانند به صفات شی دسترسی داشته باشند، و آنرا تغییر بدهند. در برنامه نویسی شی گرا، این اشیاء با یکدیگر ارتباط برقرار میکنند و برنامه را تشکیل میدهند.
مفهوم کلاس (Class) در شی گرایی چیست؟
به زبان ساده میتوان کلاس را به عنوان قالبی برای اشیا در نظر گرفت، مثلا خودروی BMW یک نمونه شی از کلاس خودرو است، کلاسها معمولا در بردارندهی خصوصیات و رفتار اشیا هستند، مثلا کلاس خودرو دربردارندهی ویژگی های یک خودرو مثل سرعت، وزن، رنگ و… است و هر مدل خودرویی که از این کلاس در نظر بگیریم تمامی ویژگیهای گفته شده در کلاس را درون خود خواهد داشت، برای درک بهتر این مفهوم تصویر زیر را ببینید:
چه زبان هایی از شی گرایی پشتیبانی می کنند؟
بسیاری از زبان های برنامه نویسی موجود، از شی گرایی پشتیبانی میکنند. در بخش زیر تعدادی از زبان هایی که از برنامه نویسی شی گرا پشتیبانی می کنند رو معرفی کردیم:
- زبان سی پلاس پلاس
- زبان جاوا
- زبان پایتون
- زبان PHP
- زبان سی شارپ
- زبان دلفی
- و …