PDA

View Full Version : مبتدی: علت ایجاد کلاس و ساختار و یونین در زبان C چیست؟



rohalamin
چهارشنبه 14 فروردین 1392, 23:02 عصر
سلام بچه ها
عیدتون مبارک!
من مدت هاس که این سوال تو ذهنم هست، کتاب C++‎ هم خیلی خوندم ولی نفهمیدم که علت بوجود اومدنش چی بوده؟
چه فایده و مزایایی داره؟
اصلا مگه چه مشکلی وجود داشته که این کلاس و ساختار و یونین رو ساختن؟

بابک.م.
چهارشنبه 14 فروردین 1392, 23:31 عصر
سلام

مهمترین علت ابداع کلاس و ساختار و اجتماع و مواردی اینچنین ،نیاز به کپسوله سازی (Encapsulation) و استفاده مجدد (Reuse) است.

برای هر نمونه از یک کلاس و ساختار (که شی یا object نامیده می شود) یک فضای حافظه مشخص و منحصر به فرد تخصیص داده می شود که بوسیله یک اشاره گر قابل دسترسی است. این اشاره گر که this نامیده می شود بوسیله متد های عضو کلاس برای دست کاری متغییر های عضو کلاس استفاده می شود (Encapsulation) .
Reuse نتیجه Encapsulation است به عبارت دیگر هرگاه کپسوله سازی در طراحی رعایت شود آن جز را با سهولت بیشتری می توان در طرح های بزرگ تر و پیچیده تر مجددا استفاده کرد و یا توسعه داد.

Ananas
پنج شنبه 15 فروردین 1392, 00:35 صبح
سلام.
به "دلیل استفاده از ماشین" توجه کنید (به هر وسیله ای که کار رو آسان کنه ماشین میگن). فرض کنیم می خوایم یک لباس بدوزیم.بدون چرخ خیاطی هم میشه این کار رو کرد. ولی اگر بخوایم 1000 تا لباس بدوزیم مسئله فرق میکنه.
نکته ی دیگه اینکه در برنامه نویسی برای ساختن نمونه هایی که از یک جنس اند و رفتارشون مثل هم هست منطقیه که همه رو به یک شکل بسازیم و از یک منبع تولید کنیم تا مثل هم باشن. و برای این نمونه ها، اسم و نشون انتخاب کنیم.
و خلاصه اینکه برای شبیه سازی اشیای دنیای واقعی با استفاده از ترکیب بایت ها، به تعریف یک سری خصوصیات و قوانین و محاسبات مخصوص اون شی احتیاج داریم ( تعریف struct و class و union).

rohalamin
پنج شنبه 15 فروردین 1392, 07:39 صبح
بسیار ممنون که پاسخ دادید ولی خب توابع هم همچین کاری می کنن!
نمی کنن؟
اگه نمیکنه فرقش با توابع چیه؟
دوباره خوب نگرفتم. ظاهرا کلاس و ساختار و... فقط تو C++ هست و توی C انگار نیست درسته؟

linux
پنج شنبه 15 فروردین 1392, 11:45 صبح
بسیار ممنون که پاسخ دادید ولی خب توابع هم همچین کاری می کنن!
نمی کنن؟
اگه نمیکنه فرقش با توابع چیه؟
دوباره خوب نگرفتم. ظاهرا کلاس و ساختار و... فقط تو C++ هست و توی C انگار نیست درسته؟

برای اینکه خوب بگیرید مطلب را در مورد شی‌گرایی باید توضیح داد:
صحبت سر مدل کردن دنیا واقعی هست در دنیای واقعی شما با اشیا کاردارید و اگر شما بتوانید این مدل کردن را در برنامه نویسی هم استفاده کنید کارها به مراتب راحت تر می‌شوند.

rohalamin
پنج شنبه 15 فروردین 1392, 11:51 صبح
منظور از مدل کردن چیه؟
آخه ما هر چی رو مدل کنیم بازم نقص داره؟
اصلا چرا باید مدل کنیم؟ کاربرد این مدل کردن چیه؟

Ananas
پنج شنبه 15 فروردین 1392, 15:21 عصر
فرض کنید شخصی می خواد یک کامپیوتر بخره. مادر برد، پاور، سی پی یو ، کارت گرافیک، و ... این قطعات رو میگیره ولی میگه "اگه داخل یک کیس هم اینا رو سوار نکنیم کار میکنه پس چرا باید کیس داشته باشم؟"
جواب شما به این شخص چیه؟
من جواب میدم : به دلیل اینکه بتونید کیس رو راحت جابجا کنید، آسیب نبینه و از قطعاتش محافظت بشه ، ظاهری زیبا داشته باشه و ...
افرادی هم هستن که قطعات سیستمشون یه جورایی رو هواست و کیسشون در پیکر درستی نداره (چند ماه ای اینطور بسر بردم دیدم نمیشه).
تو برنامه نویسی هم شما احتیاج به یک بسته بندی قابل حمل و ارسال به توابع و دریافتشون از جایی به جای دیگه دارید و درست نیست که تیکه تیکه باشه.
یک مثال دیگه: فرض کنید که قراره چند تا جزوه سر کلاس درس از صحبت های اساتید بنویسید، میشه برای هر درس یک دفتر جدا تهیه کرد و داخل هر کدوم مطالب مربوط به هم رو بنویسید (هر درسی جدا مستقل) میشه یک دفتر داشته باشید که از صفحه ی اول شروع میکنید و هر درسی که کلاسش برگزار شد در اولین صفحه ی خالی اون دفتر بنویسید. به نظر شما کدوم درسته. ممکنه بخواید از جزوتون برای دوستانتون کپی بگیرید. (البته یک سری دفتر ندارن تو کاغذ می نویسن که بعدا کاغذ ها به هم لینک میشن، همون بسته بندی).

rohalamin
دوشنبه 30 اردیبهشت 1392, 16:09 عصر
آقا من هنوز مشکل دارم!:خجالت:
کسی می تونه با کد نویسی مشکلاتی که بدون وجود کلاس و ساختار و یونین بوجود میاد رو نشون بده و یه توضیح مختصر هم بده؟

UfnCod3r
دوشنبه 30 اردیبهشت 1392, 19:32 عصر
کتاب C++‎‎ هم خیلی خوندم ولی نفهمیدم که علت بوجود اومدنش چی بوده؟
چه فایده و مزایایی داره؟
اصلا مگه چه مشکلی وجود داشته که این کلاس و ساختار و یونین رو ساختن؟

بله مشکل اینه ک شما فقط کتاب خوندی
تا خودت برنامه ننویسی و از این قابلیت ها استفاده نکنی نمی تونی بفهمی هرچقدر هم ما توضیح بدیم فرقی نمی کنه

rohalamin
دوشنبه 30 اردیبهشت 1392, 19:43 عصر
بله مشکل اینه ک شما فقط کتاب خوندی
تا خودت برنامه ننویسی و از این قابلیت ها استفاده نکنی نمی تونی بفهمی هرچقدر هم ما توضیح بدیم فرقی نمی کنه
آخه من می خوام سریع یاد بگیرم. یعنی واقعا هیچ مثال ساده ای نیست که کاربرد اینها رو نشون بده؟

m.j_banitaba
دوشنبه 30 اردیبهشت 1392, 21:32 عصر
خاصیت شی گرایی یک مفهومه اون را حتی با اسمبلی هم می شه پیاده سازی کرد . درست مثله خود ساختار ، آرایه و دیگر مفاهیم این مفاهیم همگی جهت راحتر شدن برنامه نویسی به کار می روند اینکه شما دیگه لازم نباشه دو ساعت فکر کنید:
کدم تابع مال کدوم داده بود؟
حالا این تابع رو نفرات دیگه برای کدوم داده نوشتن؟
ارتباط این داده ها باهم چگونه است؟
البته مفاهیمی چون friend، privateو PUBLIC نیز در این میان به خوانا بودن و مفهومی تر شدن برنامه کمک میکنن وگرنه با صفر ویک هم میشه به کامپیوتر بگی همه کار انجام بده مهم سرعت ،دقت و کار در گروه های بیش از سه نفره.

omidshaman
دوشنبه 30 اردیبهشت 1392, 21:39 عصر
آخه من می خوام سریع یاد بگیرم. یعنی واقعا هیچ مثال ساده ای نیست که کاربرد اینها رو نشون بده؟
برنامه نویسی که مثل تاریخ نیست که با خوندن کتاب بشه یاد گرفت تمرین کن چند تا برنامه بنویس خودت کم کم متوجه میشی ...

m.j_banitaba
دوشنبه 30 اردیبهشت 1392, 21:55 عصر
برنامه نویسی که مثل تاریخ نیست که با خوندن کتاب بشه یاد گرفت تمرین کن چند تا برنامه بنویس خودت کم کم متوجه میشی ...

فوتبال نیست که فقط با تمرین بفهمی؟!؟ گرچه فوتبالم کتاب داره.:متفکر:
کتاب بخون . کتاب خوب بخون .خوب کتاب بخون. متوجه میشی.

rohalamin
سه شنبه 31 اردیبهشت 1392, 06:58 صبح
برنامه نویسی که مثل تاریخ نیست که با خوندن کتاب بشه یاد گرفت تمرین کن چند تا برنامه بنویس خودت کم کم متوجه میشی ...


فوتبال نیست که فقط با تمرین بفهمی؟!؟ گرچه فوتبالم کتاب داره.:متفکر:
کتاب بخون . کتاب خوب بخون .خوب کتاب بخون. متوجه میشی.

قاطی کردم.:گیج:

m.j_banitaba
سه شنبه 31 اردیبهشت 1392, 08:04 صبح
قاطی کردم.:گیج:
قضیه: علم بهتر است یا تجربه ؟ یک تجربه علمی؟یک علم تجربی؟گزینه یک ودو ؟ هیچ کدام؟
Welcome to the World of Philosophy

developing
سه شنبه 31 اردیبهشت 1392, 09:35 صبح
با سلام

تابع کار یا عملی رو انجام میده درست مثل حرکت در فیزیک که باعث جابجایی اشیا میشه.

یونیون یک ساختار برای برنامه نویسی مفید و بهینه است که از حافظه به صورت بهینه استفاده بشه. در واقع چند متغیر رو میگیم از یک مکان حافظه (آدرس) شروع بشن

خصوصیت (متغیر) مکان ذخیره ی داده هاست مثل رنگ یک شی در دنیای واقعی طول و عرض و ارتفاع.

ساختار جمع بین توابع و خصوصیات است یعنی یک سری داده ها و عملیات که به هم وابسته هستند رو نمایش میده. مثلا فکر کنید می خواید برنامه ای بنویسید که اطلاعات n دانشجو از قبیل نام، نام خانوادگی، شماره دانشجویی، کد ملی، آدرس و ... رو داشته باشه.
1- اگه از آرایه استفاده کنید باید برای هر کدوم یک آرایه تعریف کنید. که در اینجا می شه 5 تا آرایه
تا اینجا کار خوب پیش میره اما وقتی می خواید مرتبشون کنید اونوقت باید مرتب سازی رو برای 5 تا آرایه پیاده سازی کنید. همینطور برای جستجو، جابجایی، حذف، اضافه و ...
2- اما اگه از ساختار استفاده کنید یک ساختار ایجاد می کنید و در اون 5 تا خاصیت در نظر می گیرید
برای مرتب سازی کافیه آرایه ای از یک ساختار رو مرتب کنید. همینطور برای جستجو، جابجایی، حذف، اضافه و ...
یعنی در این مثال کوچیک 5 برابر کارتون کم تر میشه.
حالا برای یک مثال واقعی این تعداد بسیار بیشتر خواهد بود.

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

کلاس هم مانند ساختار هست اما با ویژگی های بیشتر که اغلب در ایران از این ویژگی ها استفاده نمیشه یا به صورت درست به کار گیری نمیشه. شما هم نمی خواد خودت رو درگیر کنی فرصت برای فهمیدن این بخش زیاد داری.