PDA

View Full Version : ساخت گرا یا شی گرا ؟



fmehdi
یک شنبه 20 آبان 1386, 20:54 عصر
هر چی گشتم نفهمیدم سوالم رو کجا بپرسم ... خب اوردمش اینجا !!!
من هر کار می کنم نمی تونم تفاوت ساختگرا با شی گرا رو درک کنم و احتمالا بخاطر اینه که وقتی من و امثال من شروع به یادگیری برنامه نویسی کردیم دیگه نسل زبانهای ساختگرا خشکیده ...
از دوستان که درک درستی از این موضوع دارند خواهش دارم یه طوری چند مثال بیارن بگن که چرا شی گرا بهتر از ساختگرا و اصولا ساختگرا چطوریه ؟
شی گرا بودن مگه همین نیست که توابع و کلاس ها نیستند که برنامه ها رو کاربردیتر و قابل استفاده مجدد می کنند اما در زبان c با توجه به ساخت گرا بودنش ما تابع داریم و قادر به نوشتن تابع ( همون لابراری ها) و استفاده در سایر برنامه های خواهیم بود ...

Alireza Orumand
یک شنبه 20 آبان 1386, 22:05 عصر
درسته که شما میتونید به کمک توابع از باز نویسی کد جلو گیری کنید ولی این تنها مزیت این نوع برنامه نویسی نیست.
در برنام نویسی ماژولار درسته که شما میتونید همزمان داده و رویه رو در یک برنامه داشته باشید ولی میتونید یک ماژول رو بر مبنای یک ماژول دیگه بنویسید که تمام خواص اون رو داشته باشه ولی کاری اضافه تر از اون هم انجام بده؟ آیا میتونید تو یک ماژول یک متغیر از ماژول دیگه تعریف کنید؟
در واقع شی گرا قدم بعد از ماژولار هست که امکاناتی وراثت و پلیمورفیسم رو به ماژول ها اضفه کرد. و یک راه منطقی و بسیار ملموس(آبجک) برای تقسیم بندی قسمت های مختلف برنامه و داده های مربوط به اون رو در اختیار برنامه نویس قرار داد.
موفق و سر بلند باشید.

fmehdi
دوشنبه 21 آبان 1386, 20:05 عصر
ببخشید ... میتونید یه مثال هم بیارید ؟
پاسکال الان ساخت گراست اما دلفی شی گرا ... ؟ اما کدهاشون یکیه ...

emad_67
دوشنبه 21 آبان 1386, 22:27 عصر
ببین دوست عزیز در برنامه نویسی ساخت یافته یا ساخت گرا تکیه اصلی برنامه روی توابع هست در حالی که در در برنامه نویسی شی گرا پایه و اساس کار کلاس ها هستند. همون طور که دوستمون هم گفتن کلاس ها امکانات دیگه ای مثل پلیمرفیسم و وراثت رو به همراه خودشون دارن در واقع این مسائل که از اصول مهم برنامه نویسی شی گرا هستند با خود کلاس ها پیاده سازی میشن. یکی از مهمترین مسائل شی گرایی کپسوله کردن کد هاست. به این معنی که پیاده سازی کد دور از دید کاربر میمونه و کابر فقط اونو به کار میبره و نمیدونه که چه فرایندی انجام میشه که مثلا فلان دستور اجرا بشه. به طور مثال همین کلاس iostream رو در نظر بگیر. تو نمیدونی که در اون کلاس توابع چه جوری پیاده سازی شدن، فقط داری از دستورات اون استفاده میکنی. همین cin و cout ایی که تو همه برنامه ها استفاده شی ایی از کلاس iostream هستند. یه شی رو مثل یه ماشین در نظر بگیر. وقتی سوار ماشین میشی فقط ازش استفاده میکنی و دیگه جزئیات چگونگی حرکت و انقال نیرو و ... دور از چشم تو هست. شی هم همچین خاصیتی داره، یه سری متغیر و توابع رو در خودش داره و پیاده سازی توابع و چگونگی استفاده از متغیر ها رو نمیبینی چه بسا که ممکنه خیلی توابع و متغیر هایی باشن که از وجوشون هم خبر نداشته باشی.
اینجا ها رو هم ببینی بد نیست:
http://www.pylearn.com/fa/wiki/index.php/%D9%85%D9%81%D9%87%D9%88%D9%85_%D8%B4%DB%8C_%DA%AF %D8%B1%D8%A7%DB%8C%DB%8C
http://www.pylearn.com/fa/wiki/index.php/%D9%85%D9%81%D9%87%D9%88%D9%85_%D9%83%D9%84%D8%A7% D8%B3

Alireza Orumand
سه شنبه 22 آبان 1386, 14:37 عصر
پاسکال الان ساخت گراست اما دلفی شی گرا ... ؟
شما فقط دارید درباره بخشی از امکانات یه زبان صحبت میکنید که خوب از لحاظ سینتکس یکی هستن. با این نگرش سی و سی++ هم یکی هستن ولی از امکانات شی گرایی سی++ میشه تو سی استفاده کرد؟

Folaani
سه شنبه 22 آبان 1386, 19:22 عصر
منظور شما از ساخت گرا، برنامه نویسی ساختار یافته هست؟
والا دقیق نمیدونم ولی بنده فکر میکنم، شیء گرا درواقع ساختار یافته هم هست! درواقع ساختار یافتگی یک مفهوم عام تری هست و شیء گرایی فقط یک نوع پیشرفتهء اون هست. یا بگیم یک متد هم برای پیاده سازی ساختاریافتگی و هم اضافه کردن یکسری قابلیتهای بیشتر بهش که احتمالا اسم جداگانه ای داشته باشه (لابد همون شیء گرایی).
خب اول ساختار یافته اومد (عمدتا به کمک توابع)، بعدا شیء هم اختراع شد. احتمالا برای همین به اون زبانهای قدیمی تر که شیء گرایی ندارن ولی بهرحال برنامه نویسی ساختار یافته درشون ممکن هست (اکثرا جزء اصلی اون وجود تابع هست)، ساخت گرا گفته میشه.
فکر نمیکنم ساختار یافتگی فقط محدود به این ویژگیها (تابع و کلاس) هم باشه و ویژگیهای دیگری هم احتمالا، اگر نه بصورت خصیصه های اصلی، به ساختار یافتگی برنامه کمک میکنن.
البته این نظر بنده بود؛ قبلا مقالاتی راجع به اکثر اینها خوندم، ولی متاسفانه دقیق به یادم نمونده.
حالا نمیدونم شاید بنده اشتباه میکنم!

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

راستی پاسکال های مدرن فکر میکنم قابلیت برنامه نویسی شیء گرا هم داشته باشن. به گمانم اخیرا یک همچین چیزی جایی خوندم.
میدونید مثلا سی شیء گرا هم داریم ظاهرا! از اسمش معلومه بنظرم: Objective C

illegalyasync
سه شنبه 22 آبان 1386, 21:53 عصر
هر چی گشتم نفهمیدم سوالم رو کجا بپرسم ... خب اوردمش اینجا !!!
من هر کار می کنم نمی تونم تفاوت ساختگرا با شی گرا رو درک کنم و احتمالا بخاطر اینه که وقتی من و امثال من شروع به یادگیری برنامه نویسی کردیم دیگه نسل زبانهای ساختگرا خشکیده ...
از دوستان که درک درستی از این موضوع دارند خواهش دارم یه طوری چند مثال بیارن بگن که چرا شی گرا بهتر از ساختگرا و اصولا ساختگرا چطوریه ؟
شی گرا بودن مگه همین نیست که توابع و کلاس ها نیستند که برنامه ها رو کاربردیتر و قابل استفاده مجدد می کنند اما در زبان c با توجه به ساخت گرا بودنش ما تابع داریم و قادر به نوشتن تابع ( همون لابراری ها) و استفاده در سایر برنامه های خواهیم بود ...

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

بحث تفاوتهای برنامه نویسی ساختاری و بالا به پائین و برنامه نویسی شی گرا مال دههء نود هستش . الان حتی بحث کردن در مورد (Service Oriented Architecture (SOA یا
aspect-oriented programming (AOP) هم بحث روز نرم افزار نیستش
پاسکال و سی قبل از دههء نود شی گرا بودن و مسئله شی گرائی بحث روز بود و اسمال تاک و جاوا هم حداکثر تا 5 سال بعد از اون .
منظورم این نبود که نباید سوال کنید و یاد بگیرین . اما بهتره آدم زیاد معطل مطالبی که دو دهه از طرحشون گذشته و دیگه مرکز توجه نیستن نشه . ما الان تو شهر زندگی میکنیم ، بهتره در مورد زندگی پیشرفته و توسعه شهری فکر کنیم ، بجای اینکه مقاله و پی پر بدیم که چرا زندگی در شهر از زندگی در بیابان میان گرگها و کفتارها خیلی بهتر هست ! :)

Folaani
سه شنبه 22 آبان 1386, 22:08 عصر
صحبتهای شما هم خیلی اغراق آمیز و بیش از حد دور از حقیقت هست.
بالاخره کسی هم که میخواد یاد بگیره، اینها پایه هست و اغلب در روشهای نوین هم اساسی و دونستنش پیشفرض.
کجا ور افتاده؟ هنوز که هنوزه با همش داره کار میشه. مقداری هم به زمینهء فعالیت بستگی داره که با کدوم بیشتر سر و کار داشته باشید.
متاسفانه ما ایرانیها اشکال کار و تفاوتمون با خارجکی ها ! همین طور چیزها و جوگرفتگی و برنامه نویسی و مقولات علمی رو مثل مد دیدن و باهاش رفتار کردن هست.
میخوایم یه دفه بپریم پلهء آخر و دست به دوتا دکمه میزنیم، فکر میکنیم شدیم خلبان!

illegalyasync
سه شنبه 22 آبان 1386, 22:14 عصر
فکر میکنیم شدیم خلبان!

خوب شاید تو اینطوری باشی دلیل نمیشه همه اینطور باشن ;)
اگه توفیقی دست داد و به خارج از کشور سفر کردی در مورد برنامه نویسی بالا به پائین در سی و مزایاش نسبت به کلاس و ...سوال کن و فیدبکها رو ببین :) گفتم که منظور من سوال نکردن نیست . یاد گرفتن همیشه خوبه ولی وقتی سوالهائی مثل اینو آدم بارها میبینه و میخونه که تحت تاثیر بی سوادی و فقر پیشرفت تو دانشگاهها هست بهتره به قدیمی بودنش فکر کنه .

Inprise
سه شنبه 22 آبان 1386, 22:15 عصر
جواب سوالهای فنی رو بدید و در مورد سلائق و نظرات شخصیتون بحث بیمورد و نامربوط به تاپیک نکنید تا مطالبتون حذف نشه . مرسی

fmehdi
جمعه 25 آبان 1386, 18:39 عصر
ر بی سوادی و فقر پیشرفت تو دانشگاهها هست بهتره به قدیمی بودنش فکر کنه .
باید به عرض برسانم بنده هنوز دیپلم هم ندارم ... پس اگه شما بلدی دلیل نیست تو ذوق ما بزنی :چشمک:


از همه دوستان تشکر می کنم که بنده رو راهنمایی کردند