PDA

View Full Version : گفتگو: آیا واقعا شی گرا نوشتن یک برنامه خوب است؟



علی متقی پور
پنج شنبه 30 آذر 1391, 01:55 صبح
بجای مطالعه همه پست ها میتونید چکیده تمامی پست ها را در صفحه دوم پست سی و نهم مطالعه کنید.

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



People.Name = txtName.Text.Trim();


People.Email = txtEmail.Text.Trim();


People.Moblie = txtMobile.Text.Trim();


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


SqCom.Parameters.AddWithValue("@Name", People.Name);


این در حالیه که میشه اصلا کلاس People را نداشت و مستقیم نوشت:

SqCom.Parameters.AddWithValue("@Name", txtName.Text.Trim());

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

blackcats
پنج شنبه 30 آذر 1391, 13:58 عصر
دوست عزیز کمی سرچ کن در مورد EntityFrameWork از نوع CodeFirst که اول دیتابیس مدل میشه بعد با یک F5 کلی اتفاق خوب میفته!

علی متقی پور
پنج شنبه 30 آذر 1391, 14:11 عصر
سلام
من تا حدودی با EntityFrameWork آشنا هستم ولی ربطش رو به این مطلب متوجه نشدم. بحث در مورد شی گرائی نه نحوه ارتباط به دیتا بیس

amin1softco
پنج شنبه 30 آذر 1391, 14:21 عصر
ببین دوست عزیز شی گرا کد زدن شاید در مقیاس کوچیک که مد نظر شماست باعث افزایش کد بشه ولی در مقیاس بزرگ اینجور نیست فرض کنید چندتا متد هم دارید که مثلاً میاد یکسری مقادیر را چک می کنه اگر بخواهید هر دفعه این متد ها را بنویسید حجم کدی که باید هر بار بنویسید خیلی بیشتر می شه .
و اینکه شما با زبانی مثل سی شارپ که قانونش شی گراست حداقل نباید این فکر ها رو بکنید :دی
و چیزی که دوست ما اشاره کرد نکتش اینه که الان مایکروسافت و تمام غول هایی که در حال تولید تکنولوژی هستند برای شی گرا کد زدن احترام قائل هستند و فرم ورک ها یا مدل کردن دیتا بیس را بر اون اساس انجام میدهند .

علی متقی پور
پنج شنبه 30 آذر 1391, 14:28 عصر
فرمایش شما متین. شکی وجود نداره که مایکروسافت طرفدار شی گرائیه. اینکه مشخصه. ولی عرض بنده اینه که بعنوان یه مبتدی با یک مثال نشون دادم که شی گرا نوشتن هم باعث افزایش مراحل طراحی برنامه و همچنین افزایش تعداد روال های لازم برای انجام یک عملیات خاصه که هیچکدوم از این دو تا خوب نیست.
مسلما بنده در حدی نیستم که بگم شی گرا نوشتن بده و تو این تاپیک هم دنبال این هستم که واقعا درک کنم این شی گرا نوشتن کجاش خوبه و به تقلید مایکروسافت یا اساتید دیگه نگم خوبه :-)

zarifcomputer
پنج شنبه 30 آذر 1391, 15:00 عصر
سلام
تا حالا دیدی یک پدر به فرزندش میگه : عزیزم من چند تا پیرهن بیشتر از تو پاره کردم . حرف منو گوش کن ضرر نمیکنی!!!
حمل بر جسارت و بی ادبی بنده نفرمایید . من کوچیک همه شما عزیزان هستم و هیچ ادعایی هم ندارم و از همه اعضاء سایت هم بی اطلاع ترم .
فقط یک تجربه با ارزش خدمت این دوست عزیز میگم تا راه رفته بنده را دوباره طی نکنید. بنده چندین سال به روش هر چه پیش آید خوش آید کد نویسی کردم . و این اواخر از سر کنجکاوی رفتم و اصولی شیء گرایی را در آخرین پروژه ام که اتفاقا خیلی هم الان بزرگ شده پیاده کردم (البته از همون اول پروژه) . حالا میفهمم که تو این چند سال چه اشتباهی میکردم و چه زمان و هزینه ای را برای یک تغییر کوجک در نرم افزار های قبلی باید صرف میکردم. الان وقتی کارفرما از بنده میخواد که یک تغییر اساسی در حد 20 الی 30 درصد به نرم افزار بدم ، چقدر سریع و راحت این کار انجام میشه . باور کنید شیء گرایی محشره. اگه زمان برای مطالعه بیشتر در این مورد دارید حتما برید سراغ یاد گیری بیشتر و کسب تجربه

علی متقی پور
پنج شنبه 30 آذر 1391, 15:12 عصر
مرسی دوست عزیز
قطع مسلم تجربه شما با ارزشه. عرض من این نبود که شی گرایی خوب نیست. تو پستم هم تاکید کردم که من کوچکتر از این حرفام. فقط خاستم بدونم شی گرایی کجاش خوبه که تو پاسخ ها تا الان نبوده. ( تو تغییرات بعدی نرم افزار میدونم که شی گرا بودن خیلی کمک میکنه ولی من منظورم تو طراحی یکباره نرم افزار و ضمنا اجراشه. مطمئنا پرفورمنس یک نرم افزار بسیار مهمتر از تغییر پذیری اونه. ممکنه تو پروژه تجاری کسی فقط به فکر راحت بودن طراحی باشه ولی درحقیقت همه چیزها باید در خدمت افزایش کارایی و سرعت و دقت نرم افزار باشه و راحتینوشتن و تغییر فرع بر این مسائل است )

Variable
پنج شنبه 30 آذر 1391, 16:36 عصر
من فکر میکنم:
یک کارایی خوب . نتیجه یک برنامه نویسیه خوبه
شما نمیتونی . یک پدر و مادر روانی( برنامه نویس) رو پیدا کنی که هزار ویک مشکل رفتاری دارن و تو حل مشکلاتشون به سختی عمل میکنند.
ولی دارای یک فرزند خوب و صالح (کارایی ) باشند.
کارایی در یک فرایند و چرخه( ایجاد و اصلاح )بدست میاد. حالا اگه تو این فرایند مشکلی وجود داشته باشه. کارایی بالا محاله. کارایی که مد نظر مشتریست.
شی گرایی به شما این اجازه رو میده که این فرایند به خوبی به کار خودش بپردازه.

hakan648
پنج شنبه 30 آذر 1391, 16:49 عصر
سلام

بنده هم تجربه ی زیادی در مورد شئ گرایی ندارم ، اما در حال مطالعه ی کتاب شئ گرایی هستم که توضیحی در این مورد ارائه داده:

If you look at how you accomplish tasks in the world around you, you can see that you interact in an
object-oriented world. If you want to go to the store, for example, you interact with a car object. A car
object consists of other objects that interact with each other to accomplish the task of getting you to the
store. You put the key in the ignition object and turn it. This in turn sends a message (through an
electrical signal) to the starter object, which interacts with the engine object to start the car. As a driver,
you are isolated from the logic of how the objects of the system work together to start the car. You just
initiate the sequence of events by executing the start method of the ignition object with the key. You
then wait for a response (message) of success or failure.
Similarly, users of software programs are isolated from the logic needed to accomplish a task. For
example, when you print a page in your word processor, you initiate the action by clicking a print
button. You are isolated from the internal processing that needs to occur; you just wait for a response
telling you if it printed. Internally, the button object interacts with a printer object, which interacts with
the printer to accomplish the task of printing the page.

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

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

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



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


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

در نهایت ، سعی کنید کتاب Beginning C#‎ Object-Oriented Programming رو مطالعه بفرمایید که از ابتدا در مورد اهمیت شئ گرایی مینویسه بعد شما رو با روند تحلیل یک سیستم نرم افزاری ( UML ) آشنا میکنه و در نهایت روش پیاده سازی اون رو در C#‎ آموزش میده.

امیدورام مطالبی که ارئه کردم مفید بوده باشند.

Ananas
پنج شنبه 30 آذر 1391, 17:26 عصر
سلام.


مطمئنا پرفورمنس یک نرم افزار بسیار مهمتر از تغییر پذیری اونه.

نخیر. همیشه اینطور نیست. چه مقدار پرفرمنس و ازای چه هزینه ای؟

ممکنه تو پروژه تجاری کسی فقط به فکر راحت بودن طراحی باشه ولی درحقیقت همه چیزها باید در خدمت افزایش کارایی و سرعت و دقت نرم افزار باشه و راحتینوشتن و تغییر فرع بر این مسائل است
همه چیز باید در خدمت من برنامه نویس باشه.

فقط خاستم بدونم شی گرایی کجاش خوبه که تو پاسخ ها تا الان نبوده
ببینید شما برای نوشتن برنامه تو قالب شی گرایی یک هزینه ی اولیه ای دارید ولی بعد از اون هزینه هاتون کمتر هم میشه. از نرم افزار بریم بیرون : مثلا فرض کنید شما به عنوان یک تولید کننده یک قطعه و یک محصول در کارخانه میتونید به دو شیوه عمل کنید :
1 - اون رو دستی بسازید.
2 - اول بیاید یک ماشین برای ساختش بسازید بعد اون رو با ماشین بسازید.
اما چه تفاوتی داره؟ اینکه برای ساختن یک نمونه از محصول شاید ارزش نداشته باشه که بیای یک ماشین به قیمت چند نمونه از اون محصول رو بسازی بعد فقط یک نمونه از اون رو با اون ماشین تولید کنی ولی اگه بخوای مثلا صد هزار تا از اون محصول رو تولید کنی دیگه هزینه ای که برای ماشین پرداخت کردی توش گم هست و از نظر نیرو و وقت و اقتصادی به صرفه هست. حالا شما به عنوان تولید کننده باید تصمیم بگیری که قراره چقدر ازین دستگاه استفاده بشه و چقدر می تونه به سرعت و کارایی و کم شدن هزینه و وقت و اتلاف نیروی انسانی کمک کنه و آیا میصرفه؟
حالا برگردیم به برنامه نویسی : همیشه برنامه نویسی شی گرا مفید نیست و این شما هستید که باید تصمیم بگیرید که چه زمانی باید ازش استفاده کنید و چه زمانی ازش استفاده نکنید. برای این کار شما باید تسلط نسبی داشته باشید به هر دو روش و هزینه ها و مزایا و معایب هر کدوم رو در حد خوبی آشنا باشید تا بتونید انتخاب کنید که استفاده از کدوم روش در کجا بهتره.
یک مثال دیگه از خودم : برای ساخت یک تصویر تو فتوشاپ از تابلوهای به اصطلاح رونده نیاز داشتم تا نوشته رو تبدیل کنم به مجموعه ای زیاد از نقاط روشن و خاموش. که هر کدوم به شکل یک چراغ بودند. هر چقدر سعی کردم دیدم انجام این کار تو فوتوشاپ حتی برای یک بار و یک متن هم به صرفه نیست و مسیر رو عوض کردم و نشستم با c++ یک برنامه نوشتم که متن رو میگرفت و تصویر رو بهم میداد. نوشتن این برنامه حدودا یک ساعت وقت برد ولی در مدت دو الی سه ثانیه تصویر با کیفیت خوب رو برام می ساخت و از اون به بعد هر وقت می خواستم متنی رو تبدیل کنم با زدن یک دکمه این کار رو میکردم. برای بعضی از کارها حتی انجام یک بار هم در مقایسه با ساخت ماشین و استفاده از اون قابل مقایسه نیست. شی گرایی هم به نظر من همیطوره. پرداخت هزینه ی اولیه ولی استفاده ی چند برابر از مزایای اون دلیل استفاده از شی گراییه.
حالا یک مثال : فرض کنید ما میخوایم یک بازی جنگی بسازیم که در چند مرحله قراره اجرا بشه و در هر مرحله به طور میانگین 50 تا کاراکتر به عنوان دشمن به سمت بازی کن حمله میکنن و رفتاار مشابه دارن. فرض کنید بازی 10 مرحله داره. حالا اگه بخوایم برای هر کاراکتر به طور مخصوص برنامه بنویسیم و دستورات و رفتار هشو در قالب کد پیاده کنیم و عکس العمل ها و حتی ترسیم گرافیکی اون تو صحنه و ... باید 500 بار کار تکراری انجام بدیم و برای هر تغییر جزئی هم باید کدهای زیادی رو تغییر بدیم. مثلا می خوایم ارتفاع میانگین کل کاراکتر ها رو 10 سانت کم کنیم! اووووووووووه دو دستی باید بزنیم تو سر خودمون که 500 قسمت مختلف برنامه رو یکی یکی باید تغییر بدیم. و یا می خوایم فرمول حمله ی اونها رو تغییر بدیم. مثلا بگیم به شکل رندم هر کدوم از یکی از 5 تا فرمول تعریف شدمون استفاده کنه. ولی اگه ی بار اون رو تو قالب یک کلاس بسازیم و 500 نمونه ازش با چند خط کد ساده تولید کنیم خیلی راحت تر و بهتر و یکنواخت تر عمل میکنه و حتی اگه جایی هم ایراد کنه خیلی راحت می تونید با تغییر فقط یک قسمت از کد ایراد همه کاراکتر ها رو رفع کنید. مثال از بازی زدم چون بازی یکی از پرفرمنس لازم ترین برنامه هاست. به شکل ریل تایم داره اجرا میشه و بیشترین سرعت رو برای عکس العمل نشون دادن نیاز داره.

orca13
پنج شنبه 30 آذر 1391, 17:54 عصر
درورد!
منم دقیقا همچین سوالی برام بود، قبل اینکه وارد دنیای شی گرا بشم (البته از کسی نپرسیدم و وقتی چندتا برنامه ی شی گرا نوشتم، خودم فهمیدم که چی به چیه)
دوستان گفتن که چرا ارحج هستش این نوع برنامه نویسی بر مدل قبلی!
چیزی که مسلمه، شما مثلا بخوای یه ماشین حساب بنویسی، اصلا فرقی نداره که چجوری و از جه راهی بنویسی (چه بسا که شی گرا نوشتن اون، کاره بدی باشه!) اما وقتی بخوای یه برنامه، مخصوصا وقتی که تعداد موجودیت هاش بالا باشه و کاراهایی که توش انجام میشه، اونوقت بخوای همه توابع رو تو یه صفحه (همون کلاس) بنویسی، اونوقته که برای پیدا کردن یه تابع، میبینی 1 دقیقه باید اسکرول بدی تا بهش برسی، درحالی که اگه همون چند صفحه (کلاس) بکنی، خیلی آسون میشه نگهداری برنامه!
این بدیهی ترین یا بی ارزشترین مزیت شی گرایی هستش (به نظر من)
اینکه بتونی توابع و .. هم نام داشتی باشی، بحث اعتبار سنجی دقیق تر و راحت تر، ارث بری!، همین private و ... بودن توابع و متغیر ها و... از دیگر مزایای شی گرایی هستش!
کدنویسی هم لذت بخش تره!

شاید اولش یه کم گنگ و یا بیهوده کاری به نظر برسه، اما وقتی دستت بیاد، دوس داری همون ماشین حساب رو هم شی گرا بنویسی (شیک ترو باحال تر)

به نظر من تا کد ننویسی، با خوندن این جور مطالب( حرفای خودمو میگم) اونطور که باید قانع نمیشی!

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

موفق باشی!

علی متقی پور
پنج شنبه 30 آذر 1391, 18:38 عصر
بی نهایت از دوستان ممنونم
واقعا مباحث خوب و جالبی مطرح کردید.
بعضی جملات طلایی که منم باهاشون موافقم:


ببین دوست عزیز شی گرا کد زدن شاید در مقیاس کوچیک که مد نظر شماست باعث افزایش کد بشه ولی در مقیاس بزرگ اینجور نیست



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




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



چیزی که مسلمه، شما مثلا بخوای یه ماشین حساب بنویسی، اصلا فرقی نداره که چجوری و از جه راهی بنویسی (چه بسا که شی گرا نوشتن اون، کاره بدی باشه!)
....
شاید اولش یه کم گنگ و یا بیهوده کاری به نظر برسه، اما وقتی دستت بیاد، دوس داری همون ماشین حساب رو هم شی گرا بنویسی (شیک ترو باحال تر)

به نظر من تا کد ننویسی، با خوندن این جور مطالب( حرفای خودمو میگم) اونطور که باید قانع نمیشی!


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

complexcoding
پنج شنبه 30 آذر 1391, 19:28 عصر
والا همه نظرات رو نخوندم چون خيلي زياد بود حوصلم نمي كشيد
اما شي گرايي به درد جاهايي مي خوره كه تو مي خوايي چند خط كد طولاني و يا پيچيده رو بنويسي كه تعداد خطوط برنامت رو زياد مي كنه و مي خواي از اون خطوط هي تكراري در جاهاي ديگه استفاده كني ( مثل جذر )و اگر يك ماه بعد دوباره اون كدهايي رو كه خودت نوشتي ببيني ديگه نمي فهمي چيكار كردي(به كدات نگاه مي كني سرت درد مي گيره! چونكه نمي دوني يك ماه پيش چرا اين كارو كردي) .
1- خوانايي برنامه كم مي شه.
2- بستگي داره از چه زباني استفاده مي كني خوب قاعدتا با كدنويسي سي شارپ احتياج به شي گرايي در مراحل برنامه هاي خوب كارآمد هم احساس نمي شه اما در سي پلاس پلاس چون لقمه آماده و جويده نيست تا برنامه نويس بذاره دهنش و قورتش بده همون اول بايد شي گرايي ياد بگيري تا بين كدات گم نشي.
3- در برنامه هاي بزرگ يا متوسط كارآمد هست.
4- امكان استفاده مجدد از كدهاتو فراهم مي كنه.
5- امكان برنامه نويسي مولتي يا چندلايه. يعني كلاس هاتو به برنامه هايي كه با زبان هاي ديگه نوشتي تزريق مي كني.
اين آخري از همه مهمتره:
6- كلاس كارت رو بالا مي بري چون به خودت مي فهموني كه دركت از برنامه نويسي بالاس چون يك كتابخونه پر از كلاس هاي به درد بخور ساختي و همين طوري سربالا راه نمي ري...
:قلب:

علی متقی پور
پنج شنبه 30 آذر 1391, 20:16 عصر
مرسی دوست عزیز
در مورد کوتاه شدن کد اصلا باهاتون موافق نیستم. اونچه که باعث کوتاه شدن برنامه میشه متدیک نوشتن کد هاست نه شی گرا نوشتنشون. اتفاقا تو مثال من و صحبت سایر دوستان هم مشخص شد که شی گرا نوشتن باعث افزایش کد میشه.
فکر میکنم منظورتون از شماره یک اینه که خوانایی کد بالا میره که بنظرم حرف درستیه.
در مورد زبان های دیگه چیزی نمیدونم که نظر بدم.
امکان استفاده مجدد از کد ها رو هم قبول دارم.
در مورد شماره پنج فکر نمیکنم شی گرا بودن ربطی به چند لایه بودن داشته باشه.
در مرود شش هم با شما موافقم. ولی همونطور که عرض کردم میخوام درک کنم که چرا باید شی گرا کدنویسی کنم نه اینکه چون دیگران میگن و خوششون میاد منم اینکارو بکنم
ممنون از پاسختون

Ananas
جمعه 01 دی 1391, 01:07 صبح
مشخص شد که شی گرا نوشتن باعث افزایش کد میشه.
نه دیگه! اینطور نیست.

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

باور کنید تو هیچکدوم از حرفای بالا دلیلی ارائه نشده که نشون بده شی گرا نوشتن باعث افزایش سرعت برنامه و کمتر اشغال کردن رم سیستم میشه
درسته و اصلا قرار نیست که بشه. همه چیز سرعت نیست و همه ی کارها هم محاسبات ریاضی نیست که بیایم مثلا با کد های اسمبلی محاسبات رو سرعت ببخشیم. اگه شما احساس کردی در جایی از برنامه بدون استفاده از شی گرایی نتیجه ی بهتری میگیری حتی با صرف هزینه ی بیشتر خوب حتما از همون روش استفاده کن. فکر نمیکنم هدف شی گرایی سرعت در انجام محاسبات و مصرف کمتر حافظه باشه. آقا یک سوال : اگه شما رو ببندند به یک موشک و از شهری پرتاب کنن به شهر دیگه زودتر میرسید یا اینکه با ماشین برید؟ یا یک مثال دیگه : اگه از یک هواپیما به پایین پرتاب بشید زودتر میرسید یا اینکه با چتر بیاید پایین؟ بعضی برنامه ها رو هر چقدر هم که بخوان سریع تر باشن مشکل هست که بخوایم به روش معمولی اونها رو درست بنویسیم و نتیجه ی درست ازشون بگیریم. در بعضی موارد درست اجرا شدن برنامه خیلی خیلی مهم تر از سریع بودن اون هست.
مثلا کاربر روی یک دکمه کلیک میکنه و می خواد نتیجه ی یک عملی رو به اندازه ی 1 هزارم ثانیه سریعتر ببینه یا دیر تر ببینه! خوب اینجا درست اجرا شدن مهمه یا اون 1 هزارم ثانیه هه؟
یک مثال : فرض کن شما داری تایپ میکنی، خوب دقت کن، مدت زمانی که شما دستت روی یک دکمه هست چقدره؟ کامپیوتر می تونه تو اون یک لحظه ی کوتاهی که شما می زنی تو سر دکمه به تعداد مثلا 100 تا از اون کاراکتر رو به متنت اضافه کنه، ولی چی کار میکنه؟ صبر میکنه تا شما مهلت پیدا کنی دستت رو از رو دکمه برداری و اگه لازم داشتی دوباره دکمه رو بزنی و یا بعد از مثلا 0.5 ثانیه اون کاراکتر رو تکرار میکنه خیلی آهسته تا شما پا به پای اون بتونی تصمیم بگیری. پس همه جا هدف سرعت نیست. درست اجرا شدن دستورات، خروجی به موقع، نمایش صحیح، محاسبات مطمئن، راحت نوشتن برنامه، به موقع تموم شدن مراحل تولید نرم افزار و ... همه مواردی هستن که در جای خودشون مهم هستن و نباید فدای سرعت بشن. یک جمله ی طلایی رو هم به جملات انتخابیت اضافه کن : "سرعت وقتی ارزش داره و مفیده که بتونی مهارش کنی" وگرنه به هیچ دردی نمی خوره. با شی گرایی بهتر می تونی سرعت رو مهار کنی هر چند مقدار اندکی از اون کاسته شه.

علی متقی پور
جمعه 01 دی 1391, 03:18 صبح
بی نهایت از توضیحات خوبتون ممنونم.
نتیجه ایکه من از فرمایشات شما و سایر دوستان گرفتم اینه که همونطورکه حدس میزدم شی گرا نوشتن یک برنامه برای افزایش بهبود عملکرد برنامه نیست بلکه برای بهبود خود برنامه نویسی است. یعنی ما شی گرا مینویسیم که راحت تر بتونیم طرح هامون رو پیاده سازی کنیم نه اینکه به بهترین شکل ممکن اونها رو طراحی کنیم.
با این حساب فکر میکنم این فکر من خیلی هم بد نباشه. چه فکری؟ راستش من با خودم فکر کردم که بهتره برنامه های کوچیکم رو به دو نوع بنویسم. یک نوع برای پرفورمنس که نهایتا برنامه از اون ایجاد میشه. و یه کد دوم منطبق بر شی گرایی و متدیک و ... که بعنوان کد برنامه در جاهاییکه لازمه (مثه رزومه) معرفی میشه. این سه نوه کد را با هم مقایسه کنید.


lblResult.Text = (Convert.ToInt32(txtAdade1.Text.Trim()) + Convert.ToInt32(txtAdade2.Text.Trim).ToString())() )



int Adade1;
int Adade2;
int Result;
Adade1 = Convert.ToInt32(txtAdade1.Text.Trim())
Adade2 = Convert.ToInt32(txtAdade2.Text.Trim)
Result = Adade1 + Adade2;
lblResult = Result.ToString();



Adad Adade1 = New Adad();
Adad Adade2 = New Adad();
int Adade1;
int Adade2;
int Result;
Adade1.Number = Adade1
Adade2.Number = Adade2
Function Fun = new Function();
Result = Fun.Sum(Adade1 + Adade2)
lblResult = Result.ToString();


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

one hacker alone
جمعه 01 دی 1391, 18:01 عصر
با سلام
مطلب شما رو خوندم و حرف هایی که باید زده میشد رو دوستان زدن
چند شب پیش یکی از بچه ها گفت استادمون مثال های خنده داره گربه و... در مورد کلاس ها و شی گرایی میگه و اینکه چه کاریه ما این همه راه رو دور کنیم
من گفتم شی گرایی در کدهای کم زجر اوره و دلیلی نداره ما یک دستور ساده رو مثل چاپ به تابع تبدیل کنیم چون اون خودش تابعه
اما صحبت سر اینه که شی گرایی سلیقه ای نیست که بگیم باشه یا نباشه
بعنوان مثال محیط ویژوال که شما از اون استفاده میکنید یک کنترل جعبه متن ذاتا شی هست و با شی گرایی به وجود اوده حالا شما همین رو تبدیل کنید به کدی که شی گرا نباشه ببینم چی به ذهنتون میرسه؟
اصلا امکان پذیر نیست
و در موارد دیگه که ما وقتی روابطی بین توابع داریم و در واقع رفتارهایی مربوط به یک موجودیت میبینیم اون رو شی میکنیم و با کلاس ها در واقع شی گرایی رو اعمال میکنیم روی کد که هم مدیریت کد بهتر میشه ـ هم خوانایی ـ هم مدیریت هم مدیریت هم مدیریت

علی متقی پور
جمعه 01 دی 1391, 19:55 عصر
مرسی دوست عزیز
بنظر من راحت ترین کار تو دنیا اینه که نظریت اکثریت رو داشته باشی. اونوقت اکثر آدمها با تو موافقن و خب این پشتوانه قوی ای برای حرفات میشه.
مساله ای که من تو این تاپیک دنبال جوابش بودم این بود که شی گرائی چطوری باعث افزایش کارایی و پرفورمنس برنامه ما و ضمنا افزایش سرعت تولید ( نه تغییر ) برنامه میشه. با یک مثال ساده هم سعی کردم نمایش بدم که شی گرایی باعث افزایش کد و افزایش روال ها میشه.
چون من هنوز تازه وارد دنیای برنامه نویسی شدم احساس میکردم ممکنه مسائلی وجود داشته باشه که من از اون بی اطلاعم و مطالعاتم کافی نبوده باشه. اما چیزیکه از مجموع پاسخ ها دریافتم اینه که حداقل هیچکدوم از عزیزان شرکت کننده در بحث جواب این سوال رو نمیدونن و لذا صرفا به نکات مثبت شی گرایی در جنبه های دیگه پرداختن ( البته شاید جواب سوال رو میدونن ولی سوال به این واضحی را متوجه نشدن )
اینکه دات نت شی گراست سوا از این بحثه که ما هم باید با ابزار اون شی گرا برنامه بنویسیم یا در همه جا به سرعت و دقت برناممون اهمیت بدیم. چیزیکه من فهمیدم شی گرا نوشتن یک روش برای بهتر و راحت تر نوشتن کده نه ساخت برنامه بهتر. مثه قوانین نامگذاری که چه بخوبی رعایت بشن چه نشن در سرعت و کارایی برنامه تاثیری ندارند.
یک فرق اساسی ای که دات نت با برنامه های ما داره اینه که دات نت و یک زبان دات نتی مثه سی شارپ ذاتا باید مبهم باشه چون قراره که باهاش برنامه های متفاوتی نوشته بشه و در واقع هر برنامه ایکه هر کسی در هر کجای دنیا مبتنی بر این فریم وورک بنویسه یکی از مصادیق و یک روش پیاده سازی برای اشیاء دات نت است. هر چقدر که بتونه دات نت مبهم تر و قابلیت صدق پذیری بیشتری پیدا کنه باهاش برنامه های متنوع تری میشه نوشت. ولی تو یک برنامه مشخص اصولا چنین ابهامی وجود نداره و تا حد بسیار بالایی مشخصه که برنامه چه ورودی هایی داره، چه عملیاتی روی ورودی ها قراره انجام بده و در نهایت چه خروجی ای خواهد داشت. و همین باعث میشه که تمامی زوایای برنامه معطوف به این بشه که سیکل رسیدن به نتیجه از داده های ورودی سیکلی دقیتر و سریعتر باشه.
فوتوشاپ یکی از برنامه های بسیار عالی دنیای کامپیوتره. ولی اصولا نمیتونه یک فایل exe را ویرایش کنه. آیا این ضعف فوتوشاپه؟ مسلما نه. ولی اگر گفته بشه با سی شارپ تو دات نت نمیشه مثلا آنتی ویروس نوشت خب این مسلما هم برای سی شارپ و هم دات نت ضعف محسوب میشه. بهمین خاطر باید اینها بشکل مفاهیم انتزاعی که دارای خصوصیات هستن پیاده سازی شن. ولی آیا تو برنامه ای که ما میخواهیم بنویسیم هم، چنین ابهام و گستردگی مسائل وجود داره؟ مسلما نه!

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

Arash_janusV3
جمعه 01 دی 1391, 21:44 عصر
درود بر دوستان
به نظر من با توجه به شناور و یا سلیقه ای بودن روش های کدنویسی و یا پیاده سازی
نمی شه به طور قطعی و ثابت فقط از روش شی گرایی استفاده کرد
گاهی وقتها به قدری ذهن درگیر می شه با مسائل پیاده سازی و یا تجزیه و تحلیل مربوط به پیاده سازیه که اصلا اصول برنامه نویسی در ذهن جایی پیدا نمی کنه
و به راحتی از کنار اون می گذریم
ولی لازم نیست روشهای کدنویسی را جدی بگیرید
چون با توجه به پیشرفت روز به روز برنامه نویسی هر شخص در زمینه های متفاوت دلیلی برای اجباری کردن روش شی گرایی و ... وجود نداره
بهترین کاری که می تونه صورت بگیره اینه که ابتدا مسائل مورد نظر پیاده سازی بشه هم از نظر کدنویسی و هم از نظر دیتابیسی و
آنها را به طور کامل تست کنیم که جواب درستی از آنها بگیریم
سپس اگر از روشی قبلا استفاده کرده ایم مثلا شی گرایی که با این کدنویسی خوانایی داره آنها یکسان سازی می کنیم
ولی اگر چنین چیزی نبود در فرصتی مناسب که از علم و آگاهی بیشتری پیدا کردیم آنها را اصلاح می کنیم
ولی یک اصل را همیشه باید به خاطر سپردکه از هر روشی استفاده می کنید مهم نیست مهم اینه منظم کدنویسی را انجام بدبم
هم از نظر تعریف متغیرها و فیلدها و ارتباطات و ...
با منظم نوشتن هم اصلاح کدها راحتتره و هم اینکه راحتتر می توانیم از کدها در جاهای مختلف بهره بیشتری ببریم

موفق باشید

علی متقی پور
جمعه 01 دی 1391, 22:49 عصر
مرسی دوست عزیز
بسیار عالی و منطقی بود
ولی کاش در این مورد هم توضیح میدادید که چطور میتونیم بفهمیم کجا بهتره شی گرا کد بزنیم کجا نه.
اگر واقعا ملاک مشخصی وجود داشته باشه حداقل برای منه مبتدی خیلی قابل استفادس. البته بنظرمن معیاری نداشته باشه و بشخصه معتقدم شی گرا کد زدن خیلی باحال تره ولی من فکر میکنم برنامه رو سنگین تر و روال ها رو طولانی تر میکنه.
بازم ممنون

Fartaj
شنبه 02 دی 1391, 00:08 صبح
سلام

اساتید همه حرفه ای هستند و نظرات درستی دادند ، من نتونستم همه نظرات رو بخونم اما یک نصیحت رو از من کوچیکتر داشته باش :

شی گرایی رو به کار ببر حتی اگر برنامه کوچیک بود و از نظر شما احتیاجی به کد اضافه نداشت :چشمک:
سعی نکن از چیز های آماده دات نت استفاده کنی طرز کار با اونها رو یاد بگیر اما بیشتر سعی کن خودت بنویسی چون اون موقع تازه لذت برنامه نویسی و اینکه شی گرایی به چه دردی می خوره رو حس می کنی :چشمک: همیشه سعی کن خودت خالق چیزی باشی ، به چیزهای آماده دات نت دل نبند چون در آینده تازه می فهمی چه اشتباهی کردی . من به تازگی کار با php رو به کمک یکی از دوستان شروع کردم و مدتی از دات نت دور شدم تازه فهمیدم برنامه نویسی چی هست ! زمانی که با php کار می کنی همه چیز بستگی به خودت داره سخت هست ولی آبدیده می شی . وقتی دوره سختی php رو می گزرونی بعد میای تو asp اونجا هم خود به خود می ری که با دستای خودت شروع کنی به نوشتن
اینا رو نگفتم که بهت ثابت کنم چقدر حرفه ای ام اینا رو گفتم که بگم اشتباهات من رو تکرار نکنی
همیشه خودت بنویس و سخت ترین راه رو برای نوشتن انتخاب کن تا جایی گیر نکنی :چشمک:

علی متقی پور
شنبه 02 دی 1391, 00:45 صبح
البته در مورد دات نت و تحولاتش بنظر من MVC بخوبی داره نشون میده که مایکروسافت داره بسمتی میره که کمترین حد کد زنی نیاز باشه. البته بنظر من این اصلا خوب نبیست. البته من چون مبتدی هستم میترسم خیلی چیزها رو بگم. بنظرمن مایکروسافت میخواد برنامه نویسی رو راحت کنه نه اینکه کیفیت برنامه ها رو بالا ببره. بنظرم VS داره بسمتی میره که شبیه یه کد جنریتور عمل کنه. بنظر من نه به شوری ++C خوبه نه به بی نمکی اینکه همه چی حاضر و آماده باشه. من الان هم ADO.NET بلدم هم LINQ TO SQL هم ENTITY ولی خودم بشخصه ADO را بیشتر میپسندم. کلا از این نظر با شما وافقم که تا بشه خودمون بنویسیم بهتر از کدهای آمادس. چون ما روال ها رو دقیقا اونطوری که مد نظرمونه مینویسیم نه طبق استانداردهای بعضا نه چندان عالیه مایکروسافت.

Fartaj
شنبه 02 دی 1391, 01:03 صبح
دقیقا ! مایکروسافت خوب می دونه داره چیکار می کنه همه رو معتاد دات نت می کنه !! زرنگی ما اینجاست که سعی کنیم برنامه نویس بشیم نه دات نت نویس ! mvc چیه ؟؟ mvc یک روشه که هم می تونه تو php و هم در دات نت و در جاوا به کار بره اما دات نت داره همه چیز رو برای ما آماده میکنه و می زاره تو دهنمون و این اصلا جالب نیست . برای همینه که میگم هر چیز ساده ای رو سعی کنیم بعنوان یک پروژه بزرگ بهش نگاه کنیم و به بهترین شکل اون رو انجام بدیم نه برای اینکه چیزی رو ثابت کنیم برای اینکه خودمون رو تقویت کنیم شی گرای یک الگو برای بهتر ، مفیدتر و کاراتر کد زدنه و ما به عنوان برنامه نویس باید بحث شی گرایی رو تقویت کنیم

علی متقی پور
شنبه 02 دی 1391, 01:20 صبح
منظورم از Mvc همون Mvc 4 تو دات نت بود نه php.
البته من هدف برنامه نویسی را خلق یک برنامه خوب میدونم نه خلق یک برنامه نویس خوب. ممکنه پیاده سازی یک برنامه با یک روش، کد ما رو زشت و در هم و غیر استاندارد کنه ولی بخاطر کم شدن روال ها اونو سریعتر کنه.
من اگر برای تمرین کد میزنم قطعا سعی میکنم کد های استاندارد بزنم. ولی بفرض وقتی میخوام برای یه آرایشگاه زنونه با کامپیوتری با حافظه رم 512 برنامه بنویسم ترجیح میدم اونا با دات نت سه و نیم ( برای جلوگیری از مشکلات قدیمی بودن ورژن دات نت سیستم هدف ) و بسیار سبک و سریع بنویسم. تا اینکه بخوام لزوما صحیح کد بزنم.
البته بازم تاکید میکنم من یک مبتدی هستم و اگر اشتباه میکنم از بد فهمیمه نه کج فهمیم!

Fartaj
شنبه 02 دی 1391, 01:40 صبح
ببین دوست عزیز mvc مخفف Model–view–controller یک الگوی برنامه نویسیه که در جاوا ، php ، دات نت و ... بکار میره حالا دات نت اومده آماده کرده !!

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

موفق باشید

علی متقی پور
شنبه 02 دی 1391, 01:53 صبح
ببین دوست عزیز mvc مخفف Model–view–controller یک الگوی برنامه نویسیه که در جاوا ، php ، دات نت و ... بکار میره حالا دات نت اومده آماده کرده !!

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

واقعا از توضیحاتتون ممنونم. پسر خوب من با mvc وب هم نوشتم حالا شما میای اینطوری میگی؟!!! شاید بخاطر اینه که تو ایران هیچکس نمیاد بگه من مبتدی هستم و همه میخوان خودشون را پرفکت نشون بدن.


شی گرایی توسعه برنامه ، سرعت کار برنامه ، خوانایی و خطایابی رو راحت تر می کنه دیگه حالا تشخیص با خودته که چه برنامه ای به این کار نیاز داره

موفق باشید

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

من نتونستم همه نظرات رو بخونم

Fartaj
شنبه 02 دی 1391, 12:24 عصر
من قصد توهین به کسی رو ندارم در هر صورت عذرخواهی می کنم اگر توهینی به شما شده

شما پرسیدید چرا اصلا از شی گرایی استفاده بشه موقعی که می شه با کمترین کد کار رو جمع کرد ؟ بیشتر دوستان هم گفتن شاید کد زدن زیاد بشه ولی خوب کار بهینه تر می شه
منم سعی داشتم بگم از کد زیاد فرار نکنید ! کاری که من همیشه می کردم !
کلا شما دارید شی گرایی رو زیر سوال می برید چیزی که همه دنیا قبول دارند واگر شی گرا کار نکنید اصلا قبولتون ندارند

اگر به مسائل ، بزرگ و پیچیده نگاه کردید تو برنامه نویسی پیشرفت می کنید . اگر کلا با اصل شی گرایی مشکل دارید خوب بسم الله یک روش جدید بیارید . شی گرایی می گه کد رو یک بار بنویس و همه جا استفاده کن
اما اگر می خواید همیشه در حد برنامه های کوچیک کد بزنی نیازی به این شی گرایی ندارید

علی متقی پور
شنبه 02 دی 1391, 12:57 عصر
دوستان عزیز متاسفانه مسیر تاپیک کمی منحرف شده.
لطفا دیگه اگر کسی پستی میذاره در مورد این موضوع حرف بزنه که:


چگونه شی گرا نوشتن یک برنامه باعث افزایش کارایی یک برنامه و افزایش سرعت تولید آن میشود؟

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

Arash_janusV3
شنبه 02 دی 1391, 23:14 عصر
بزرگترین دلیل شی گرائی به خاطر یه نوع تنظیم ارتباط بین کدنویسی هاست و یه کمی به طور منطقی خلاصه نویسی ست
اما بهتره از طریق تجربه به علم شی گرائی پی ببرید تا اینکه بخواهید ابتدا یاد بگیرید
شما وقتی به یک مشکلی بر خورد می کنید قاعدتا در اینترنت یا مقاله و ... راه حل هایی برای اون پیدا می کنید
در اینجا شما می توانید از بهترین نوع کدنویسی استفاده کنید و همین روند باعث می شه تجربه کدنویسی و منظم و منطقی نویسی تون بالا بره
و طبیعتا منطق یک سری کدنویسی ها را هم در ذهن تون تداعی می کنه البته بستگی به خلاقیتون داره اما در کل بی تاثیر نیست
مورد دیگری هم که باید بگم اینه که شی گرائی خود به خود باعث می شه کدها منظم تر نوشته شوند و همین مسئله باعث می شه که از کدها در پروژه های متفاوت
استفاده های بهینه تری کرد
اما در نهایت لزومی نداره از شی گرائی استفاده کنید
مجددا این را می گم که منظم نویسی همه این ها را پوشش می ده البته تا 90 درصد:لبخندساده:

علی متقی پور
یک شنبه 03 دی 1391, 00:56 صبح
با تشکر از لطف شما ولی این حرف شما نه مطلب جدیدی بود و نه پاسخی به موضوع تاپیک.
اصولا منظم نوشته شدن کد ها در روش گرا یک چیز مسلم و همه قبولیست و نیاز به تکرارش از سوی هیچکسی نیست. همچنین راحت تر بودن تغییر تو برنامه و ضمنا استفاده مجدد کدها در برنامه های دیگه. ولی تو این تاپیک دنبال این هستیم که شی گرایی چطوری باعث بالا رفتن سرعت و کیفیت نرم افزار تولیدی میشه.
فرض کنید یکی سادیسم داشته باشه و مثلا تو کدنویسیش همه متغیرها رو بد نامگذاری کنه و اصلا اسم کنترل ها رو تغییر نده. خب بله این آدم تو کدنویسی خیلی اذیت میشه ولیاین موضوع لطمه ای به کارایی نرم افزارش نمیزنه.
هدف این تاپیک چیز دیگه ایه که نمیدونم چرا کسی متوجهش نمیشه و من مجبورم هی تکرارش کنم :-(

mojtaba.baghban
یک شنبه 03 دی 1391, 22:59 عصر
اول از همه بگم که من خودم خیلی خیلی از شی‌گرایی خوشم میاد هر چند مخالفان زیادی هم داره اینو گفتم که یوقت فکر نکنید من مخالف شی‌گرایی هستم. ولی به هر حال شی‌گرایی هم مخالفان زیادی داره که از کنار اسم بعضی‌هاشون هم نمیشه به راحتی گذشت. بقیه پست رو از یه pdfای کپی می‌کنم که مربوط به معرفی زبان Go هستش
‫‫صحبت در مورد نظرات مثبت و منفی نسبت به شی گرایی در این نوشته نمی‌گنجد‪ .‬شما می توانید در
اینباره تحقیق کنید‪ .‬اما برای جلب توجه هرچه بیشتر شما به این موضو ع ‬‫‪ ،‬لیست کوچکی از اسامی افرادی را به‬
‫شما نشان میدهم که از مخالفان معروف شی گرایی به حساب می آیند‪:‬‬
‫‪Ken Thompson‬‬
(خالق سیستم عامل ‪ ،Unix‬خالق زبان برنامه نویسی ‪ ،B‬اولین توسع ‬هدهنده ‪ ،Regular expressions‬خالق کدینگ ‪ ،UTF-8‬خالق زبان برنامه نویسی ‪( ....Go‬‬
‫‪Dennis Ritchie‬‬
‫(نفر دوم در خلق سیستم عامل ‪ ،Unix‬خالق زبان برنامه نویسی ‪( .... ،C‬‬
‫‪Rob Pike‬‬
(عضو تیم توسعه سیستم عامل ‪ Unix‬و سیستم عامل ‪ ،Plan9‬خالق کدینگ ‪ ،UTF-8‬خالق زبان برنامه نویسی ‪ ،Limbo‬خالق زبان برنامه نویسی ‪( .... ،Go‬‬
‫‪Richard Stallman‬‬
‫(خالق پروژه ‪ ،GNU‬از توسعه دهندگان اولیه مجموعه کامپایلرهای ‪ ،GCC‬از توسعه دهندگان اولیه ‪ Emacs، GDB، Gmake‬و ...‪( .‬‬
‫‪Linus Torvalds‬‬
(خالق ‪ ،Linux‬خالق ‪( .... ،Git‬‬
‫‪Rich Hickey‬‬
(خالق زبان برنامه نویسی ‪( .... ، Clojure‬‬
‫‪Joe Armstrong‬‬
‫(خالق زبان برنامه نویسی ‪ ،Erlang‬از طراحان پلتفرم ‪( .... ،OTP‬‬
‫‪Simon Peyton-Jones‬‬
(از طراحان اصلی زبان برنامه نویسی ‪ ،Haskell‬توسعه‌دهنده ی اصلی کامپایلر ‪(.... ،GHC‬‬
‫‪Paul Graham‬‬
(خالق زبان برنامه نویسی ‪ ،Arc‬مؤسس شرکت ‪ – Y Combinator‬شرکتی که مولد سایتهایی مثل‬
‫‪Scribd, reddit, Dropbox, Disqus‬‬ ‫است...‪( .‬‬
‫‪Edsger Dijkstra‬‬
‫(از بزرگترین محققان دنیای کامپیوتر وابدا کننده ی الگوریتم های تأثیر گذاری مثل الگوریتم معروف »دایکسترا« ...‪( .‬‬
‫‪Alexander Stepanov‬‬
(طراح اولیه کتابخانه ‪ STL‬در زبان ‪( .... ، C++‬‬
‫‪Luca Cardelli‬‬
(نویسنده اولین کامپایلر زبان برنامه نویسی ‪ – ML‬زبان ‪ ML‬ریشه ی اصلی زبانهای ‪ OCaml، Haskell‬و ‪ F#‬می باشد‪ ،‬از طراحان زبان برنامه نویسی‬ ‫‪( .... ، Modula-3‬‬

‬‫میتوان گفت که اینها از سرشناس ترین افراد در دنیای برنامه نویسی هستند؛ اگر هیچکدام از این افراد نظر خیلی‬ مثبتی نسبت به شی گرایی ندارند‪ ،‬پس شاید بد نباشد که کمی از وقت خود را به تحقیق در این رابطه ‫اختصاص‬ ‫دهید!‬

علی متقی پور
یک شنبه 03 دی 1391, 23:41 عصر
مرسی دوست عزیز
واقعا اطلاعات جالبی بود
شاید در آینده به این لیست اسم بنده با این عنوان ( اولین فیلسوف برنامه نویس :متعجب: ) هم اضافه شد
اما واقعا منم از برنامه نویسی خصوصا برای ویندوز لذت میبرم. حالا نمیدونم بخاطر شی گرا بودن روش کد نویسیه یا بخاطر چیز دیگس.

Yuness Mehdian
سه شنبه 05 دی 1391, 18:31 عصر
من جایی نشنیدم که شی گرایی کارآیی برنامه رو از لحاظ استفاده از منابع و سرعت اجرا و ... کاهش بده تو شی گرایی فقط صحبت از انتزاع کد هست و نزدیک کردن اون به دنیای واقعی، تو کتاب های شی گرایی می نویسن که معمولا نرم افزار هایی با بیش از 30 هزار خط کد رو به روش ساخت یافته (غیر شیءگرا) نمیشه به راحتی نگهداری و توسعه داد و نیاز به صرف هزینه و وقت زیادی هست . تو مثالی که اول تاپیک معرفی کردید اگه متدی به اسم save به کلاس people اضافه کنیم و کد ذخیره در بانک رو تو اون کلاس بذاریم تو سرتاسر پروژه فقط متد save رو فراخونی میکنیم به نظر من طراحی یک کتابخونه شی گرای مناسب خیلی خیلی مهم هست و باعث میشه سطح انتزاع کد بالا بده و برنامه رو حتی تو زمان کمتری تموم کنیم(!) مثل jquery فقط مینویسیم dot animate و المنت تو صفحه متحرک میشه بدون درگیر شدن با کد های جاوا اسکریپت . همچنین جایی هم نشنیدم که استفاده از شی گرایی به طور ملموس باعث کاهش کارآیی بشه . فرض کنید تو یه برنامه ی تجاری اگه کدی تو حالت معمولی t ثانیه اجرا میشه حالا با شی گرایی t به علاوه اپسیلون اجرا بشه هیچ اتفاقی نمیفته !

علی متقی پور
سه شنبه 05 دی 1391, 22:20 عصر
مرسی بابت شرکتتون تو بحث
و ضمنا ممنون که در چهارچوب موضوع صحبت کردید
یه مطلبی که من بهشاعتقاد دارم اینه که هر چقدر کلاس ها و کتابخونه های آماده بیشتری تو یه پروزه استفاده بشه هر چند که سرعت تولید اونو خیلی بالا میبره ولی ممکنه بخاطر اینکه منحصرا برای اون پروژه خاص تولید نشدن باعث افزایش روال ها و کاهش کارایی بشه. Jquery باعث میشه کدهایی که با جاوااسکریپ مینوشتیم خیلی راحت تر تولید شه ولی این اصلا به معنای این نیست که سرعت اجرای اپلیکیشن رو هم بالاتر میبره یا حافظه ram کمتری رو اشغال میکنه.
یکی از ایرادات من اینه که خیلی زیادی وارد بحث کارایی و حافظه شدم. اونم بدون اینکه تخصصی داشته باشم. شاید باورتون نشه ولی من وقتی میخوام یک حلقه for بنویسم شمارنده را byte تعریف میکنم نه int. یعنی حتی به این مسائل هم اهمیت میدم که فکر نمیکنم اصلا اهمیتی داشته باشه. تو طراحی دیتا بیس هم همینطوره. بعضی را دیدم مثلا همینطوری میزنه (nvarchar(200 ولی من بفرض اگر ماکزیمم 99 کاراکتر هم باشه نمیزنم 100. فکر کنم زیادی سختگیر باشم

Yuness Mehdian
چهارشنبه 06 دی 1391, 14:46 عصر
خواهش میکنم . در مورد دیتابیس باهاتون موافقم و در مورد اپلیکشن های تحت وب باید سخت گیر بود و اونم باید نسبت به hdd و ram و cpu ای که در اختیار داریم کد بنویسیم تو اپلیکیشن های دسکتاپ کار خیلی راحت تره در ضمن وقتی از کلاسی شیئی ایجاد نشه هیچگونه ram ای گرفته نمیشه ببینید الان منابع سخت افزاری اونقد رشد کردن که دست ما رو باز میذارن شی گرا کد بزنیم مگر تو پروژه های حساس مثل موتور بازی و کامپایلر و ... که حتی استفاده از فریم ورک هایی مثل دات نت توصیه نمیشه و باید native کد بنویسیم ! به نظر من تو پروژه های کوچیک استفاده از شی گرایی اصلا منطقی نیست و کار رو سخت تر میکنه ولی کارهای بزرگتر شی گرا باشن عاقلانه تره! در عوضش وقت میذاریم رو بهینه کردن الگوریتم ها ی مورد استفاده تو پروژه که در واقع اگه الگوریتم ها بهینه نباشن اگه با زبان اسمبلی هم کد بنویسید عملا تفاوتی با زبانهای سطح بالا نداره

Felony
چهارشنبه 06 دی 1391, 15:06 عصر
ولی راستش هنوزم بنظر من اگر ما بیائیم هزینه سخت تر کد نوشتن و سختر تغییر دادن برنامه رو بپردازیم میتونیم برنامه های سریعتری بنویسیم.
اکثر وقت ها این هزنیه ای که گفتی یعنی مرگ برنامه و از نو نوشتن اون ، چیزی که تا به حال تو 3 شرکت مختلف به عینه مشاهده کردم ، این هزینه ای که گفتی تا یه جایی قابل پرداخته ، وقتی کدهای یک برنامه رسید به چند ده یا چند صد هزار یا چند میلیون خط کد ، وقتی من برنامه نویس اومدم و سورس رو دیدم و بهت گفتم این کد نیست ، لجنه ! اون وقت باید کل این سیستم رو بریزی تو زباله دونی و از اول بنویسیش ، کدی که بابت نفر / ساعت اون ممکنه میلیون ها تومن خرج کرده باشی ، اون وقته که میفهمی اگر یکم بیشتر هزینه میکردی و وقت میزاشتی الان وضعیتت خیلی بهتر از این بود .


ید باورتون نشه ولی من وقتی میخوام یک حلقه for بنویسم شمارنده را byte تعریف میکنم نه int. یعنی حتی به این مسائل هم اهمیت میدم که فکر نمیکنم اصلا اهمیتی داشته باشه. تو طراحی دیتا بیس هم همینطوره. بعضی را دیدم مثلا همینطوری میزنه (nvarchar(200 ولی من بفرض اگر ماکزیمم 99 کاراکتر هم باشه نمیزنم 100. فکر کنم زیادی سختگیر باشم
بستگی داره برنامه چی باشه و به چی نیاز داشته باشه ، مثلا یه موقع هست تو یه برنامه مشتری توقع داره وقتی دکمه پشتیبان گیری رو زد عملیات پشتیبان گیری از بانک شروع بشه بدون اینکه UI برنامه فریز بشه و کاربر بتونه به کارش با برنامه ادامه بده ، اون موقع من میام از ترد استفاده میکنم ولی یه موقع یکی میاد میگه میخوام برای فلان کار چند هزار تا ترد بسازم با بالاترین Performance ، اون وقت بحث کوچکترین تبدیلات و فضا هم وسط میاد و من مثلا میگم به جای Thread باید از Fiber ها استفاده کرد .

ولی تو یه حلقه For ، اون هم تو Net. دیگه این حرف ها چندان معنی نداره مگر در موارد خیلی خاص .

در مورد پایگاه داده هم حتما همین روال رو ادامه بده و به انتخاب DataType ها و اندازشون خیلی دقت کن ، تو سیستم های بزرگ این موارد خیلی راحت خودشون رو نشون میدن .



در مورد دیتابیس باهاتون موافقم

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

علی متقی پور
چهارشنبه 06 دی 1391, 17:05 عصر
مرسی بابت پاسخ های خوبتون
تشکر ویژه از جناب تاجیک که تو بحث شرکت کردن. کاش دوستان دیگه هم شرکت میکردن چون فکر میکنم حتی اگر صحبت های بنده از نظر علمی ضعیف باشند ولی باز شی گرائی ارزش وقت گذاشتن و پست دادن رو داشته باشه.

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

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

در مورد ترد نویسی تخصصی ندارم ولی فکر نمیکنم چند هزار تا ترد نوشتن چیز با معنی ای بشه!!!

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

Yuness Mehdian
پنج شنبه 07 دی 1391, 21:37 عصر
پس بنظرم یکی مثه من باید بگه زنده باد ماکروسافت و زنده باد شی گرایی. آره دقیقا بعضی وقت ها باید همین رو گفت، به نظر من یک مهندس نرم افزار یا یک کد نویس باید ذهنیت حل مساله داشته باشه و به همه ی روش های کد نویسی به دید ابزاری نگاه کنه خوب اگه ابزاری مفید نباشه به راحتی میندازیمش دور. اگه تو بعضی از پروژه ها استفاده از دات نت نتیجه کار رو ضعیف میکنه نسبت فامیلی که با بیل گیتس نداریم میندازیمش دور و native می نویسیم ولی اصلا به نظر من اصلا نباید نگران این موضوع بود که استفاده از یه تکنولوژی مثل دات نت برنامه نویس رو ضعیف بار میاره اصلا اینطور نیست به نظر من اگه با استفاده از یک فریم ورک مثل دات نت حتی یک خط کد بنویسیم و مساله حل بشه (با انتظاراتی که داریم) چرا بیایم و تعصب بخرج بدیم و از اون استفاده نکنیم؟ همین مورد برای شی گرایی هم صدق میکنه وقتی که شی گرایی تاثیر آنچنانی رو کارآیی نداره چرا متعصبانه ازش استفاده نکنیم ؟ همچنین از اونطرف هم اگه دات نت بعضی وقت ها جواب نمیده چرا بیایم وقتمونو تلفش کنیم؟



در مورد دیتابیس باهاتون موافقم


بنویسیم تو اپلیکیشن های دسکتاپ کار خیلی راحت تره


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

در مورد اینکه از شی گرایی بخاطر کاهش کارآیی استفاده نکنیم ، مثل این هست که از سیستم عامل بخاطر ram ای که اشغال میکنه استفاده نکنیم ! خوب درسته که سیستم عامل مقداری از منابع رو در اختیار میگیره ولی خدمت خیلی بزرگی هم داره ارائه میده که می ارزه قید اون منابع رو بزنیم و اگه اون خدمته نباشه مساله خیلی بزرگتر از اندازه واقعیش میشه (ساخت لودر یا حتی یکی سیستم عامل اضافه میشه به پروژه ! )


نظر من رای یک برنامه مهم باید همه قسمت های برنامه یا حداقل اکثرش توسط خود برنامه نویس نوشته بشه

اگه تفکر ماژولار داشته باشیم دیگه نگران این مساله نمیشیم ، وقتی یک کلاس رو مهندس های با تجربه ای نوشتن و بهینه کردن (در حدی که ما نیاز داریم) خوب چه اشکال داره ازش استفاده کنیم و وقتمون رو بذاریم رو کد هایی که هیچ جا گیر نمیاد و هسته اصلی برنامه ر تکمیل کنیم ؟

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

علی متقی پور
جمعه 08 دی 1391, 14:38 عصر
چکیده همه پست های تاپیک تا الان

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

در پست دوم جناب blackCats اشاره کردن به بحث Entity و اینکه میاد دیتا بیس را مدل میکند. و بنده در پست سوم عرض کردم که ارتباط حرفشون به بحث را متوجه نشدم و ایشون بعدا مراجعه ای نداشتن تا توضیحی بدن.

در پست چهارم دوستمون amin1soft فرمودند که شاید در پروژه های کوچیک، شی گرا کد زدن باعث افزایش کد بشه ولی در پروژه های بزرگ اینگونه نیست. ضمنا اضافه کردند که الان غول های نرم افزار جهان به شی گرایی و شی گرا کد زدن احترام میگذارند.

در پست ششم دوست با تجربه ای zarifcomputer فرمودند که به تجربه متوجه شده اند که شی گرا کد زدن چقدر میتونه در کاهش وقت و هزینه برای تغییرات بعدی یک برنامه موثر باشه و بنظر ایشون شی گرایی محشره.

در پست نهم جناب hakan648 در مورد خوبی های شی گرا کد زدن و اینکه باعث راحتی برنامه نویسی و تغییرات برنامه ، میشه صحبت کردن و بعنوان یک مثال از jquery نام بردن.
ضمنا در ادامه فرمودند :


....
گاهی سرعت نرم افزار فدای طراحی میشه و برعکس.
از نظر من ، چون ما همیشه با یک جهان شئ گرا طرف هستیم ، وجود یک زبان برنامه نویسی شئ گرا ، در پیاده سازی یک نیاز شئ گرای ما خیلی ضروری هست. و در توسعه و نگهداری نرم افزای کمک زیادی میکنه.
...


در پست دهم جناب ananas ضمن غلط دونستن اینکه پرفورمنس یک برنامه مهمتر از سهولت تغییر کد هاشه فرمودند که شی گرا نوشتن یک هزینه اولیه داره که ثمراتش در ادامه کار به این هزینه میرزه. و با چند مثال سعی کردن این مطلب رو اثبات کنند.

در پست یازدهم آقای orca13 ضمن بیان این مطلب که شی گرا کد زدن خودش را در پروژه های بزرگ نشون میده فرمودند:


....
بخوای همه توابع رو تو یه صفحه (همون کلاس) بنویسی، اونوقته که برای پیدا کردن یه تابع، میبینی 1 دقیقه باید اسکرول بدی تا بهش برسی، درحالی که اگه همون چند صفحه (کلاس) بکنی، خیلی آسون میشه نگهداری برنامه!
این بدیهی ترین یا بی ارزشترین مزیت شی گرایی هستش (به نظر من)
اینکه بتونی توابع و .. هم نام داشتی باشی، بحث اعتبار سنجی دقیق تر و راحت تر، ارث بری!، همین private و ... بودن توابع و متغیر ها و... از دیگر مزایای شی گرایی هستش!
کدنویسی هم لذت بخش تره!
...


در پست دوازدهم بنده عرض کردم که :


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

در پست سیزدهم جناب complexcoding شی گرایی رو برای جلوگیری از کد نویسی های تکراری و همچنین بالا رفتن خوانایی کد ها مفید دونستن. ضمنا سود شی گرایی رو برای برنامه های که با زبان ++C نوشته میشن محسوس تر دونستن و ضمنا بنظرشون شی گرا نوشتن باعث میشه بتونیم برنامه نویسی لایه ای را پیاده سازی کنیم.

در پست پانزدهم جناب ananas فرمودند که سرعت اجرای برنامه همیشه مهم نیست و مهم صحت و اجرای درستشه. و با چند تا مثال سعی کردن این مساله را ثابت کنن ولی هرگز توضیح ندادن که مگر سریعتر اجرا شدن برنامه مانع درست اجرا شدنشه؟

در پست شانزدهم بنده عرض کردم که:


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


در پست هفدهم جناب one hacker alone فرموده اند که " شی گرایی سلیقه نیست که بگیم باشه یا نیاشه" و برای اثبات حرفشون اشاره به محیط ویژوال استدیو کردن که کنترل هاش همه شی هستن. ضمنا به بحث مدیریت کد اشاره کردن که با بحث شی گرا راحت تر انجام میشه.
در پست هجدهم بنده عرض کردم که شی گرا بودن دات نت فریم وورک و امثالهم هیچ دلیلی بر این نیست که بهترین نحوه استفاده ازش هم شی گرا کد زدن باشه. زیرا که دات نت هر چه که گسترده تر و قابل صدق تر بر مصادیق بیشتری باشه با ارزشتره ولی برنامه ایکه ما مینویسیم تا حدود زیادی تخصیص یافته و بسیار مشخص تره که ورودی هاش چیه و قراره چه خروجی ای داشته باشه لذا نیاز نداره که مثل دات نت قابل صدق بر موارد متعدد باشه. دات نت بر مبنای شی گرایی تعریف شده زیرا که قرار است در موارد بسیار مختلف و متعدد مورد استفاده قرار بگیره ولی برنامه های ما چنین حالتی را نداره.

در پست نوزدهم جناب Arash_janusV3 فرمودند :


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


در پست بیست و یکم آقای Fartaj فرمودند:


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

و ضمنا ایشون در پست بیست و سوم فرمودند :


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

و در پست بیست و پنجم فرمودند:


...
شی گرایی توسعه برنامه ، سرعت کار برنامه ، خوانایی و خطایابی رو راحت تر می کنه
...

و در پست بیست و هفتم فرمودند:


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

در پست بیست و نهم جناب Arash_janusV3 فرمودند:

بزرگترین دلیل شی گرائی به خاطر یه نوع تنظیم ارتباط بین کدنویسی هاست و یه کمی به طور منطقی خلاصه نویسی ست
...
مورد دیگری هم که باید بگم اینه که شی گرائی خود به خود باعث می شه کدها منظم تر نوشته شوند و همین مسئله باعث می شه که از کدها در پروژه های متفاوت استفاده های بهینه تری کرد
اما در نهایت لزومی نداره از شی گرائی استفاده کنید
مجددا این را می گم که منظم نویسی همه این ها را پوشش می ده البته تا 90 درصد:لبخندساده:

در پست سی ام بنده عرض کردم:

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


در پست سی و یکم دوستمون جناب mojtaba.baghban لیستی از چندین نفر از بزرگانی که با شی گرایی مخالف هستن رو آوردن که حداقل برای بنده جالب بود و شمام در صورتیکه علاقه مندید میتونید به همون پست مراجعه کنید.

در پست سی و سوم آقای Yuness Mehdian فرمودند:

من جایی نشنیدم که شی گرایی کارآیی برنامه رو از لحاظ استفاده از منابع و سرعت اجرا و ... کاهش بده تو شی گرایی فقط صحبت از انتزاع کد هست و نزدیک کردن اون به دنیای واقعی، تو کتاب های شی گرایی می نویسن که معمولا نرم افزار هایی با بیش از 30 هزار خط کد رو به روش ساخت یافته (غیر شیءگرا) نمیشه به راحتی نگهداری و توسعه داد و نیاز به صرف هزینه و وقت زیادی هست
...
به نظر من طراحی یک کتابخونه شی گرای مناسب خیلی خیلی مهم هست و باعث میشه سطح انتزاع کد بالا بده و برنامه رو حتی تو زمان کمتری تموم کنیم
...
فرض کنید تو یه برنامه ی تجاری اگه کدی تو حالت معمولی t ثانیه اجرا میشه حالا با شی گرایی t به علاوه اپسیلون اجرا بشه هیچ اتفاقی نمیفته !
ایشون دز پست سی و پنجم فرموده اند:


...
به نظر من تو پروژه های کوچیک استفاده از شی گرایی اصلا منطقی نیست و کار رو سخت تر میکنه ولی کارهای بزرگتر شی گرا باشن عاقلانه تره! در عوضش وقت میذاریم رو بهینه کردن الگوریتم ها ی مورد استفاده تو پروژه که در واقع اگه الگوریتم ها بهینه نباشن اگه با زبان اسمبلی هم کد بنویسید عملا تفاوتی با زبانهای سطح بالا نداره

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

در پست سی و هفتم من عرض کردم:


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


در پست سی و هشتم نیز جناب Yuness Mehdian فرموده اند که ما براساس موقعیت و نیازمون هر جا لازم باشه از شی گرایی استفاده میکنیم و اگر جایی روش بهتری وجود داشته باشه از همونر وش بهره میبریم. ضمنا بنا بر نظر ایشون استفاده نکردن از شی گرایی بخاطر کاهش کارایی کار غلطیه چون در عوضش خدمات بسیار بزرگتری ارائه میده و در کل معتقدند :


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


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

mtchabok
شنبه 09 دی 1391, 14:58 عصر
سلام دوستان
طبق نظرات متفاوتی که داده شد ، که البته اکثرا به کارا بودن شئی گرایی تاکید داشتن باید گفت که در دات نت شئی گرایی به صورت درونی پشتیبانی می شود . اصلا یعنی چی ؟ خودم میگم : یعنی اینکه مهندسین و توسعه دهندگان دات نت اونقدر اومدن نحوه اجرای کدها رو بهینه کردن که عملا هیچ فرقی بین شئی گرا و غیر اون وجود نداره ، اگرم وجود داشته باشه بسیار بسیار ناچیزه .
اما این دلیلی بر این نیست که کلا فاکشنال نوشتن رو بزاریم کنار و تمام برنامه هامون رو به صورت شئی گرایی پیاده سازی کنیم . ( که البته بهتره که اینطور باشه )
برای تعیین روش قالب کدنویسیتون می بایست به پروژه تون دقت کنید و می بایست مشخص بشه که هدف پروژه آیا کیفیت ، سرعت ، عملکرد ، کدومشون مهمتره .
مثالی میزنم:
اگه شما بخواید یه برنامه ای رو بنویسید که قراره در آینده توسعه بدید . خوب مسلما برای توسعه راحتتر باید شئی گرا باشه . اما زمانی هست که برنامه ای رو برای ساخت داریم که اصلا افق دیدی نداره و فقط یه برنامه ساده هس ، خوب در اینجا هست که میتونیم بین دو حالت انتخاب کرد .

در ضمن کی گفته که برای نظم باید شئی گرای نوشت ، این اصلا درست نیست . چونکه میشه فانکشنال هم نوشت و نظم هم داشت و حتی شئی گرایی ربطی به نامهای توابع یکسان هم نداره و اون بر میگرده به کلاسه بندی . که میتونیم متدهای ایستا رو در کلاسها پیاده سازی کنیم که همون کد نویسی فاکشنال رو منجر میشه .

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

موفق باشید .

ali.eskandari
یک شنبه 01 بهمن 1391, 09:32 صبح
سلام
شرمنده.من دیر اومدم
دوستان هرچی که لازم بود رو گفتن:لبخند:

niko2008
جمعه 20 اردیبهشت 1392, 22:22 عصر
با سلام خدمت دوست عزیز . خوب بحث کاملا مفصل و خوب و کامل بود ولی من به این نتیجه رسیدم که سلیقه ها در برنامه نویسی متفاوت و حتی برحسب نوع و نیاز باید برنامه را نوشت

borderliner
دوشنبه 27 دی 1395, 03:05 صبح
به نظرم بسته به کاری که میخواید انجام بدید و پروژه ای که میخواید شروع کنید داره. اگه توی پروژه‌تون Mutable state های زیادی دارید، یا فضای کاریتون به دنیای واقعی نزدیکه (مثل Gameها)، شی‌گرایی بهترین کاره. ولی از بدی‌های شی‌گرایی، همین Mutable بودن اجزا، و Side effect داشتن توابع و متدهاست، یعنی توابع Pure نیستن. این باعث میشه که یک قطعه کد، یک قسمت دیگه از برنامه رو تغییر بده و شما ساعت ها یا روزها وقت بذرید برای Debug کردنشون. من به شخصه با Functional programming راحت‌تر هستم، چون ورودی و خروجی توابع برام مشخصه، Side effect نداریم، و بازی نمینویسم.
اینکه میگید تمرکز مایکروسافت روی شی‌گراییه، تقریبن اشتباهه. چون #C کاملن قابلیت Functional نوشتن رو داره. #F هم که زبان به کل Functional ایه و از OCaml پیچونده شده.