شما اینجا هستید

خانه

برنامه نویسی شی گرا: مقدمه (قسمت اول)

برنامه نویسی شی گرا یا Object Oriented Programming  یا به صورت ساده OOP یک شیوه برنامه نویسی است که از اشیا برای برنامه نویسی و ساخت برنامه استفاده می کند. برای این که شما بتوانید یک برنامه شی گرا بنویسید باید با یک زبان برنامه نویسی مناسب که این ساختار را پشتیبانی می کند، برنامه بنویسید. بسیاری از زبان های برنامه نویسی روز نظیر JAVA و C++ و #C و PHP و ...  OOP را پشتیبانی می کنند. برای آموزش مفاهیم OOP فرض را بر این قرار می دهم که خواننده با یکی از زبان های فوق آشنا ست و توانایی برنامه نویسی ساده شامل تعریف کردن متغیر ها، حلقه ، شرط و ... را می داند.

با این پیش فرض، در این جا قصد دارم مفاهیم و نحوه برنامه نویسی شی گرا را با مثال های مناسب خصوصا از نگاه مهندسی شیمی به زبان C++ توضیح دهم. البته دوستانی که با زبان های دیگر برنامه می نویسند نیز می توانند مفاهیم اصلی را یاد گرفته و با زبان مورد نظر خود برنامه بنویسند. دلیل استفاده از C++ را هم که قبلا توضیح داده ام، ولی در حال حاضر اکثر نرم افزار های حرفه ای مهندسی شیمی مثل ASPEN و HYSYS و FlUENT و ... با C++ نوشته شده اند. حتی در برخی موارد با C. دلیل آن هم واضح است، چرا که زبان C بسیار پرسرعت تر از زبان های سطح بالا مثل JAVA می باشد. در نتیجه اگر در برنامه تان نیاز به سرعت بالا دارید، تقریبا همه نرم افزار های مهندسی شیمی و مکانیک نظیر کار های CFD و یا مثل Game engine ها، که باید بالا در ثانیه فریم در صفحه نمایش دهند، نجبور هستید که با زبان سطح پایین مثل C کد بنویسید. البته زبان C به طور کامل مفاهیم شی گرایی را پشتیبانی نمی کند. اما می توان نگاه شی گرایی را تا حدودی در آن استفاده کرد. برنامه FLUENT یک از قدرتمند ترین نرم افزار های CFD است که با C نوشته شده است. در مورد طراحی  شی گرا در این نرم افزار بعدا توضیح خواهم داد.

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

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

فرض کنید که شما یک برنامه بازی می نویسید. در این بازی ممکن است اشیا مختلفی وجود داشته باشد. برای مثال یک ماشین را به عنوان یک شی در نظر بگیرید. اگر تصور کنیم که یک بازی 2 بعدی داریم که ماشین شما فقط در روی صفحه حرکت می کند، چه ویژگی هایی را می توان برای این شی تصور کرد؟ مثالا می توان در نظر گرفت این ماشین نام دارد، رنگ دارد، موقعیت کنونی آن در صفحه چیست و ... به این خصوصیت های شی ماشین در زبان برنامه نویسی data field می گوییم. همچنین تصور کنید که چه اعمالی را می توان از این ماشین تصور کرد. مثلا شروع به حرکت کن. بایست. به سمت راست بچرخ و ... در واقع یک سری تابع را می توان به این شی نسبت داد که قابلیت انجام آن را دارد. به این دستورات method می گوییم.

حال به این نکته می پردازیم که چگونه یک برنامه بنویسیم و این شی ماشین را به کامپیوتر بفهمانیم. برای این منظور یک مثال ساده با زبان C++ می نویسیم:

می دانید که در زبان C++ متغیر هایی که می توانید تعریف کنیم به صورت پایه ای به صورت char (یک بایت) ، عدد صحیح (int)و حقیقی (double یا float) و انواع مختلف مشابه این ها هستند. مثل int64 , bool  , ...

ساختار داده با تعریف ساده تر در واقع یک متغیر جدید هستند. مثلا می خواهیم به این متغیر ها یک متغیر دیگر اضافه کنیم به نام Car . این قابلیت در زبان های شی گرا وجود دارد. در این صورت ما می توانیم هر جا که به یک متغیر از نوع ماشین نیاز داشتیم از آن استفاده کنیم. مثلا:

Car myCar;

هم چنان که اگر نیاز داشتیم به یک متغیر از نوع عدد حقیقی می نوشتیم:

float myFloat;

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

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

دیدگاه‌ها

سلام دوست گرامی با تشکر از لطفتون. من مدتهاست که کدهامو با متلب مینویسم اما به دلیل کند بودن متلب باید به سراغ سی پلاس پلاس برم. ولی متاسفانه درک مفهوم شی گرایی برام سخته. ممنون می شم اگر این مفهوم رو با توضیحات بیشتر و مثالهای ساده اما کاربردی توضیح بدید. مطمنا شما توانایی توضیح اون رو به بهترین نحو دارید و البته شمار بی شماری از مشتاقان سپاسگزار خواهند بود. بی صبرانه منتظرم. سلامت و تندرست باشید

سلام.
با نظر شما کاملا موافقم درباره کند بودن متلب. من یک تست ساده انجام دادم از یک حلقه تکرار و نتایج C رو با matlab مقایسه کردم. C++ تقریبا 100 برابر سریع تره!
تصور کنید شما یه برنامه بهینه سازی نوشتید و می خواید که 100 بار اجراش کنید، هر اجرا اگه تو سی 10 دقیقه طول بکشه، تو متلب 1000 دقیقه است! به نظر من یه مهندسی  که میره سراغ متلب تقریبا وقتش و تلف کرده. مگه این که واسه تست باشه یا یک برنامه خیلی ساده باشه. این نتایج مقایسه است:

 


void main()
{
    long double sum = 0;
    clock_t start,end;
    start = clock();
    for(int i=0;i<100000000;i++)
        sum += i;
    end = clock();
    cout << sum  << endl ;
    cout << "Duration: " << (end-start) << endl;
    
    system("pause");

}

Output:

5e+015
Duration: 173 Milli seconds : Release mode
482 ms on Debug mode


clc;
clear all;
tic;
sum = 0;
for i=1:100000000
    sum = sum + i ;
end
toc
disp(sum);


Output:

Elapsed time is 98.160303 seconds.
  5.0000e+015

 

بسیارزیاد تشکر میکنم از ویبلاک نویس محترم واقیعاکه مطالب ارزنده است

salam chera amozesh hatoon kamell nist?

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

با سلام و خدا قوت : کلاسی به نام cylinder برای پیاده سازی یک استوانه بنویسید.ویک تابع سازنده بنویسیدوتابعی به نام volumeبرای محاسبه یحجم و print برای چاپ استوانه.(با استفاده از وراثت)

 

با سلام.

کلاس Cylinder رو از کلاس Shape مشتق کردم و دو متد ای رو که خواسته بودین پیاده سازی کردم. فکر می کنم کد ها واضح باشه در هر صورتی سوالی داشتین بازهم درخدمتم.

لینک دانلود کد های c++

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

افزودن نظر جدید

درباره من

سلام. به وب سایت شخصی من خوش آمدید.

محمد ذات خواهی هستم متولد سال 66 اهل رشت. سال 89 از دانشگاه شریف با مدرک لیسانس مهندسی شیمی و سال 91 از دانشگاه علم و صنعت ایران با مدرک ارشد کنترل و شبیه سازی فرایند فارغ التحصیل شدم، و در حال حاضر به عنوان مهندس نرم افزار در شرکت گسترش فرایند شریف هستم. از اونجایی که از دبیرستان به الگوریتم و برنامه نویسی علاقه داشتم از همون موقع تو این حیطه کار می کنم. بیشترین توانایی من در طراحی نرم افزار های مهندسی شیمی، طراحی وب و کلا کد نویسی هست. خوش حال میشم بتونم به دیگران کمک کنم خصوصا در حوزه آموزش. سعی می کنم تو این وب سایت مطالب و تجربه هایی که فکر می کنم به درد علاقه مندان به حوزه نرم افزار و برنامه نویسی بخوره قرار بدم. امیدوارم شما هم با نظرات و انتقادات و بحث های علمی تون در ارتقای محتوی علمی این وب سایت من رو یاری کنید.

 

Mohammad Zatkhahi Image

 

.

?>