انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: abbasalim در 30 فروردین 1392، 12:13 ب‌ظ

عنوان: مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: abbasalim در 30 فروردین 1392، 12:13 ب‌ظ
بنام خدا
سلام

جاتون خالی هفته پیش باید پروژه جاوامون رو تحویل استاد می دادیم
 همه بچه ها اومده بودن خوشحال وخندون  \\:D/
منتظره یه نمره کامل و خسته نباشیده این همه زحمتی که کشیدن

اومدن  که پروژه هامون رو ببینن با کمال تعجب به اکثریت کلاس فقط نصف نمره رو دادن

میگفتیم آخه چرا ما که کدهامون کامل اجرا میشه،حتی همه استثنا ها هم واسش تعریف کردم

میگفتن آخه کدهاتون شی گرا نیس  :o

همین دیگه همه  :'( گریون رفتیم خونه هامون  ](*,)



میخواستم بینم دقیقا این شی گرایی یعنی چی؟ یعنی کد چجوری باشه شی گراس؟
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: دانیال بهزادی در 30 فروردین 1392، 01:00 ب‌ظ
قبل از هر چیز برو یه فحش به اون استاد بی‌سوادت بده، بعد بیا برات تعریف کنم.

اومدی؟ خب این (https://fa.wikipedia.org/wiki/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C_%D8%B4%DB%8C%D8%A1%DA%AF%D8%B1%D8%A7) تعریف رسمی‌شه.
و جالبه بدونی که افراد زیادی با این شیوه‌ی برنامه‌نویسی مخالفن از جمله کسی که خودش این ایده رو داده بود. از جمله ی مخالفان این شیوه می‌شه به ادگار دکسترای بزرگ (خدای علم رایانه)، کن تامپسون (خالق یونیکس)، مرحوم دنیس ریچی فقید (خالق C و یونیکس)، کرانیگان (خالق C)، ریچارد استالمن (آخرین هکر واقعی و خالق GCC و سیستم‌عامل گنو)، لینوس تروالدز (خالق لینوکس و گیت)، روب پیکه (خالق UTF-8)، رابرت گریسمر (Go)، راس کاکز (Go)، اندرو جرارد (Go)، ریچ هایکی (Clojure)، جو آرمسسترانگ (Erlang, OTP)، سیمون پیتون‌جونز (Haskel, GHC)، پل گراهام (Arc, Disqus, Dropbox, reddit, Scribd) و… اشاره کرد. فکر کنم تا به حال متوجّه شده باشی که این‌ها اتّفاقاً تأثیرگذارترین افراد در دنیای رایانه هستن و هیچ کدومشون هم تابه‌حال برنامه‌ی شیٔ‌گرا ننوشتن. حالا این لیست رو هم ببر و به استادت نشون بده و بگو اگه می‌تونه به اون‌ها هم نمره نده
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: محمدرضا ح. در 30 فروردین 1392، 01:05 ب‌ظ
دانیال جان دوباره خاطرم رو از دانشجوی ترم آخر نرم افزار بگم؟

اومد گفت C شیء گرا نیست چون رابط گرافیکی همراهش نصب نمیشه :o و اصلا زبان خوبی نیست و کاملا منسوخ شده :o !!!!!

من فقط این شکلی بودم : :o .

از طرفی هم جاوا هم میدونم که کاملا شی گراست و غیر شی گرا نمیشه توش کدنویسی کرد! تو تاپیک معرفی زبان Go هم بحث جالبی در این باره شد :D .

بعدش چی فکر میکنید؟ این دانشجو لیسانسش رو میگیره و بعد تو دوره ارشد و دکترا میشه استاد. نهایتا هم کسانی زیر دستش تربیت میشن که میگن «ویندوزم مکه» «ویندوزم لینوکسه» «ویستا از ویندوز بهتره» و ... :o
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: abbasalim در 30 فروردین 1392، 01:11 ب‌ظ
اونوقت اینا رو به استاد بگم به نظرت دیگه راهی واسه پاس شدنش دارم؟  :-k :-k :-k #-o


عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: محمدرضا ح. در 30 فروردین 1392، 01:14 ب‌ظ
اونوقت اینا رو به استاد بگم به نظرت دیگه راهی واسه پاس شدنش دارم؟  :-k :-k :-k #-o

بعید میدونم ;D
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: دانیال بهزادی در 30 فروردین 1392، 01:16 ب‌ظ
اومد گفت C شیء گرا نیست چون رابط گرافیکی همراهش نصب نمیشه :o و اصلا زبان خوبی نیست و کاملا منسوخ شده :o !!!!!
=)) ترکیدم! ;D
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: ! در 30 فروردین 1392، 01:18 ب‌ظ
و اما شی گرایی :

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

و حالا شی گرایی در جاوا با مثال :

یک کلاس به اسم ReturnName میسازیم با کد زیر :

public class ReturnName {

private String Name;

public ReturnName(String name){
Name = name;
}

public ReturnName(){
Name = null;
}

public void setName(String name){
Name = name;
}

public String getName(){
return Name;
}

}


این یک کلاس ساده با تکنیک شی گراست که توش سازنده و متد های set و get داریم

سازنده (constractor) چیست ؟

کد بالا رو قشنگ بخونید.سازنده متدیست که مقدار برگشتی نداره و برای مقدار دهی اولیه استفاده میشه.
کلاس theMain رو به عنوان کلاس اصلی که تابع main  توش هست میسازیم با کدهای زیر :

public class theMain {

public static void main(String[] args){

ReturnName rn1 = new ReturnName();
ReturnName rn2 = new ReturnName("Ubuntu forums");

System.out.println(rn1.getName());
System.out.println(rn2.getName());
}
}


این کلاس تو تابع main  دو شی از نوع ReturnName تعریف میکنه که اولیش مقدار اولیه نداره و دومیش با مقدار "ubuntu forums" مقدار دهی شده. دقیقا کدهای زیر این کارو تو تابع main کردند :

ReturnName rn1 = new ReturnName();
ReturnName rn2 = new ReturnName("Ubuntu forums");

خب حالا برمیگردیم سر کلاس ReturnName :

تو اون کلاس کدهای پایین دو تا سازنده تعریف میکنن واسه کلاس.تعریف سازنده رو گفتیم.سازنده نباید نوع برگشتی داشته باشه و باید دقیقا همنام کلاس باشه و به هر تعذ=داد میتونه باشه اما پارامترهای ورودی هر شسازنده باید با دیگری فر ق کنه.سازنده ها تو اون کلاس با کدهای پایین تعریف شدند :

public ReturnName(String name){
Name = name;
}

public ReturnName(){
Name = null;
}

که دومی یک شی بدون پارامتر میسازه و اولی یک شی با یک پارامتر ورودی از نوع رشته!

خب حالا بقیشو خودت یاد بگیر.

اینارو:

وراثت و چند ریختی :)

اگه حوصلم اومد یه تاپیک تو انجمن درست میکنم و توضیح میدم یروز 8)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: Mostafa Jalilianfar در 30 فروردین 1392، 01:44 ب‌ظ
شی‌گرا یک نگرش برنامه نویسیه و حالا تبدیل به یک مدل و استاندارد شده نه تنها در برنامه نویسی بلکه در مدلینگ - بانکهای اطلاعاتی - مستندسازی و ...
استاد شما شی‌گرا بودن رو با ویژوال بودن اشتباه گرفته
ولی من مثل بسیاری دیگه به شدت موافق سبک برنامه نویسی شی‌گرا هستم برخلاف دوستانی که دانیال بهزادی اسم برد
برنامه نویسی شی‌گرا خوبیهاش بسیار بیشتر از بدیهاشه. درسته که پیدا کردن راه حل و از سر گیری برنامه نویسی رو سخت می‌کنه ولی در کاهش مقدار کد موثره و برنامه رو قابل استفاده مجدد می‌کنه (البته برنامه نویسی ساخت یافته هم همین امکان رو داره) و به برنامه شکل و قالب درست و قابل درک میده

یادتون نره که برنامه نویسی شی‌گرا ۳ هدف رو دنبال می‌کنه
۱- کپسوله سازی
۲- ارث بری
۳- چند ریختی بودن

الان دیگه کمتر در مورد برنامه نویسی شی‌گرا حرف زده میشه چون نوع دیگه‌ای از برنامه نویسی رو داریم به اسم سرویس‌گرا.
هرچند برنامه نویسی سرویس‌گرا کاملا وابسته به شی هستش و باید از برنامه نویسی شی‌گرا استفاده بشه
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: fond در 30 فروردین 1392، 03:29 ب‌ظ
قبل از هر چیز برو یه فحش به اون استاد بی‌سوادت بده، بعد بیا برات تعریف کنم.

اومدی؟ خب این (https://fa.wikipedia.org/wiki/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C_%D8%B4%DB%8C%D8%A1%DA%AF%D8%B1%D8%A7) تعریف رسمی‌شه.
و جالبه بدونی که افراد زیادی با این شیوه‌ی برنامه‌نویسی مخالفن از جمله کسی که خودش این ایده رو داده بود. از جمله ی مخالفان این شیوه می‌شه به ادگار دکسترای بزرگ (خدای علم رایانه)، کن تامپسون (خالق یونیکس)، مرحوم دنیس ریچی فقید (خالق C و یونیکس)، کرانیگان (خالق C)، ریچارد استالمن (آخرین هکر واقعی و خالق GCC و سیستم‌عامل گنو)، لینوس تروالدز (خالق لینوکس و گیت)، روب پیکه (خالق UTF-8)، رابرت گریسمر (Go)، راس کاکز (Go)، اندرو جرارد (Go)، ریچ هایکی (Clojure)، جو آرمسسترانگ (Erlang, OTP)، سیمون پیتون‌جونز (Haskel, GHC)، پل گراهام (Arc, Disqus, Dropbox, reddit, Scribd) و… اشاره کرد. فکر کنم تا به حال متوجّه شده باشی که این‌ها اتّفاقاً تأثیرگذارترین افراد در دنیای رایانه هستن و هیچ کدومشون هم تابه‌حال برنامه‌ی شیٔ‌گرا ننوشتن. حالا این لیست رو هم ببر و به استادت نشون بده و بگو اگه می‌تونه به اون‌ها هم نمره نده

منبعی برای این دارید؟
ممنون
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: dr.b4ne در 30 فروردین 1392، 03:33 ب‌ظ
آقا دانیال شی گرایی در جای خودش کاربرد داره ساخت یافته در جای خودش سرویس گرا در جای خودش (functional . . )(ترجمشو نمیدونم چی میشه . . .) در جای خودش . هر چیزی جای خودش . . .

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

همین .

تعصب خوب نیست (اینو به دانبال نگفتم به همه میگم)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: دانیال بهزادی در 30 فروردین 1392، 03:54 ب‌ظ
من تعصّبی ندارم روی شیٔ‌گرا نوشتن یا ننوشتن. حتا خودم هم از برنامه‌هایی که شیٔ‌گرا نوشته شده باشن استفاده می‌کنم (گرچه خودم هیچ‌وقت شیٔ‌گرا نمی‌نویسم). ولی این که از دانشجوی بیچاره نمره کم کنیم برای انجام کاری که بزرگان یک علم هم همون کار رو می‌کنن واقعاً به نظرم حماقت و تعصّب روی روش خودمونه.
منابعش هم یک سری این‌جا (https://en.wikipedia.org/wiki/Object-oriented_programming#Criticism)ست و یک سری هم در PDF آموزشی زبان Go که فارسی‌اش توی همین انجمن وجود داره.
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: dr.b4ne در 30 فروردین 1392، 04:01 ب‌ظ
وقتی سیلابس درس برنامه نویسی پیشرفته در وزارت علوم بر مبنای برنامه سازی شی گرا گذاشته شده . حالا اگه من هم استاد بودم و دانشجوهام برنامه هاشون شی گرا نبود نمره نمیدادم . حتی اگر سرویس گرا مینوشتن . .
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: ! در 30 فروردین 1392، 04:08 ب‌ظ
اینکه از دانشجو نمره کم کنیم برای اینکه تو یادگیری شی گرایی که بخش مهمی از برنامه نویسی با جاواست مشکلی که نداره هیچ، بایدم کم بشه!
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: دانیال بهزادی در 30 فروردین 1392، 04:16 ب‌ظ
اگه قرار به رعایت استانداردهای وزارت علومه، در درس برنامه‌نویسی پیشرفته باید ++C درس داده بشه، نه جاوا! در ضمن همون طوری که گفتم من هیچ مشکلی با برنامه‌نویسی شیٔ‌گرا ندارم و مقصودم از ذکر اون نام‌ها هم ذکر این پرسش بود که اگه قرار باشه برای شیٔ‌گرا ننوشتن از کسی نمره کم بشه، پس به‌وجود آورندگان دنیای رایانه باید نمره‌ای زیر صفر می‌گرفتن؟ چون هیچ کدوم از برنامه‌نویسی شیٔ‌گرا استفاده نکردن.
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: ! در 30 فروردین 1392، 04:18 ب‌ظ
اگه قرار به رعایت استانداردهای وزارت علومه، در درس برنامه‌نویسی پیشرفته باید ++C درس داده بشه، نه جاوا! در ضمن همون طوری که گفتم من هیچ مشکلی با برنامه‌نویسی شیٔ‌گرا ندارم و مقصودم از ذکر اون نام‌ها هم ذکر این پرسش بود که اگه قرار باشه برای شیٔ‌گرا ننوشتن از کسی نمره کم بشه، پس به‌وجود آورندگان دنیای رایانه باید نمره‌ای زیر صفر می‌گرفتن؟ چون هیچ کدوم از برنامه‌نویسی شیٔ‌گرا استفاده نکردن.

این که ی عده استفاده نکردن اصلاً دلیل خوبی نیست.

دلیل منطقی بگید لا اقل این حرفا واسه ترولاست نه شما!!!!!!  ](*,)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: vandu در 30 فروردین 1392، 04:23 ب‌ظ
اگه استادتون شی گرایی تدریس کرده و شما اسپاگتی نوشتی من حق رو به استادتون میدم.
شی‌گرایی روش بدی نیست. ولی مثلا فکر نکنم بشه در ساخت کرنل یه سیستم‌عامل ازش استفاده کرد. چون کند و سنگین خواهد شد. اصولا شی‌گرایی هدفش اینه که توسعه برنامه‌ها راحت‌تر بشه.
در روش قدیمی (functional) توسعه دادن برنامه و اضافه کردن یک سری مشخصات به برنامه تقریبا مشکل بود. البته باز هم بر‌میگرده به نوع functional نوشتن. ممکنه کد به صورت قدیمی نوشته بشه ولی توسعه‌اش خیلی هم راحت باشه. اما شی‌گرایی شما رو مجبور می‌کنه به اجبار یه سری قواعد...
در ادامه، همین روش شی‌گرا مسبب ایجاد یک سری design pattern شده که اونها هم شما رو در یک قالب از پیش آماده شده و امتحان پس داده قرار میدن. مثل MVC Pattern و یا خیلی از معماری‌های دیگه...
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: dr.b4ne در 30 فروردین 1392، 04:26 ب‌ظ
اگه قرار به رعایت استانداردهای وزارت علومه، در درس برنامه‌نویسی پیشرفته باید ++C درس داده بشه، نه جاوا .
وزارت علوم هیچ مصوبه ای در مورد استفاده از زبان خاصی ندارد (اگه دارد لطفا منبع معرفی کنید ) بلکه میگه مبانی به روش ساخت یافته و پیشرفته به روش شی گرا حالا ساخت یافته میتونه سی باشه سی پلاس باشه یا حتی دلفی و . . . باشه پیشرفته هم میتونه سی پلاس باشه جاوا باشه یا اصلا سی شارپ ملعون باشه (تو دانشگاه ما هر دوشو cpp گفتن و من هم نسبت فامیلی با استاد و جاوا ندارم و خوشمم از جاوا نمیآد)
 اماااااااااااااااااااااااااااااااااااااااا
بزار بزرگان کار خودشونو بکنن (هر چند که بعید میدونم اونها اندازه شما نسبت به شی گرایی جسارت کرده باشند) استاد باید وظیفشوکه بهش گفته شده و بر مبنای همون برنامه ریزی صورت گرفته  انجام بده  آموزش شی گرایی . ارزشیابی شی گرایی . حالا اگه یه بنده خدایی میآد از خاطراتش ایج مینویسه که استاد باب میل ایشون نمره نداده شما نباید عقاید شخصیتونو ضمیمه ی صحبت هاش کنید . هرچند که پست ایشون تا حدودی زیادی (مثل این پست و پست های اخیر من) شبیه اسپمه . . .
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: vandu در 30 فروردین 1392، 04:48 ب‌ظ
وزارت علوم هیچ مصوبه ای در مورد استفاده از زبان خاصی ندارد (اگه دارد لطفا منبع معرفی کنید )
در سرفصل‌های وزارت علوم دقیقا قید شده که باید چه زبانی آموزش داده بشه.
برای مهندسی نرم افزار سرفصل‌هاش روی سایت نیست ولی مثلا میشه سرفصل‌های وزارت علوم برای رشته مهندسی فناوری اطلاعات (http://www.msrt.ir/sites/Talented/shora/DocLib/%DA%AF%D8%B1%D9%88%D9%87%20%D9%81%D9%86%D9%8A%20%D9%88%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A/%D9%83%D8%A7%D8%B1%D8%B4%D9%86%D8%A7%D8%B3%D9%8A%20%D9%BE%D9%8A%D9%88%D8%B3%D8%AA%D9%87/%DA%AF%D8%B1%D9%88%D9%87%20%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A%20%D9%81%D9%86%D8%A7%D9%88%D8%B1%D9%8A%20%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA/%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A%20%D9%81%D9%86%D8%A7%D9%88%D8%B1%D9%8A%20%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA/%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A%20%D9%81%D9%86%D8%A7%D9%88%D8%B1%D9%8A%20%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA.pdf) رو دانلود کرد. در صفحه ۲۰ دقیقا زبان c++‎ قید شده. برای رشته‌های کاردانی هم سرفصل‌های قدیمی آموزش و پرورش وجود داره که دقیقا اونجا هم از c++‎ نام برده شده...
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: dr.b4ne در 30 فروردین 1392، 04:58 ب‌ظ
وزارت علوم هیچ مصوبه ای در مورد استفاده از زبان خاصی ندارد (اگه دارد لطفا منبع معرفی کنید )
در سرفصل‌های وزارت علوم دقیقا قید شده که باید چه زبانی آموزش داده بشه.
برای مهندسی نرم افزار سرفصل‌هاش روی سایت نیست ولی مثلا میشه سرفصل‌های وزارت علوم برای رشته مهندسی فناوری اطلاعات (http://www.msrt.ir/sites/Talented/shora/DocLib/%DA%AF%D8%B1%D9%88%D9%87%20%D9%81%D9%86%D9%8A%20%D9%88%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A/%D9%83%D8%A7%D8%B1%D8%B4%D9%86%D8%A7%D8%B3%D9%8A%20%D9%BE%D9%8A%D9%88%D8%B3%D8%AA%D9%87/%DA%AF%D8%B1%D9%88%D9%87%20%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A%20%D9%81%D9%86%D8%A7%D9%88%D8%B1%D9%8A%20%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA/%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A%20%D9%81%D9%86%D8%A7%D9%88%D8%B1%D9%8A%20%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA/%D9%85%D9%87%D9%86%D8%AF%D8%B3%D9%8A%20%D9%81%D9%86%D8%A7%D9%88%D8%B1%D9%8A%20%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA.pdf) رو دانلود کرد. در صفحه ۲۰ دقیقا زبان c++‎ قید شده. برای رشته‌های کاردانی هم سرفصل‌های قدیمی آموزش و پرورش وجود داره که دقیقا اونجا هم از c++‎ نام برده شده...

خوب این که خوب میشه اگه همه از cpp استفاده کنن . من نمیدونستم زبان هم مصوب میشه چه بهتر که c++ مرجع شده .
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: vandu در 30 فروردین 1392، 05:16 ب‌ظ
خوب این که خوب میشه اگه همه از cpp استفاده کنن . من نمیدونستم زبان هم مصوب میشه چه بهتر که c++ مرجع شده .
درس برنامه‌سازی پیشرفته طبق قاعده فقط c++‎ تدریس میشه. اما معمولا در درس «مباحث ویژه» (یا مثلا «برنامه نویسی وب») هر کسی بر اساس سلیقه و تسلطی که به یک زبان داره همون رو تدریس می‌کنه. البته اون زبان باید به روز باشه. هرچند هستند کسانی که هنوز VB6 و asp (و نه asp.NET) تدریس می‌کنن!!
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: MHA152 در 30 فروردین 1392، 05:48 ب‌ظ
آقای بهزادی میشه بفرمایید چرا این بزرگان مخال شی گرایی بودند؟؟
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: abbasalim در 30 فروردین 1392، 06:15 ب‌ظ
 ](*,) ](*,)
والا من میخواستم ببینم شی گرایی چیه
چقدر مبحث منحرف شد  :o
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: MHA152 در 30 فروردین 1392، 06:16 ب‌ظ
چقدر مبحث منحرف شد  :o
کدوم انحراف؟هنوز هم بحث سر شی گراای است
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: Mostafa Jalilianfar در 30 فروردین 1392، 06:36 ب‌ظ
](*,) ](*,)
والا من میخواستم ببینم شی گرایی چیه
چقدر مبحث منحرف شد  :o

ساختار، زبان و یا روشی که در اون از سه مبحث زیر استفاده شهه باشه شی‌گرا میشه
۱- کپسوله سازی
۲- ارث بری
۳- چند ریختی بودن

کلا نگرش به همه اجزای یک برنامه (بانک اطلاعاتی و یا هر چیز دیگه‌ای) به عنوان یک شی و پیاده سازی اون به عنوان شی رو روش برنامه‌نویسی شی‌گرا میگن
در زبانهای شبه سی مثل سی پلاس پلاس - جاوا و ... از کلاس برای پیاده سازی شی استفاده میشه
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: محمدرضا ح. در 30 فروردین 1392، 06:41 ب‌ظ
آقای بهزادی میشه بفرمایید چرا این بزرگان مخال شی گرایی بودند؟؟

چون سرعت توسعه رو کم میکنه. مثلا سیستم عامل Haiku داره بصورت شی گرا نوشته میشه هنوز آلفاست! ولی لینوکس رو ببین :D (البته مثالم شدیدا مشکل داره ::) ) .
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: MHA152 در 30 فروردین 1392، 06:49 ب‌ظ
سرعت توسعه را کم می کنه ؟؟؟???
اتفاقا من فکر کنم سرعتش باید بیشتر هم باشه از نظر منطقی که خیلی باید بهتر از روالی باشه
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: 不眠症 در 30 فروردین 1392، 07:17 ب‌ظ
شی گرایی یعنی هرچیزی رو شی دیدن و برای هر شی ای یک رفتار یا خصوصیت مجزا در نظر گرفتن.
شی گرایی مثل چاقوی دو لبه است و باید به جا مصرف بشه و همینطور سربار زیادی داره. بعضی جاها به شدت نیازه و بعضی جاها اصلا نباید استفاده بشه. برای همین در جاهایی که شی گرایی مهم نیست اگر استفاده بشه سرعت توسعه پایین میاد(برای پروژه های کوچک) و همین طور برعکس اگر شی گرا لازم باشه استفاده نشه سرعت توسعه پایین میاد و هزینه توسعه رو فقط بیشتر میکنه.

عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: MHA152 در 30 فروردین 1392، 07:20 ب‌ظ
پس برای پروژه های بزرگ(ارتقاء کرنل) به جا است و سرعت را بالا می بره
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: Object69 در 30 فروردین 1392، 08:04 ب‌ظ
دوستان عزیز شما ظاهرا فراموش کردید که در دانشگاه طبق نظر استاد باید عمل کرد .
اون میخواد نمره بده و اگر خلاف نظرش عمل بشه خوب طبیعی هست که نمره رو نمیده .. وقتی استاد میگه باید شی گرا بنویسید خوب باید همون کارو کرد . من خودم تا الان خیلی به مواردی برخوردم که استاد ها اشتباه میکنند یا دلایل عجیب و قریبی میاوردند که اغصاب خرد کن بود ولی بازم باید تحمل کرد . اگر مدرک دانشگاهی رو میخواید اگرم نمیخواید که هیچ .
حاالا در مورد شی گرایی : شی گرایی روش خوبی برای برنامه نویسی هست ولی تا حد خودش . اگر از حد خودش بگذره بی مزه میشه و برنامه نویسی رو سخت میکنه . چه بخوایم چه نخوایم برنامه نویسی داره به سمت شی گرایی پیش میره . و کسایی که بخواند برنامه های کاربردی بنویسند خواه نا خواه باید از قائده پیروی کنند . منم خودم با برنامه نویسی شی گرا خیلی موفق نیستم ولی متاسفانه بعضی اوقات مجبوریم که به این روش بنویسیم . 
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: Mostafa Jalilianfar در 30 فروردین 1392، 08:27 ب‌ظ
پس برای پروژه های بزرگ(ارتقاء کرنل) به جا است و سرعت را بالا می بره

برای نوشتن کرنل و درایورهای سخت افزاری از زبانهای برنامه نویسی سطح بالا استفاده نمیشه
از زبانهایی مثل اسمبلی و سی استفاده میشه که هیچکدوم از اونها از برنامه نویسی شی‌گرا پشتیبانی نمی‌کنن
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: dr.b4ne در 30 فروردین 1392، 10:46 ب‌ظ
چون سرعت توسعه رو کم میکنه. مثلا سیستم عامل Haiku داره بصورت شی گرا نوشته میشه هنوز آلفاست! ولی لینوکس رو ببین :D (البته مثالم شدیدا مشکل داره ::) ) .
دوست عزیز احتمالا دچار سوء برداشت شدید توسعه و عیب یابی سریعتر از اصلی ترین مزایای شی گرایی است در صورتی که شی گرایی معایبی نیز دارد
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: MHA152 در 30 فروردین 1392، 10:51 ب‌ظ
پس برای پروژه های بزرگ(ارتقاء کرنل) به جا است و سرعت را بالا می بره

برای نوشتن کرنل و درایورهای سخت افزاری از زبانهای برنامه نویسی سطح بالا استفاده نمیشه
از زبانهایی مثل اسمبلی و سی استفاده میشه که هیچکدوم از اونها از برنامه نویسی شی‌گرا پشتیبانی نمی‌کنن
سی++ هم که میانی است و قابلیت های زبان های سطح پایین را داره
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: Mostafa Jalilianfar در 30 فروردین 1392، 11:47 ب‌ظ
سی++ هم که میانی است و قابلیت های زبان های سطح پایین را داره

سی پلاس سطح بالاست
بگذریم بحث خیلی به بیراهه رفته  فکر می کنم بهتره از همینجا بحث رو تموم کنیم اگه کسی در مورد برنامه نویسی شی‌گرا مشکلی داره عنوان کنه و بهتره در مورد توسعه برنامه و کرنل و اینجور چیزا در این تاپیک دیگه بحث نشه
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: محمدرضا ح. در 30 فروردین 1392، 11:50 ب‌ظ
سی++ هم که میانی است و قابلیت های زبان های سطح پایین را داره

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

توی چندتا کتاب گفتند سطح میانی.

کلا میشه توی هر زبان غیر شی گرایی شی گرایی رو پیاده سازی کرد. این که عده ای ازش استفاده میکنند یا نمیکنند به خودشون مربوط هست :)

مساله پست اول : کاش از دوستمون (استادتون) بپرسید منظورش دقیقا از شی گرایی چیست؟ و اگر دلیل علمی آورد و گفت اینجا و اونجای کدت شی گرا نیست و ... حتما شی گرا نیست. باز هم میتونی روی فروم های داخلی و خارجی و دوستان خوبی مثل داریوش عباسی حساب کنی ;)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: abbasalim در 31 فروردین 1392، 12:48 ق‌ظ
اینکه استادمون حالی هست یا نه که حالیشه یه خزش گر هم ساخته تازه این رو هم به عنوان پایان نامه هست چیه؟ واسه دکتری ساخته:

http://www.parsijoo.ir/

ولی خوب تو درس دادنش  :(
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: AmirrezaGhaderi در 31 فروردین 1392، 02:21 ق‌ظ
از اونجایی که توی این بحث، به کتابچه‌ای که من نویسنده‌اش بودم اشاره شده، شاید بد نباشه من هم چند خط توضیح راجع به شی‌گرایی بدم.

واژه‌ی «شی‌گرا» یا object-oriented واژه ایی هست که Alan Kay ابدا کرد. اگر این آقا رو نمیشناسید، عین کسی هستید که فوتبال دوست داره
ولی رونالدو رو نمیشناسه! اول یه توضیحی بدم که این آقا کی هست:
- یکی از بزرگ‌ترین و موثرترین افراد در علوم کامپیوتر
- پرفسور دانشگاه MIT
- از هکرهای معروف LISP
- از افرادی که زبان Smalltalk رو بنا کردند
- موثرترین فرد در توسعه‌ی ایده‌ی Laptop و GUI
- برنده‌ی جایزه‌ی  ACM Turing (معادل نوبل در علم کامپیوتر) و جایزه‌ی Kyoto Prize
- جمله‌ی معروف The best way to predict the future is to invent it هم از ایشون هست.

خوب حالا برسیم به بحث اصلی. ایشون در اصل ایده‌های شی گرایی رو در زبان lisp پیاده‌سازی کردن و در واقع از خود این زبان الهام گرفتن این
ایده رو. اگه با lisp آشنا نباشید واقعا چیز زیادی از برنامه‌نویسی نمیدونید!! بعدها تمام اون ایده‌ها رو به صورت شسته رفته تر در زبان
جدیدی به اسم Smalltalk پیاده سازی کردن. وقتی ازشون در یک ایمیل سوال شده بود موقع کار روی ایده‌ی شی ‌گرایی توی فکرتون چه چیزی بوده
دقیقا، ایشون اینطوری جواب دادن [1]:
«من یک object رو به صورت سلول‌های بیولوژیک، و یا کامپیوترهای مستقلی که در یک شبکه قرار دارن تصور میکنم که تنها راه ارتباط اون‌ها با
 هم از طریق انتقال پیام هست...»
پس هر آبجکت کاملا مستقل هست، و از طریق انتقال پیام با بقیه آبجکت ها در اتباط هست. قضیه کپسوله سازی هم در حقیقت به مستقل بودن یک
آبجکت اشاره میکنه نه اینکه فیلدهای یک آبجکت به صورت خصوصی باشه و به زبون دیگه مخفی سازی صورت بگیره. این دقیقا همون «برنامه‌نویسی
همروند» یا Concurrent هست، به حالتی که از شیوه‌ی انتقال پیام یا Message Passing برای ارتباط بین اجزای همروند برنامه‌ استفاده بشه.
زبان‌هایی مثل Go, Erlang, Haskell, Scala, Clojure به بهترین شکل قادر به برنامه‌نویسی با چنین شیوه ایی هستن. اگه دقت کنید به غیر از
 Go، بقیه شون در واقع Functional هستن! اگه گاهی در جایی میخونید که این زبان ها، اتفاقا جزو بهترین زبان های شی‌گرا هستن، قضیه همینه!
اگه دقت کنید این زبان‌ها خودشون رو به عنوان زبان‌های Concurrent معرفی میکنن. زبانی که ذاتا Concurrent هست دیگه نیازی به شی‌گرا بودن
نداره چون در واقع به حالت عادی شی‌گرا هست!!! اما نه اون شی‌گرایی که در بین عام برنامه‌نویسان جا افتاده. اون شی‌گرایی که خود Alan Kay
در نظر داشت به بهترین نحو در Go و Erlang پیاده سازی شده. در جایی دیگه هم Alan Kay میگه مهم ترین عنصر شی‌گرایی در واقع مفهوم انتقال
پیام هست....

حالا همین جا دست نگه دارید و یه توضیح دیگه رو گوش کنید:

در همون روزهای اولیه شی‌گرایی، زبان دیگه ایی به اسم Simula در حال توسعه بود که برای ساخت برنامه‌های شبیه‌سازی در نظر گرفته شده بود. Simula با قسمت‌های مجزای کد مانند اشیای دنیای واقعی برخورد میکرد (به هر حال برای شبیه سازی ساخته شده بود!). هر شی میتونه تعدادی
خصیوصیت داشته باشه، و تعدادی رفتار... این توضیحات برای شما آشنا نیست؟ این چیزی هست که در بین عام برنامه‌نویسان جا افتاده. دلیلش؟
زبان ++C به عنوان اولین زبان ‌شی‌گرای موفق، از نگرش Simula برای ایده‌های شی‌گرایی استفاده کرد.بعد از اون هم Java دنبال روی ++C شد و دو
تایی به عنوان قدرت‌های اول شی‌گرایی شناخته شدن. بقیه زبان‌ها هم مثل Python یا PHP راه Java و ++C رو ادامه دادن. حتی چیزهایی مثل کلاس یا
زیرکلاس در حقیقت از Simula اومده. در واقع اصلا لازم نیست یک زبان شی گرا حتما دارای ساختار class باشه، این روش فکری simula بوده و دلیل نمیشه همه باهاش موافق باشن. و این شد که اکثر زبان‌هایی که امروزه به عنوان زبان‌های شی گرا میشناسید، بر پایه‌ی ایده های اصلی Alan Kay
 شکل نگرفتن. هر چند که بعد ها به مرور زمان خیلی از این ایده ها با هم مخلوط شدن اما در بطن خودشون از اساس با هم فرق دارن.


حالا شما قضاوت کنید: با این همه مباحث مربوط به کپسوله سازی، اجزای یک برنامه در Java مستقل تر هستن یا اجزای یک برنامه در Clojure ؟
حتی مقایسه‌ی جاوا با چیزی مثل Clojure یا Haskell در این زمینه خنده‌ داره.
یا با این همه مانور روی استفاده مجدد از کد، آیا کلاس‌های نوشته شده در جاوا قابلیت استفاده‌ی مجدد راحت تری رو دارن یا توابع کوچکی که در
Clojure و Haskell ایجاد میکنین؟

یا یک زبانی مثل Go رو در نظر بگیرید. افراد پشت این زبان حرفشون اینه: مگه ساختار class و مباحث مربوط به اون همون چیزی نبود که شما
با struct های C در اختیار داشتین؟ مگه توی c نمیشه برای یک struct فیلد تعریف کرد؟ مگه نمیشه متد تعریف کرد؟ این زبان ها فقط از
نظر سینتکس و روش استفاده، کاری کردن که شما با ساختار class همون کارها رو راحت تر و با انعطاف پذیری بالاتر انجام بدید. خوب اگه قضیه
اینه، ما نیاز به ساختار class نداریم، ما این راحتی و انعطاف پذیری رو با همون struct هایی که در C باهاشون کار میکردید به شما تقدیم
میکنیم. همه این‌ها به کنار، این که این زبان ذاتا Concurrent هست هم به کنار... اتفاقا همچین زبانی شی‌گرا تر از خیلی از زبان‌های دیگه‌اس.
مساله ایی که هست، اینه که چیزی مثل Java یا ++C معرف برنامه‌نویسی شی‌گرا نیستن. لازم نیست همه شی‌گرایی رو درست عین اینها تعریف کنن.

خوب این یعنی شی‌گرایی با مدل Java و ++C بده؟ خیر. هر چیزی در جای مناسب استفاده بشه خوبه. هر چیزی به مقدار مناسب استفاده بشه خوبه.
اما برنامه‌نویس های این زبان ها ایده های شی گرایی رو تا جایی پیش میبرن که مغز آدم سوت میکشه. خیلی مواقع جوری کد نویسی میکنن که آدم
از خودش سوال میکنه آخه چرااااااااااا؟؟ این کاری که شما با پنج تا کلاس انجام دادی و کلی کد نوشتی (فقط به این دلیل که شیوه‌ی پیاده سازی
شی گرا باشه)، میشد با دو تا تابع ساده انجامش داد!

اما اگه همین شی گرایی رو در اندازه‌ی مناسب و جای مناسب به کار برد، خیای هم خوبه و باعت بهتر شدن ساختار برنامه میشه. مثلا یکی از
جاهایی که این مدل برنامه‌نویسی خیلی خوب توش جواب میده برنامه سازی GUI هست.
کجاها خوب جواب نمیده؟ یکی از این جاها موقع برنامه‌نویسی همروند هست. موقعی که اجزای برنامه باید واقعا مستقل از هم باشن، به طوری که حتی بتونن مستقل از هم اجرا بشن! (در صورت امکان اجرای موازی). در چنین شرایطی هست که زبان‌هایی مثل Go و Erlang و Clojure و
Haskell  خیلی عالی عمل میکنن.

اون افرادی هم که اسمشون ذکر شده، در واقع منظورشون از شی‌گرایی چیزی هست که در Java و ++C میبینید. نه اینکه با این روش مخالف باشن،
اما صرفا به این صورت فکر نمیکنن که شی‌گرایی جوابیه برای تمام مشکلات. و اینکه میشه کارها رو خیلی ساده تر انجام داد و با پیچیدگی‌های
شی‌گرایی هم درگیر نشد.

حداقل طراحی زبان طوری باشه که استایل کدنویسی رو تحمیل نکنه. به برنامه نویس اجازه بده در جایی که فکر میکنه شی‌گرایی مناسبه ازش استفاده کنه، و در جایی هم که فکر میکنه لازم نیست، مجبور به استفاده از این شیوه نباشه. وقتی از «استفاده» حرف میزنیم، منظورمون جنبه‌ی
ظاهری یا سینتکس نیست، منظورمون استفاده از ایده های شی‌گرایی هست. همون مفاهیم شی‌گرایی که حتی در زبان های غیر شی گرا هم قابل استفاده
هستن.

------------
[1]:  http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: Mostafa Jalilianfar در 31 فروردین 1392، 11:04 ق‌ظ
۱- توی چندتا کتاب گفتند سطح میانی.
۲- کلا میشه توی هر زبان غیر شی گرایی شی گرایی رو پیاده سازی کرد. این که عده ای ازش استفاده میکنند یا نمیکنند به خودشون مربوط هست :)

۱- میشه اسم اون کتابها رو بگید؟
سی سطح میانیه و سی پلاس پلاس سطح بالا
۲- شما برعکس گفتید.
توی زبانهای شی‌گرا میشه از تکنیک شی‌گرا استفاده نکرد (این درسته)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: MHA152 در 31 فروردین 1392، 04:03 ب‌ظ
دستتون درد نکنه امیررضا جان واقعا عالی بود من این زبان های Go, Erlang, Haskell, Scala, Clojure را نمی شناسم میشه لینکی یا کتاب الکترونیکی که فارسی باشه معرفی کنید
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: دانیال بهزادی در 31 فروردین 1392، 04:37 ب‌ظ
از اونجایی که توی این بحث، به کتابچه‌ای که من نویسنده‌اش بودم اشاره شده، شاید بد نباشه من هم چند خط توضیح راجع به شی‌گرایی بدم.

حداقل طراحی زبان طوری باشه که استایل کدنویسی رو تحمیل نکنه. به برنامه نویس اجازه بده در جایی که فکر میکنه شی‌گرایی مناسبه ازش استفاده کنه، و در جایی هم که فکر میکنه لازم نیست، مجبور به استفاده از این شیوه نباشه. وقتی از «استفاده» حرف میزنیم، منظورمون جنبه‌ی
ظاهری یا سینتکس نیست، منظورمون استفاده از ایده های شی‌گرایی هست. همون مفاهیم شی‌گرایی که حتی در زبان های غیر شی گرا هم قابل استفاده
هستن.

------------
[1]:  http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en

ممنون. کاملاً با این متن موافقم +۱
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: r_m1232002 در 31 فروردین 1392، 05:58 ب‌ظ
یا یک زبانی مثل Go رو در نظر بگیرید. افراد پشت این زبان حرفشون اینه: مگه ساختار class و مباحث مربوط به اون همون چیزی نبود که شما
با struct های C در اختیار داشتین؟ مگه توی c نمیشه برای یک struct فیلد تعریف کرد؟ مگه نمیشه متد تعریف کرد؟ این زبان ها فقط از
نظر سینتکس و روش استفاده، کاری کردن که شما با ساختار class همون کارها رو راحت تر و با انعطاف پذیری بالاتر انجام بدید. خوب اگه قضیه
اینه، ما نیاز به ساختار class نداریم، ما این راحتی و انعطاف پذیری رو با همون struct هایی که در C باهاشون کار میکردید به شما تقدیم
میکنیم.

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

* کپسوله سازی
* چند ریختی
* وراثت

زبانی که تنها از قابلیت کپسوله سازی پشتیبانی کنه Object-Based هست ولی Object-Oriented نیست.
با استفاده از struct های C میشه کپسوله سازی رو پیاده سازی کرد. اما برای پیاده سازی چندریختی و وراثت شما مجبور به استفاده از اشاره گر های تابع و مدیریت دستی اونها هستید که عملی خسته کننده و مستعد خطا هست. در واقع شما مجبور هستید بخشی از وظایف کامپایلر رو هم به عهده بگیرید بدون اینکه بتونید از قابلیت های بهینه سازی کد اون استفاده کنید.

در مورد پارادایم های برنامه نویسی هم قطعا هر کدام برای کاربردهای خاصی مناسب تر هستند و یک پارادایم برای تمامی شرایط بهترین گزینه نیست. اما روش شی گرا به عنوان یکی از پرطرفدار ترین روشهای برنامه نویسی مطمِئنا آن قدر مزیت های خاص خود را دارد که نتوان به کلی آن را نادیده گرفت.

من هم در گذشته مطلبی نسبتا طولانی در مورد پارادایم های برنامه نویسی نوشته بودم که با توجه به درخواست شروع کننده تاپیک برای توضیح در مورد برنامه نویسی شی گرا و همین طور اینکه برخی دوستان در اینجا در رابطه با برنامه نویسی Functional برداشت اشتباهی داشتند  مجددا لینک اون رو در اینجا قرار می دهم:
http://forum.ubuntu.ir/index.php/topic,52932.msg417942.html#msg417942 (http://forum.ubuntu.ir/index.php/topic,52932.msg417942.html#msg417942)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: AmirrezaGhaderi در 31 فروردین 1392، 06:44 ب‌ظ
البته باید توجه کرد که برای اینکه یک زبان از پارادایم شی گرایی پشتیبانی کنه باید حداقل سه قابلیت کلیدی رو فراهم کنه:

* کپسوله سازی
* چند ریختی
* وراثت

زبانی که تنها از قابلیت کپسوله سازی پشتیبانی کنه Object-Based هست ولی Object-Oriented نیست.


خوب کاملا مشخصه شما دارید شی‌گرایی رو با چیزی که در java و ++c هست میسنجید.
این‌ها قانون نیستن. مثلا پایتون کپسوله سازی نداره به اون حالت! همه چی public هست. پس شی‌گرا نیست؟ این‌ها جزو «قابلیت‌های» شی‌گرایی
نیستن، جزو «ایده‌ها و اصول» شی ‌گرایی هستن. هز زبانی ممکنه از شیوه‌‌ها و راه‌های متفاوتی همچین ایده هایی رو در اختیار برنامه نویس
قرار بده. همه که قرار نیست مثل هم رفتار کنن.


البته لازمه بگم، go و haskell و clojure و scala و erlang هم از هر سه‌ی اون گزینه هایی گه گفتید پشتیبانی میکنن، حتی با اینکه
به غیر از go بقیه اشون functional هستند در حقیقت! مثلا مفهوم چندریختی زیاد ربطی به شی‌گرایی نداره. توی همه‌ی زبان ها هست. همه
میتونن ازش استفاده کنن. جوری نیست که فقط زبان‌های شی‌گرا داشته باشنش.
go رو مثال میزنم چون توش وارد تر هستم:
- کپسوله سازی ----> تو go چیزی به اشتراک گذاشته نمیشه چون یک زبان ذاتا concurrent هست و ارتباط ها از طریق انتقال پیام صورت
میگیره، بنابراین کپسوله سازی به این حالت انجام میشه. اما در هر صورت اگه بخوایم با جاوا مقایسه اش کنیم قابلیت این رو داره که
برای اعضای پکیج وسعت دید تعریف کنه، دقیقا به همون حالت public و private....
حالا اون زبان‌های functional پا رو فراتر گذاشتن، کلا به کپسوله سازی نیاز ندارن چون اصلا تمام داده ها ثابت و غیر قابل تغییر هستن!
بنابراین اصلا مهم نیست که قسمت‌های مختلف برنامه به داده های یک قسمت دیگه دسترسی داشته باشن چون هیچ کاری نمیتونن باهاشون بکنن!
- چندریختی ----> از طریق interface‌ ها و duck typing
- وراثت ----> go با وراثت مخالفه (مثل خیلی از افراد تاثیر گذار در زمینه‌ی شی‌گرایی که خودشون هم با وراٍت رابطه‌ی خوبی ندارن!) اما قابلیتی شبیه اون رو (بدون پیچیدگی هاش) با استفاده از ‫‪object composition‬‬ ارائه میکنه. توی C هم همچین چیزی هست.

در کل نباید اجازه داد در دام پارادایم های برنامه نویسی گرفتار بشیم. باید فکر رو از این قضیه منحرف کنیم. راحت بشینیم برنامه‌مون
رو بنویسیم. مهم اینه که برنامه نوشته بشه، نه اینکه برنامه با یه پارادایم خاص نوشته بشه. خیلی وقت ها هست کدهایی رو میبینی که
فقط به دلیل اینکه برنامه نویسش میخواسته با یه پارادایم خاص کار کنه گرفته هزار جور کد رو پیچونده دور سرش، در حالی که خیلی ساده تر
میتونست کار کنه...
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: AmirrezaGhaderi در 31 فروردین 1392، 06:45 ب‌ظ
دستتون درد نکنه امیررضا جان واقعا عالی بود من این زبان های Go, Erlang, Haskell, Scala, Clojure را نمی شناسم میشه لینکی یا کتاب الکترونیکی که فارسی باشه معرفی کنید

گوگل :) همشون سایت دارن و توی سایتشون هم به میزان کافی مستندات هست.
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: r_m1232002 در 31 فروردین 1392، 07:54 ب‌ظ

خوب کاملا مشخصه شما دارید شی‌گرایی رو با چیزی که در java و ++c هست میسنجید.
این‌ها قانون نیستن. مثلا پایتون کپسوله سازی نداره به اون حالت! همه چی public هست. پس شی‌گرا نیست؟


کپسوله سازی از نظر نظریه دان های علوم کامپیوتر دو تا تعریف مختلف داره:

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

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

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

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


برداشت من از حرف های شما این است که شما اعتقاد دارید در برنامه نویسی دیدگاههایی وجود داره که طراحی برنامه به اون شکل مفید هست (مثل ماژولار بودن قسمت های مختلف ، امکان استفاده مجدد و ...) اما اینکه این دیدگاه ها چطور در زبان یا کد پیاده بشن اهمیت چندانی نداره. مثلا مهم نیست قابلیت استفاده مجدد به شکل کلاس ها در برنامه نویسی شی گرا باشه یا به شکل توابع در برانه نویسی تابعی.

من به طور کلی با این ایده موافق هستم اما فکر می کنم اطلاع از پارادایم ها و استفاده صحیح از اونها هم نقش موثری در بهبود کیفیت برنامه سازی داره و لازم هست ما پارادایم ها رو بشناسیم و در جایی که مناسب هستند بر اساس اونها عمل کنیم. وقتی در برنامه ای فکر کردن به شکل شی گرا راحت تر هست بهتره در زبانی که از این پارادایم پشتیبانی می کند از این روش استفاده کنیم تا اینکه مجبور باشیم با تلاش زیاد در زبان دستوری مثل C مفاهیمی شبیه اون رو استفاده کنیم.
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: AmirrezaGhaderi در 31 فروردین 1392، 09:53 ب‌ظ
من در واقع توی اون مطلب شیوه‌ی کار برام مهم نبود، هدف مهم بود.
جدای از اینکه کپسوله‌سازی ممکنه معانی متفاوت و یا روش‌های مختلفی داشته باشه، هدفش چیه؟
چرا باید داده ها مخفی بشن؟ چرا باید اعمال کار روی یک شی فقط از طریق متدهایی که شما مشخص میکنید انجام بشه؟

آیا هدف جز اینه که قسمت‌های مختلف برنامه مستقل باشن و نتونن توی کار هم دخالت کنن و ما بتونیم با رسیدن به این
استقلال اجزا، برنامه هایی با ساختار بهتر و قابل کنترل تر بسازیم؟

تو هر زبانی راه رسیدن به همچین هدفی فرق داره. توی Go با سیستم انتقال پیام، توی java با همون کپسوله سازی مرسوم و آشنا،
توی زبان های functional هم به کمک داده‌های immutable...

کپسوله سازی فقط یه اسم هست. یه واژه که برای تعریف همچین هدفی استفاده میشه. هر زبانی که بتونه به هر طریقی به این هدف نایل بشه،
کارش رو درست انجام داده. دلیل اینکه میگین شی‌گرایی یه مفهومه نه یه قابلیت هم همینه. نمیشه گفت مثلا فقط زبان های شی‌گرا مثل java
همچین چیزی رو دارن. مثلا باید پرسید که جاوا برای چی همچین قابلیتی رو داره؟ می‌خواد با این قابلیت به چی برسه؟ همون چیزی که جاوا
 قراره به کمک این قابلیت بهش برسه رو توی زبان x یا y میشه به روش دیگه ایی بهش رسید.

البته اینطور که من متوجه میشم ما روی ۹۰٪ مباحث اتفاق نظر داریم. اون ۱۰٪ اختلاف نظر هم فکر میکنم برای اینه که شما بر مبنای
paradigm ها و pattern نظر میدید، در صورتی که من فکر میکنم مهم نیست با چه شیوه‌ و paradigm ایی به هدف برسیم، تا زمانی که به عنصر «سادگی» لطمه نزنه. و چون توی منطق فکری من شی‌گرایی خود به خود چیز پیچیده ایی هست، پس تا جایی که امکان داره سعی میکنم ازش دوری کنم.
دقت کنید که نگفتم باهاش مخالفم، فقط گفتم ترجیحش نمیدم. از نظر فکری، حلاجی کردنش برام سخته. و خوب مسلما همه قرار نیست مثل من فکر
کنن :)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: nixoeen در 31 فروردین 1392، 10:26 ب‌ظ
سی پلاس سطح بالاست
سی‌پلاس‌پلاس رو نه می‌شه سطح‌بالا دونست، نه سطح پایین، برای همین عموما سطح میانی نامیده میشه.

It is regarded as an intermediate-level language, as it comprises both high-level and low-level language features.
منبع:
Schildt, Herbert (1 August 1998). C++ The Complete Reference (Third ed.). Osborne McGraw-Hill. ISBN 978-0-07-882476-0.
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: ! در 31 فروردین 1392، 10:30 ب‌ظ
سی پلاس سطح بالاست
سی‌پلاس‌پلاس رو نه می‌شه سطح‌بالا دونست، نه سطح پایین، برای همین عموما سطح میانی نامیده میشه.

It is regarded as an intermediate-level language, as it comprises both high-level and low-level language features.
منبع:
Schildt, Herbert (1 August 1998). C++ The Complete Reference (Third ed.). Osborne McGraw-Hill. ISBN 978-0-07-882476-0.

چیزی تحت عنوان سطح میانی نداریم و اگه بعضی ها تو کتاباشون گفتن صرف این بوده که واضح باشه برامون درک ترکیبی از دو حالت برنامه سازی؛ برنامه سازی سطح بالا و برنامه سازی سیستم :)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: fond در 31 فروردین 1392، 11:00 ب‌ظ
توی همون کتاب هربرت شیلد نوشته «زبان سطح بالا زبانیست که هر آنچه برنامه نویس بخواهد قبلا در زبان وجود داشته باشد. زبان سطح پایین چیزی به جز نمادهایی برای دستورات سطح پایین ماشین به برنامه نویس ارائه نمی‌دهد. اما زبان سطح میانی قابلیت‌ها و ابزارهایی را به برنامه نویس ارائه میدهد که بتواند دستورات زبان سطح بالا را تولید کند»  :)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: محمدرضا ح. در 31 فروردین 1392، 11:11 ب‌ظ
توی همون کتاب هربرت شیلد نوشته «زبان سطح بالا زبانیست که هر آنچه برنامه نویس بخواهد قبلا در زبان وجود داشته باشد. زبان سطح پایین چیزی به جز نمادهایی برای دستورات سطح پایین ماشین به برنامه نویس ارائه نمی‌دهد. اما زبان سطح میانی قابلیت‌ها و ابزارهایی را به برنامه نویس ارائه میدهد که بتواند دستورات زبان سطح بالا را تولید کند»  :)

شما کدوم ترجمش رو دارید؟ من ترجمه مهندس جباریه رو دارم .
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: vandu در 31 فروردین 1392، 11:25 ب‌ظ
توی همون کتاب هربرت شیلد نوشته «زبان سطح بالا زبانیست که هر آنچه برنامه نویس بخواهد قبلا در زبان وجود داشته باشد. زبان سطح پایین چیزی به جز نمادهایی برای دستورات سطح پایین ماشین به برنامه نویس ارائه نمی‌دهد. اما زبان سطح میانی قابلیت‌ها و ابزارهایی را به برنامه نویس ارائه میدهد که بتواند دستورات زبان سطح بالا را تولید کند»  :)
دسته بندی زبان‌ها به سطح بالا و سطح پایین تقریبا «نسبی» هست و منجر به ایجاد [فقط] دو دسته مجزا نخواهد شد. زبان سطح پایین رو کسانی که کد اسمبلی و یا میکروکنترلر AVR نوشته باشن به خوبی درک می‌کنن. جایی که باید با رجیسترها کلنجار بری و به نوعی مدیریت همه چیز رو خودت به عنوان برنامه‌نویس به عهده داری. برای میکرو میشه با c هم کد نوشت. اما در حقیقت هیچ سطح انتزاعی بین کد و واقعیت سخت‌افزار ایجاد نمیشه. البته میشه به نسبت بخشی از کد رو در سطح انتزاع بالاتر نوشت.
زبان‌های سطح بالا یه سری امکانات رو از توسعه دهنده می‌گیرن. مثلا امکان کار با اشاره‌گرها که در زبان c فراهم بوده ولی در زبان‌های جدید به خاطر خطراتی که داره دیگه ساپورت نمیشه.
زبان‌های سطح بالا هم خودشون به چندین دسته تقیسم میشن. حتی زبان‌های خیلی سطح بالا و یا زبان‌های نسل چهارم که اصولا توش تجربه‌ای از کد نویسی حاصل نمیشه اما منجر به ساخت برنامه خواهد شد.
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: nixoeen در 31 فروردین 1392، 11:49 ب‌ظ
چیزی تحت عنوان سطح میانی نداریم
خوب این یک نظر شخصی هست، که شاید هم از بعضی جوانب درست باشه.

ولی خوب طبقه‌بندی قابل رجوع چیزی هست که توی کتاب‌های منبع ذکر می‌شه. طبق طبقه‌بندی این کتاب (که یکی از معروف‌ترین کتاب‌های مرجع برای C و ++C هست و نویسنده اون هم یکی از اعضای کمیته ANSI/ISO هست که استاندارد کردن ++C بر عهده داره) سطح میانی وجود داره و C و ++C هم در اون گروه قرار می‌گیرند.
صفحه ۵ به وضوح این موضوع رو توی یک جدول نشون داده:
(http://s24.postimg.org/i48rb4ojp/image_1366484201159188.jpg)

در کل، این تنها یک طبقه‌بندی تئوری هستش و تغییر توی اون خیلی تفاوت خاصی برای ما ایجاد نخواهد کرد :)
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: Mostafa Jalilianfar در 01 اردیبهشت 1392، 12:35 ق‌ظ
منبع معرفی شده فکر نکنم ارزش چندانی داشته باشه
بیسیک و پاسکال سطح بالا بعد C# - C++ - JAVA سطح میانی!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
احتمالا طرف جزو اعضای کمیته ANSI/ISO محلشونه
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: xubuntu4iran در 01 اردیبهشت 1392، 12:40 ق‌ظ
c++ اش که درسته سطح میانیه!
It is regarded as an intermediate-level language

http://en.wikipedia.org/wiki/C%2B%2B
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: AmirrezaGhaderi در 01 اردیبهشت 1392، 12:46 ق‌ظ
چیزی تحت عنوان سطح بالا یا سطح پایین وجود نداره و فقط از این واژه ها برای وقتی که مطلبی مینویسن
استفاده میکنن تا درک مطلب برای خواننده راحت تر بشه. برای همینه هر کتاب و هر نویسنده ممکنه یه دسته
بندی متفاوتی کرده باشه، چون اصلا دسته بندی ایی به این شکل وجود نداره. بنابراین تا فردا صبح
هم که سرش بحث کنید به جایی نمیرسید.

بهترین کار اینه که وقتی ازتون پرسیدند زبان X سطح بالا هست یا سطح پایین، در جواب بگید به نسبت چه زبانی؟
مثلا اگه درباره C سوال کردند و گفتند به نسبت پایتون، بگید یه زبان خیلی سطح پایینه و اگه گفتن به نسبت
اسمبلی، بگید یه زبان کاملا سطح بالاست.

عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: vandu در 01 اردیبهشت 1392، 12:52 ق‌ظ
چیزی تحت عنوان سطح بالا یا سطح پایین وجود نداره و فقط از این واژه ها برای وقتی که مطلبی مینویسن
استفاده میکنن تا درک مطلب برای خواننده راحت تر بشه. برای همینه هر کتاب و هر نویسنده ممکنه یه دسته
بندی متفاوتی کرده باشه، چون اصلا دسته بندی ایی به این شکل وجود نداره. بنابراین تا فردا صبح
هم که سرش بحث کنید به جایی نمیرسید.

بهترین کار اینه که وقتی ازتون پرسیدند زبان X سطح بالا هست یا سطح پایین، در جواب بگید به نسبت چه زبانی؟
مثلا اگه درباره C سوال کردند و گفتند به نسبت پایتون، بگید یه زبان خیلی سطح پایینه و اگه گفتن به نسبت
اسمبلی، بگید یه زبان کاملا سطح بالاست.



موافقم +۱
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: Mostafa Jalilianfar در 01 اردیبهشت 1392، 01:09 ق‌ظ
چیزی تحت عنوان سطح بالا یا سطح پایین وجود نداره و فقط از این واژه ها برای وقتی که مطلبی مینویسن
استفاده میکنن تا درک مطلب برای خواننده راحت تر بشه. برای همینه هر کتاب و هر نویسنده ممکنه یه دسته
بندی متفاوتی کرده باشه، چون اصلا دسته بندی ایی به این شکل وجود نداره. بنابراین تا فردا صبح
هم که سرش بحث کنید به جایی نمیرسید.

بهترین کار اینه که وقتی ازتون پرسیدند زبان X سطح بالا هست یا سطح پایین، در جواب بگید به نسبت چه زبانی؟
مثلا اگه درباره C سوال کردند و گفتند به نسبت پایتون، بگید یه زبان خیلی سطح پایینه و اگه گفتن به نسبت
اسمبلی، بگید یه زبان کاملا سطح بالاست.



مگه اینجوری بشه این دسته بندی رو حضم کرد
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: nixoeen در 01 اردیبهشت 1392، 01:10 ق‌ظ
احتمالا طرف جزو اعضای کمیته ANSI/ISO محلشونه
خوب یک بحث وقتی خوب پیش میره که افراد به صورت موثق و با استناد به منابع صحبت بکنند، نه اینکه حرفی که یک جایی شنیدند رو تکرار کنند.
وقتی که منابع معتبری که همه دنیا قبولش دارند رو کنار بذاریم و به جای بیان یک منبع معتبر دیگه، شروع به مسخره‌بازی بکنیم، بحث نتیجه نخواهد داشت و باید بحث رو اینطور تموم کنیم که: بله، شما راست می‌گی!
عنوان: پاسخ : مفهومی به اسم ؛شی گرایی؛
ارسال شده توسط: Mostafa Jalilianfar در 01 اردیبهشت 1392، 10:23 ق‌ظ
احتمالا طرف جزو اعضای کمیته ANSI/ISO محلشونه
خوب یک بحث وقتی خوب پیش میره که افراد به صورت موثق و با استناد به منابع صحبت بکنند، نه اینکه حرفی که یک جایی شنیدند رو تکرار کنند.
وقتی که منابع معتبری که همه دنیا قبولش دارند رو کنار بذاریم و به جای بیان یک منبع معتبر دیگه، شروع به مسخره‌بازی بکنیم، بحث نتیجه نخواهد داشت و باید بحث رو اینطور تموم کنیم که: بله، شما راست می‌گی!

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