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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: مفهومی به اسم ؛شی گرایی؛  (دفعات بازدید: 16533 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین dr.b4ne

  • Sr. Member
  • *
  • ارسال: 265
  • جنسیت : پسر
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #30 : 30 فروردین 1392، 10:46 ب‌ظ »
چون سرعت توسعه رو کم میکنه. مثلا سیستم عامل Haiku داره بصورت شی گرا نوشته میشه هنوز آلفاست! ولی لینوکس رو ببین :D (البته مثالم شدیدا مشکل داره ::) ) .
دوست عزیز احتمالا دچار سوء برداشت شدید توسعه و عیب یابی سریعتر از اصلی ترین مزایای شی گرایی است در صورتی که شی گرایی معایبی نیز دارد

آفلاین MHA152

  • High Hero Member
  • *
  • ارسال: 2745
  • جنسیت : پسر
  • من عاشق یونیکسی ها هستم
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #31 : 30 فروردین 1392، 10:51 ب‌ظ »
پس برای پروژه های بزرگ(ارتقاء کرنل) به جا است و سرعت را بالا می بره

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

آفلاین Mostafa Jalilianfar

  • High Hero Member
  • *
  • ارسال: 1085
  • جنسیت : پسر
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #32 : 30 فروردین 1392، 11:47 ب‌ظ »
سی++ هم که میانی است و قابلیت های زبان های سطح پایین را داره

سی پلاس سطح بالاست
بگذریم بحث خیلی به بیراهه رفته  فکر می کنم بهتره از همینجا بحث رو تموم کنیم اگه کسی در مورد برنامه نویسی شی‌گرا مشکلی داره عنوان کنه و بهتره در مورد توسعه برنامه و کرنل و اینجور چیزا در این تاپیک دیگه بحث نشه
به دلیل ترک انجمن لطفا با این ایمیل MustafaJF[at]Aol[dot]com تماس برقرار کنید و از پیام خصوصی استفاده نکنید

آفلاین محمدرضا ح.

  • High Hero Member
  • *
  • ارسال: 3117
  • جنسیت : پسر
  • Your Future is our Past!
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #33 : 30 فروردین 1392، 11:50 ب‌ظ »
سی++ هم که میانی است و قابلیت های زبان های سطح پایین را داره

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

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

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

مساله پست اول : کاش از دوستمون (استادتون) بپرسید منظورش دقیقا از شی گرایی چیست؟ و اگر دلیل علمی آورد و گفت اینجا و اونجای کدت شی گرا نیست و ... حتما شی گرا نیست. باز هم میتونی روی فروم های داخلی و خارجی و دوستان خوبی مثل داریوش عباسی حساب کنی ;)
قاضی : تو السالوادور چه کار میکردی؟
چه‌گوارا : آفتاب میگرفتم
قاضی : پس چرا ساختمان دادگستری رو منفجر کردی؟
چه‌گوارا : جلوی آفتاب رو گرفته بود

آفلاین abbasalim

  • High Sr. Member
  • *
  • ارسال: 642
  • جنسیت : پسر
  • http://esfandune.ir/
    • اسفندونه
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #34 : 31 فروردین 1392، 12:48 ق‌ظ »
اینکه استادمون حالی هست یا نه که حالیشه یه خزش گر هم ساخته تازه این رو هم به عنوان پایان نامه هست چیه؟ واسه دکتری ساخته:

http://www.parsijoo.ir/

ولی خوب تو درس دادنش  :(

آفلاین AmirrezaGhaderi

  • Jr. Member
  • *
  • ارسال: 90
  • جنسیت : پسر
    • حساب تویتر من
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #35 : 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

  • High Hero Member
  • *
  • ارسال: 1085
  • جنسیت : پسر
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #36 : 31 فروردین 1392، 11:04 ق‌ظ »
۱- توی چندتا کتاب گفتند سطح میانی.
۲- کلا میشه توی هر زبان غیر شی گرایی شی گرایی رو پیاده سازی کرد. این که عده ای ازش استفاده میکنند یا نمیکنند به خودشون مربوط هست :)

۱- میشه اسم اون کتابها رو بگید؟
سی سطح میانیه و سی پلاس پلاس سطح بالا
۲- شما برعکس گفتید.
توی زبانهای شی‌گرا میشه از تکنیک شی‌گرا استفاده نکرد (این درسته)
به دلیل ترک انجمن لطفا با این ایمیل MustafaJF[at]Aol[dot]com تماس برقرار کنید و از پیام خصوصی استفاده نکنید

آفلاین MHA152

  • High Hero Member
  • *
  • ارسال: 2745
  • جنسیت : پسر
  • من عاشق یونیکسی ها هستم
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #37 : 31 فروردین 1392، 04:03 ب‌ظ »
دستتون درد نکنه امیررضا جان واقعا عالی بود من این زبان های Go, Erlang, Haskell, Scala, Clojure را نمی شناسم میشه لینکی یا کتاب الکترونیکی که فارسی باشه معرفی کنید
بهتون پیشنهاد می کنم به دنیای بزرگ شبه−یونیکس وارد بشید و از پیشرفت لذت ببرید
جیمیلم

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19724
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #38 : 31 فروردین 1392، 04:37 ب‌ظ »
از اونجایی که توی این بحث، به کتابچه‌ای که من نویسنده‌اش بودم اشاره شده، شاید بد نباشه من هم چند خط توضیح راجع به شی‌گرایی بدم.

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

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

ممنون. کاملاً با این متن موافقم +۱
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین r_m1232002

  • Full Member
  • *
  • ارسال: 143
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #39 : 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
« آخرین ویرایش: 31 فروردین 1392، 06:01 ب‌ظ توسط r_m1232002 »

آفلاین AmirrezaGhaderi

  • Jr. Member
  • *
  • ارسال: 90
  • جنسیت : پسر
    • حساب تویتر من
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #40 : 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

  • Jr. Member
  • *
  • ارسال: 90
  • جنسیت : پسر
    • حساب تویتر من
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #41 : 31 فروردین 1392، 06:45 ب‌ظ »
دستتون درد نکنه امیررضا جان واقعا عالی بود من این زبان های Go, Erlang, Haskell, Scala, Clojure را نمی شناسم میشه لینکی یا کتاب الکترونیکی که فارسی باشه معرفی کنید

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

آفلاین r_m1232002

  • Full Member
  • *
  • ارسال: 143
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #42 : 31 فروردین 1392، 07:54 ب‌ظ »

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


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

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

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

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

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


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

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

آفلاین AmirrezaGhaderi

  • Jr. Member
  • *
  • ارسال: 90
  • جنسیت : پسر
    • حساب تویتر من
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #43 : 31 فروردین 1392، 09:53 ب‌ظ »
من در واقع توی اون مطلب شیوه‌ی کار برام مهم نبود، هدف مهم بود.
جدای از اینکه کپسوله‌سازی ممکنه معانی متفاوت و یا روش‌های مختلفی داشته باشه، هدفش چیه؟
چرا باید داده ها مخفی بشن؟ چرا باید اعمال کار روی یک شی فقط از طریق متدهایی که شما مشخص میکنید انجام بشه؟

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

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

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

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

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : مفهومی به اسم ؛شی گرایی؛
« پاسخ #44 : 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.