PDA

View Full Version : حرفه ای: تفکر شی گرایی



yones_safari
چهارشنبه 11 اردیبهشت 1392, 19:20 عصر
درود فراوان
اگر کدهای برنامه های اوپن سورس که با شی گرایی طراحی شدن (حالا بحث MVC که بعضی ها دارن رو بیخیال ) بررسی کنید میبینید که خیلی حرفه ای سیستم رو تحلیل کردن و کلاسها کلا با هم در ارتباط هستن و کلا بر پایه OOP نوشته شده.
اما تو آموزشها مثالهایی که وجود داره ماشین و سگ و ... :)) زده میشه.و کدهایی که نوشته میشه به این صورته که میان همون کد نویسی خطی که قبلا با توابع پیاده سازی میشد رو میارن جمع بندی میکنن و برای هر کدام یه کلاس میسازن و بعد دوباره متد های درون اون کلاس رو صدا میزنن و برنامه اجرا میشه و ....
حالا سوال اینجاست که چطور میشه یه چنین تحلیلی کرد سیستم رو؟؟یعنی از برنامه نویسی خطی بیرون اومد و شی گرایی کد نوشت؟؟منظور شی گرایی در حد پروژه هایی که بالا ذکر کردم ;)
خوب شاید بگین سورس اون کدها رو مطالعه کن و یاد بگیر اما مشکل اینجاست که مثلا تو یک مدار بزرگ شما بیایین به یک خازن زوم کنین و کاری که اون انجام میده رو بررسی کنید ولی من میخوام کل کاری که سیستم با اشیا انجام میده رو بررسی کنم!چون کدهای اینجور نرم افزارها زیاد هستن واقعا خیلی سخته خط به خط اینا رو بررسی کرد!!
خوب راه حل؟!

eshpilen
چهارشنبه 11 اردیبهشت 1392, 20:14 عصر
جالب اینکه بنده قبلا عینا به همین ایراد گرفته بودم بودم که چرا استدلالهای و مثالهای شیء گرایی واقعگرایانه نیست.
ماشین و سگ و حیوان و میز و صندلی چیه آخه. دیگه کدنویسی و شیء گرایی که 100% عملیه و باید بشه با مثالهای واقعی مزایاش رو نشون داد و ثابت کرد.
شاید این آموزشها یخورده زیادی سطح بالا هستن و تاحدی ایدئال گرایانه و/یا اغراق آمیز.

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

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

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

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

yones_safari
چهارشنبه 11 اردیبهشت 1392, 22:40 عصر
من از نظر الگوریتم و .. مشکل خاصی رو ندارم.تحلیل هایی هم که انجام میدم برنامه های خوب و سبکی در نهایت ایجاد میشه و کدهاش هم کمتر از این طرز کد نویسی میشه.ولی چیزی که ذهنم رو مشغول کرده اینه که به قول معروف اینایی که این نرم افزارهای بزرگ رو پیاده کردن اینا هم میتونستن خیلی راحت سیستم ها رو اینطوری تحلیل کنن و کدهاشون هم کم باشه و سرعت برنامه هم زیاد باشه ولی چرا این کار رو نکردن؟100% یه دلیل خیلی خوب و کارامدی داره.اما در مورد اینکه یواش یواش جلو رفتن هم موافقم اما من خیلی وقته به این روش کدنویسی میکنم و دیگه میخوام کلا به سیستم شی گرایی سوئیچ کنم.و باید عرض کنم که شی گرایی که بیای مثلا یه کلاس دیتا بیس درست کنی و یه کلاس یوزر و بعد بیای بگی من شی گرایی کار میکنم رو قبول ندارم.یا باید کلا شی گرایی کار نکرد یا اگه خواستم کار کنم باید کلا مثل سیستم های اینا باشه که قشنگ پیچیدست و هر کسی نمیتونه ازش سر در بیاره. :)) خیلی وقته با جملاتی مثل جملات آخر شما و اینکه مشتری چقدر هزینه میکنه که من خودم رو با شی گرایی درگیر کنم و .... شونه خالی میکنم ولی دیگه الان وقتشه ،روش تحلیل رو باید تغییر بدم.

csvbcscp
یک شنبه 26 خرداد 1392, 05:31 صبح
Do you understand what encapsulation means, but don't know why in the world you would want to use it?

Do you see examples of inheritance in the frameworks and libraries, but have only just dabbled with inheritance in your own code?

If you answered yes to these questions, you want to begin to learn the patterns literature.
Object oriented programming gives you the tools, but doesn't tell you how to effectively use them.

We all just rummage in the dark sometimes, but after a while, some techniques started showing up over and over. A few years back, a group of clever researchers decided to ask some of the best developers using OO languages what solutions they were coming up with. If a solution tended to appear over and over, the researchers wrote it down, gave it a name, and described when it would be good to use.

These recurring solutions are called "design patterns."

The landmark book that opened up design patterns to the world is called"Design Patterns, Elements of Reusable Object Oriented Software" by Gamma,Helms, Johnson, and Vlissides (a.k.a. the Gang of Four).

This book is an excellent reference, but not an easy read. I do not recommend that you start there. I recommend, instead, that you start with a slim and readable volume called"Design Patterns Explained" by Shalloway and Trott

These are not code snippets per se, although many books illustrate their examples using bits of code, and I've seen at least one patterns book come with a CD illustrating samples of each pattern (Design patterns in C# byCooper). Design patterns are not libraries, either. They are techniques and solutions to the problem of learning and understanding Object Oriented programming.

Take a look at the Shalloway book. If you aren't a better programmer after reading that book, I'll eat my hat. (I read it in two days... it's an easy read)

A list of useful books in the patterns space can be found here:

http://www.amazon.com/exec/obidos/tg/listmania/list-browse/-/2U7CN56RFJYU3/ref=cm_aya_av.lm_more/104-0692560-9975161

Good Luck

(this blog posting was copied from my prior blog. I find myself referring to it in the forums from time to time, so I wanted to keep it around.)

C# programming advice