PDA

View Full Version : گفتگو: تبادل نظر در مورد زبان های شی گرایی مانند ++ c و دیگر زبان ها



motherboard
شنبه 01 شهریور 1393, 16:47 عصر
سلام.با توجه به موج منفی ای که در رابطه با زبان های شی گرا در این اواخر به وجود امد و جناب coder از منتقدان سرسخت زبان های شی گرایی هستند.از انجا که جناب coder خیلی به موضوع بحث بر سر شی گرایی علاقه مند است چه بهتر بود تا فضایی ایجاد شود تا همه ی عزیزان در مورد شی گرایی مخصوصا در رابطه با ++c با یکدیگر تبادل نظر کنند.از جناب coder و همچنین از دوستان دیگر تقاضا می کنم که بحث علمی انجام دهید و از حواشی پرهیز کنید تا شاید به یک جمع بندی برسیم.هر کس هر نظر محترمانه ای را در رابطه با موضوع تاپیک دارد در این تاپیک می تواند ارائه دهد.

a.r.khoshghalb
شنبه 01 شهریور 1393, 17:46 عصر
سر خوبی یا بدی شی گرایی بحث کنیم؟ به قول تو "منتقدین سرسخت شی گرایی" رو قانع کنیم که شی گرایی مفیده؟ این همه مثال بیاریم؟ خاصیت بیاریم؟
آب در هاون بکوبیم؟

omid_kma
شنبه 01 شهریور 1393, 18:09 عصر
در ++C میشه از امکانات شی گرایی استفاده کرد میشه هم استفاده نکرد(به روش های functional یا generic هم میشه کد نوشت .) پس عنوان این تاپیک درست نیست "زبان های شی گرایی مثل ++C" !

ضمنا شی گرایی صرفا یک مفهومه ربطی به زبان خاصی نداره شما داخل C هم میتونین شی گرا کد بنویسید .
بعد این که اصولا این جور بحث های کلی به غیر از از اتلاف وقت هیچ فایده "علمی " ندارن .
این که شی گرایی خوبه یا بد رو باید با تجربه و نوشتن کد فهمید نه بحث با کسایی که توهم نوشتن سیستم عامل (http://barnamenevis.org/showthread.php?460096-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B1%D9%82%D9%85-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1&p=2060999&viewfull=1#post2060999)دارن ! (http://barnamenevis.org/showthread.php?460096-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B1%D9%82%D9%85-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1&p=2060999&viewfull=1#post2060999)

motherboard
شنبه 01 شهریور 1393, 18:47 عصر
در ++C میشه از امکانات شی گرایی استفاده کرد میشه هم استفاده نکرد(به روش های functional یا generic هم میشه کد نوشت .) پس عنوان این تاپیک درست نیست "زبان های شی گرایی مثل ++C" !
با توجه به استدلال شما من هم می تونم بگم که در ++c میشه از امکانات functional یا generic هم استفاده کرد و هم استفاده نکرد پس عنوان تاپیک درست نیست"زبان های functional مثل ++C" !!!!!! :چشمک:

ضمنا شی گرایی صرفا یک مفهومه ربطی به زبان خاصی نداره شما داخل C هم میتونین شی گرا کد بنویسید .
تو اسمبلی هم میشه شی گرایی رو تولید کرد.اما موضوع اینه که در هر زبانی یک امکاناتی اضافه شده.مثلا تو c شی گرایی نبود ولی تو ++c شی گرایی اضافه شد.من هم در مورد مفهوم شی گرایی صحبت می کنم که در بعضی زبان ها گنجانده شده و نه اینکه گنجانده نشده باشه و ما عمدا بگنجانیم!!!!!

بعد این که اصولا این جور بحث های کلی به غیر از از اتلاف وقت هیچ فایده "علمی " ندارن .
کاملا مخالفم

این که شی گرایی خوبه یا بد رو باید با تجربه و نوشتن کد فهمید نه بحث با کسایی که توهم نوشتن سیستم عامل دارن (!!!!!! ) (http://barnamenevis.org/showthread.php?460096-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B1%D9%82%D9%85-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1&p=2060999&viewfull=1#post2060999)
:لبخند:
ولی دوستان اگه پایه باشند بحث جالبی میشه.

motherboard
شنبه 01 شهریور 1393, 18:49 عصر
سر خوبی یا بدی شی گرایی بحث کنیم؟ به قول تو "منتقدین سرسخت شی گرایی" رو قانع کنیم که شی گرایی مفیده؟ این همه مثال بیاریم؟ خاصیت بیاریم؟
آب در هاون بکوبیم؟
من خیلی دوست دارم جناب coder هم در این بحث شرکت کنند.و جدا از موجودات فضایی برای صحبت هاشون دلیل بیاورند.

ciavosh
شنبه 01 شهریور 1393, 18:54 عصر
من در مورد مخالفت با شی گرایی نشنیده بودم. علت مخالفت چیست؟ جایگزین بهتر چیست؟

motherboard
شنبه 01 شهریور 1393, 19:01 عصر
من در مورد مخالفت با شی گرایی نشنیده بودم. علت مخالفت چیست؟ جایگزین بهتر چیست؟
یک نمونه اش اینه که عده ای میگن برنامه نویسان شی گرا در واقع برنامه نیس نیستند.بلکه شبه برنامه نویس هستند.از خود قدرت الگوریتم نویسی ندارند.از ساختار یک کامپیوتر چیزی نمی دانند.و عنوان برنامه نویس بر انها فقط یک ژست است.

ciavosh
شنبه 01 شهریور 1393, 19:20 عصر
یک نمونه اش اینه که عده ای میگن برنامه نویسان شی گرا در واقع برنامه نیس نیستند.بلکه شبه برنامه نویس هستند.از خود قدرت الگوریتم نویسی ندارند.از ساختار یک کامپیوتر چیزی نمی دانند.و عنوان برنامه نویس بر انها فقط یک ژست است.

این صحبتها بچه گانه، نا معقول و بی ربط بوده و ارزش بحث ندارد.

motherboard
شنبه 01 شهریور 1393, 19:26 عصر
این صحبتها بچه گانه، نا معقول و بی ربط بوده و ارزش بحث ندارد.
چرا این صحبت ها بچگانه و نامعقول و بی ربط هست؟بحث سر اینه که شی گرایی در چه زمینه هایی می تونه اعتبار داشته باشه؟من خیلی دوست دارم نظر دوستان و همچنین پیشکسوتان تالار رو بدون هیچ حاشیه ای بدونم.قراره بحث علمی بکنیم.

motherboard
شنبه 01 شهریور 1393, 19:39 عصر
جناب coder این تاپیک رو برای شما هدیه دادم.!!! حالا هر چی دل تنگت می خواهد بگو.دیگران رو نمیدونم ولی من می خوام از نظرات شما استفاده کنم.و این رو کاملا جدی عرض می کنم.

dasssnj
یک شنبه 02 شهریور 1393, 09:12 صبح
دو نمونه از بهترین برنامه های نوشته شده با هر دونوع را بیارید و با هم مقایسه کنید .

من برنامه نویسی را با یه زبان 100 درصد شئ گرا شروع کردم (جاوا) . تا الانم خیلی الگوریتم نوشتم . نمی دونم حالا منظور از این حرفا چیه .

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

پس شئ گرایی اونطور که بعضی ها فکر می کنن نیست . شما دور و برت را خوب نگاه کن اشیا ساخت بشر و آفریده های خدا را ببین . خود به خود با مفهوم شئ گرایی آشنا میشی و درکش می کنی.

motherboard
یک شنبه 02 شهریور 1393, 09:54 صبح
من خودم اولین زبانی رو که شروع کردم به یادگیری برنامه نویسی همین ++c بوده است.و همچنان هم تاکید دارم همین زبان رو به صورت حرفه ای یاد بگیرم.از نظر من ++c واقعا زبان خوبی است.بزرگترین خاصیتش همین است که هم امکانات c رو توش داره و هم یک سری امکانات شی گرایی و هم حتی میشه توش اسمبلی نوشت!!!!! چی از این بهتر.واقعا هرکس که بتونه ++c رو حرفه ای یاد بگیره برد کرده.اول اینکه اسمبلی هم یاد می گیره!!! دوم اینکه c رو هم یا می گیره.سوم اینکه چون با شی گرایی اشنا میشه یاد گرفتن جاوا و یا هر زبان دیگه ای براش مثل اب خوردن میشه!!!!!!!!!
اما جناب coder میگه که باید و باید تحت هر شرایطی از اسمبلی و یا c استفاده کنیم.بذارید یک مثال بیارم جناب coder:شما فرض کن تو یک تراشکاری داری کتار می کنی.و داری با ابزارالات کارگاه دستگاه درست می کنی!! ایا برای اینکه محصولت رو تولید کنی ایا باید انبردست هم خودت بسازی؟؟؟ باید مته هم خودت بسازی؟؟؟ باید دریل هم خودت بسازی؟؟؟؟ باید سمبه ماتریس هم خودت بسازی؟؟؟؟؟ باید دستگاه تراش رو هم خودت بسازی؟؟؟؟ باید میز کار رو هم خودت بسازی؟؟؟ و .......
این در مورد زبان برنامه نویسی هم صدق می کنه.زمانی که میشه یک برنامه رو بدون هیچ خللی در سرعت اجرای ان با یک زبان سطح بالا و با فریمورک هایی که داره نوشت طرف باید عبدالله باشه بره سراغ اسمبلی.
همچنین ما منتظر شدیم تا شما هم نظرتون رو بیان کنید .ولی اصلا کو گوش شنوا!!! من حتی تو پیغام خصوصی هم براتون محترمانه پیغام گذاشتم ولی دریغ از جواب سلام دادن.به نظر من شما فرد خیلی مغروری هستید و یا از برنامه نویسی چیزی نمی دونید و یا اگر هم می دونید دلتون نمیاد که اندکی از دانشتون رو در اختیار دیگران بگذارید.اگر مطلبی دارید من تاپیکش رو درست کردم و اگر ندارید بیشتر از این خودتون رو مسخره نکنید.

کامبیز اسدزاده
یک شنبه 02 شهریور 1393, 11:05 صبح
تا کی میخواهید خودتون رو با این سوال سرگرم کنید ؟ واقعا هنوز باور نکردین OOP چه تاثیری در دنیای برنامه نویسی داره؟ به جای اینکارها یه چیزی اختراع کنید یه نیازی از جامعه رو رفع کنید اینطور ادامه بدین تا 100 سال دیگه هم با خودتون درگیرید و هیچی ازتون بر نخواه آمد برای مثال اکثر دانشجو های این مملکت بعد از فارغ التحصیلی قدرت پیاده سازی هیچیرو ندارند چرا دلیلش اینه که مفاهیم مهم و پایه ای مثل OOP رو درک نکردند و شاید هم قبول نکرده اند !

جواب سوال های شما در اینحا : https://www3.ntu.edu.sg/home/ehchua/programming/cpp/cp3_OOP.html دیگه اینو ببینید و سوالی نکنید.

ساده ترین مثالی که میتونم بزنم... همین دستگاه ATM هستش میرید ازش پول میگیرید یا پول انتقال میدین بر پایه OOP پیاده سازی شده. بسه دیگه 90 درصد سیستم های پیچیده بر اساس شیوه OOP پیاده سازی میشوند. برای مثال این سیستم در ساده ترین حالت شامل اطلاعات حساب از قبیل شماره حساب , خدمات از قبیل برداشت , انتقال , واریز و ... هستش حال من برای استفاده از این خدمات که قبلا حسابی در بانک مورد نظر باز کرده ام باید با وارد کردن اطلاعات کاربریم مثل رمز حساب و ... وارد این سیستم بشم در اینجا نه تنها تمامی خدمات و شئی های موجود در سیستم ATM بلکه کاربر یا همان مشترک از نوع Object درنظر گرفته شده است به نظر شما اگر OOP نبود این موضوع به همین راحتی ها پیاده سازی می شد ؟!!؟!!!!!!!! حالا چرا یکی از ما ایرانی ها این ماشین رو اختراع نکردند و سیستم نرم افزاریش رو پیاده سازی نکرده اند ؟ چون هنوز بر این باورند OOP یه چیز مزخرفی هستش ! در حالی که روزانه با هر چیزی که استفاده میکنند بر پایه همین اصول از قبل توسط ابر قدرت ها پیاده سازی شده است.

در رابطه با ATM مثال زدم یه نکته ای هم به زهنم رسید : اینکه بانک ها برای استخدام برنامه نویس به متخصص C++‎ اشاره میکنند چرا نمیگن C ؟ خب این مشخصه که در اولویت اول سبک OOP یکی از مهمترین موارد هستش که یک برنامه نویس حرفه ای باید درکش کرده باشه.

یک تعریف کلی میکنم : برنامه نویسی شئی گرایی شیوه ی نوینی است که در آن میتوان قطعای را ایجاد کرد و در برنامه های مختلف مورد نظر استفاده کرد , قابلیت خوانایی برنامه هایی که در این روش نوشته شده اند بالا بوده تست , عیب یابی و اصلاح آنها آسان است همچنین شئی گرایی بر اشیاء تاثیر دارد.

مثلا به دنیای اطراف خود نگاه کنید به هر چیزی که میبینید یک شیئ است مردم , حیوانات , گیاهان , اتوموبیل ها , هواپیماها , کامپیوتر و .... و مانند آن ها انسان نیز بر اساس اشیاء فکر میکند, انسان توانایی عجیبی از انتزاع دارد که آن را قادر میسازد تا به جایه اینکه این تصاویر صفحه نمایش را به صورت نقاط منفردی از رنگ ها که در گرافیک (پیکسل) میگویند در نظر بگیریم آن ها را به عنوان اشیاء تصور کنیم در صورت لزوم به جای اینکه به جای این ذرات شن فکر کنیم به خود صاحل فکر میکنیم و به جای اینکه به درختان فکر کنیم به خود جنگل فکر میکنیم و یا به جای فکر کردن به آجر ها به خود ساختمان یا سازه فکر میکنیم.
که در این میان انشان ثفات را از طریق مطالعه صفات آن ها را میشناسد.

حال برنامه نویسی شئی گرایی اشاء دنیای واقعی را مدل سازی میکند از امتیاز رابطه کلاس استفاده میکند در آن اشیائی از کلاس مثلا کلاس وسیله نقلیه مشخصات مشابهی دارند از امتیاز وراثت یا حتی وراثت چندگانه استفاده میکند کلاس های جدیدی که ایجاد میشوند مشخصات کلاس های از قبل ایجاد شده را به ارث میبند و حتی ویژگی های منحصر بفردی نیز دارند به عنوان مثال شئی کلاس دانشجوی کارشناسی ارشد مشخصات کلاس دانشجویان را دارد ولی ویژگی منحصربفردش این است که تعداد واحد های آن کمتر است.

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

اشیاء را میتوان به دو دسته تقسیم کرد اشیاء بیجان و اشیاء جاندار : اشیاء جاندار زنده بوده و حرکت میکنند و کارهایی را انجام میدهند اشایء بی جان مانند سنگ به نظر نمیرسند که کاری انجام دهند زیرا تمام اشیاء چه جاندار و چه بی جان وجه مشترکی دارند آن ها ثفاتی مثل اندازه , شکل و وزن دارند و همه آن ها رفتار هایی را ازخودشان نشان میدهند

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

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

اینهمه تایپ میکنم دیگه بازم قرار نیست بپذیرید این OOP رو ؟ در این صورت بهتره اصلا دوره بره برنامه نویسی نرید.

موفق باشید.

alireza es
یک شنبه 02 شهریور 1393, 11:10 صبح
شی گرا یا ساخت یافته ؟مساله این است !
همون طور که گفتم هر زبانی رو برای کاری ساختند
الان مثلا توی C شما میتنونین یه نرم افزار تحت وب مثل یه Cms بنویسین ولی این دلیل میشه که این کار رو انجام بدیم؟
زبان های سطح بالا و شی گرا برای کاهش پیچیدگی های برنامه نویسی به وجود اومدند(البته به جز c++ )

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

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

بهترین مثالش ویندوز هست که مایکروسافت هسته و کرنلو با C ساخته و بقیه قسمتاشو با c++ (خودشم از C# استفاده نمیکنه!)
یا لینوکس که هسته اش با C ساخته شده و بقیه قسمتاش اکثرا از python و کمی c++

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

#target
یک شنبه 02 شهریور 1393, 12:07 عصر
منم بخاطر شرایط خودم هیچ وقت از شی گرایی استفاده نکردم . اصلا حوزه کاریم طوری نبوده که بخام استفاده کنم
اما با این موضوع مخالفم که ی سری برنامه ها رو فقط با شی گراییی میشه نوشت . بنظرم اونی که با شی گرایی نوشته شده رو میشه با ساخت یافته هم نوشت ! اما سخت تر
در ساخت یافته هم امکان استفاده مجدد وجود داره .
شی گرا بنظر میاد فقط ی سبک کد نویسی هست. برا نمایش و راحتی کد نویسی (که کامپایلر وقت کامپایل اونو ساخت یافته میکنه)

البته بنظرم این نوع مقایسه هم غلطه که ی برنامه بیاری که با شی گرا نوشته شده و ی برنامه که با ساخت یافته بعد با هم مقایسه کنین. بهتره ویژگی های هر دو رو در نظر بگیرین . ولی خب عدم وجود سرباز اضافی زیاد نسبت به سیستم برنامه ریزی سخت افزار در زبان های ساخت یافته C یک مزیت برای اون محسوب میشه که برای ی سری کارها اونو برتر میکنه که اشاره شد .

C3phalex1n_0x
یک شنبه 02 شهریور 1393, 16:01 عصر
یک نمونه اش اینه که عده ای میگن برنامه نویسان شی گرا در واقع برنامه نیس نیستند.بلکه شبه برنامه نویس هستند.از خود قدرت الگوریتم نویسی ندارند.از ساختار یک کامپیوتر چیزی نمی دانند.و عنوان برنامه نویس بر انها فقط یک ژست است.

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

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

به نظر من شخصی که هنر حل مسئله قوی داشته باشد، با هر زبانی می تواند مقاصد خود را عملیاتی کند! چه شی گرا و چه غیر شی گرا.