PDA

نسخه کامل مشاهده نسخه کامل : شیئ گرایی(object oriented) در انریل اسکریپت



silsin
04-02-2011, 14:56
سلام

می خواستم این تاپیک رو زودتر بزنم ولی نشد. این تاپیک ابتدا به تعریف شیئ گرایی -مفاهیم شیئ گرایی و شیئ گرایی در انریل اسکریپت می پردازه برای همین فعلا دو قسمت اول رو می زارم و قسمت اخر رو چون خودم باید بنویسم رو بعدا (چون باید مثال بیارم) .در ضمن به این خاطر این مطالب رو توی پشتیبانی انریل نذاشتم چون مهمه و همه برنامه نویسان انریل اسکریپت باید اون رو بخونن.
--------------------------------------------------------------------
برنامه‌نویسی شیءگرا (به انگلیسی Object Oriented Programming مخفف OOP) یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی تشکیل دهنده برنامه‌ها در آنها اشیا هستند.اشیاء صورت‌های مجرد از ماهیت‌های مطرح در مسئله هستند که دارای وضعیت (درونی) و همچنین عملیات بر روی داده‌ها (وضعیت درونی) می‌باشند. این نوع نگرش دارای مزایای بسیاری از جمله مدیریت پیچیدگی وهزینهٔ نگهداری کمتری است.

زبان‌های برنامه نویسی شیءگرا، زبان‌هایی هستند که در آن برنامه نویس می‌تواند اشیاء مختلفی را تعریف نماید و از اشیاء تولید شده استفاده نماید. امروزه اکثر زبان‌های دستوری برنامه نویسی از فنون شیءگرایی پشتیبانی می‌کنند. زبانهایی مانند جاوا، سی++، سی شارپ، ایفل از جمله زبانهای شیءگرا هستند. حتی بسیاری از زبانهای روال گونه که ساختار برنامه‌ها در آنها بلوک‌هایی با نام پروسیجر است امروزه از فنون شیءگرایی نیز پشتبانی می‌کنند. زبانهای سی++ و پی‌اچ‌پی از این جمله هستند. هر شیء یک سری خصوصیت و قابلیت دارد، که اصطلاحاً Properties و Methods خوانده می‌شوند. در این روش از برنامه نویسی دید برنامه نویس به سیستم دید شخصی است که سعی می‌نماید به پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آنها سیستم را تولید نماید.
برنامه‌نویسی شیءگرا (به انگلیسی Object Oriented Programming مخفف OOP) یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی تشکیل دهنده برنامه‌ها در آنها اشیا هستند.اشیاء صورت‌های مجرد از ماهیت‌های مطرح در مسئله هستند که دارای وضعیت (درونی) و همچنین عملیات بر روی داده‌ها (وضعیت درونی) می‌باشند. این نوع نگرش دارای مزایای بسیاری از جمله مدیریت پیچیدگی وهزینهٔ نگهداری کمتری است.

برنامه نویسی شی گرا

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

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

در این تحقیق شی گرایی را در دو زبان برنامه نویسی (C#,C++) مورد بررسی قرار می دهم و شی گرایی و موارد آن را در هر یک به اختصار توضیح می دهم.

در ابتدا نگاهی می اندازیم به این خاصیت در زبان برنامه نویسی C++ و در ادامه شی گرایی را در زبان C# مورد بررسی قرار می دهیم .

شئی گرایی در زبان C++

برنامه نویسی شی گرا چیست؟

از آنجا که اساس تکوین C++ برنامه نویسی شی گرا است. پس مهم است که تعریف دقیقی را از برنامه نویسی شی گرا ارائه دهیم . شی گرا از بهترین مفاهیم برنامه سازی ساخت یافته بوجود آمده است و با چندین مفهوم قوی ترکیب شده که امکان سازماندهی برنامه ها را به طور کارآمد را فراهم می کند.

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

کپسوله سازی

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

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

درون یک شی (کد وداده ها) یا هردو ممکن است برای آن شی محلی (خصوصی/Private) یا عمومی (Public) باشند.کد یا داده های محلی فقط توسط بخش دیگری از شی شناخته شده و قابل دست یابی هستند.

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

چند ریختی

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

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

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

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

وراثت

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

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

بنابراین مکانیزم وراثت به یک شی امکان می دهد تا نمونه خاص از یک حالت عمومی تر باشد.

شی گرایی در زبان C#

شی گرایی (oop) در C# بر چند پایه استوار است که به قرار زیرند:
Inheritance
Encapsulation
Polymorphism
Abstraction
Interface

اکنون به توضیح مختصر هر یک می پردازیم:

Inheritance ارث بری

پدر و فرزندی را در نظر بگیرید . هر پدری مشخصات فردی به خصوصی دارد . فرزند وی می تواند همه خصوصیات او را به ارث برد و خصوصیتهای دیگری نیز داشته باشد که پدرش ندارد . این یعنی ارث بری !

در برنامه نویسی شی گرا از مفهوم ارث بری استفاده های زیادی می شود . قابلیت استفاده دوباره از کد (Reusability) یکی از مزیات اصلی ارث بری است.

Encapsulation

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

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

در C# برای کپسوله کردن از Access Modifier های Private ، Protected ، Public استفاده شود.

Polymorphism

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

Abstraction

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

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

Interface
اینترفیس در برنامه نویسی همانند همان کلاس است تنها با این تفاوت که هیچکدام از اعضای آن پیاده سازی نمی شوند . در واقع یک اینترفیس گروهی از متدها ، خصوصیات ، رویدادها و Indexer ها هستند که در کنار هم جمع شده اند. اینترفیس ها را نمی توان Instantiate (وهله سازی) کرد (یعنی نمی توان وهله ای از یک اینترفیس ایجاد کرد !) . تناه چیزی که اینترفیس دارا می باشد امضای (signature) تمامی اعضای آن می باشد. به ای معنی که ورودی و خروجی متدها ، نوع property ها و ... در آن تعریف می شوند ولی چیزی پیاده سازی نمی شود. اینترفیس ها سازنده و فیلد ندارد. یک اینترفیس نمی تواند Operator Overload داشته باشد و دلیل آن این است که در صورت و جود ویژگی ، احتمال بروز مشکلاتی از قبیل ناسازگازی با دیگر زبانهای .Net مانند VB.Net که از این قابلیت پشتیبانی نمی کند وجود داشت. نحوه تعریف اینترفیس بسیار شبیه تعریف کلاس است تنها با این تفاوت که در اینترفیس پیاده سازی وجود ندارد.

یک مثال کاربردی

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

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

مفاهیم فوق در زبان‌های برنامه نویسی شیءگرا گنجانده شده‌اند. در این زبان‌ها، اشیاء زیادی از پیش وجود دارند که برنامه‌نویسان می‌توانند از آنها استفاده کنند.
[ویرایش]
ارتباط اشیاء

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

ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری خودروییاست که صندوق عقب داشته باشد.
اگر کسی به درب کارخانه مراجعه کند و بگوید که 'خودرو' می‌خواهد، چیزی دریافت نمی‌کند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد پس مشتری تنها می‌تواتند ماشین باربری یا ماشین سواری بخواهد.
کارواش را در نظر می‌گیریم. این کارواش خودرو را تمیز می‌کند و دیگر به طور جزئی عنوان نمی‌کند که کدام نوع خودرو را تمیز می‌کند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
وقتی شخصی قصد اجاره خودرویی دارد، و می‌خواهد جنسی را حمل کند در هنگام نماس با متصدی کرایه ماشین می‌گوید: «اگر خودرو شمااز نوع باربری است، برای من ارسال کنید»، ولی اگر قصد جابجا شدن را دارد می‌گوید : «برای من یک ماشین سواری بفرستید.»

در زبان‌های برنامه نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشیا از یکدیگر ارث بری می‌کنند. برخی از تعاریف کاملاً عام است و نمی‌توان از آنها نمونه شیئی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته می‌شود.
---------------------------------------------------------------------------------------------------------------
خب تا اینجا بسه . دلیل اینکه من شیئ گرایی در c++ رو اوردم اینه که تقریبا هیچ تفاوتی با انریل اسکریپت نداره اما شما صرفا به این مقاله به چشم مقدمه نگاه کنید. این مقاله هیچ اموزشی نیست و فقط و صرفا معرفی چند مفهموم می باشد در قسمت دوم این مقاله شیئ گرایی در انریل اسکریپت بررسی خواهد شد.

anti-military
04-02-2011, 15:40
خیلی کامل و مفید بود ممنون ...

ehsan_wwe
05-02-2011, 09:23
حرف نداشت ممنون :40:

اما چرا وقتی یه بی سواد میاد یه اسم کاملا بی ربط رویه یه تکنس خارجی رو میزاره ماها باید از همون اسم استفاده کنیم به نظرتون ؟
مثل OO که کل دنیا به این اسم میشناسن حتی ژاپنی ها اما ما باید بگیم شی گرایی

aliscan
05-02-2011, 09:51
سلام
خیلی تاپیک مفید و بدرد بخوریه و میشه:46:حسن جان امیدوارم ادامه بدین چون از اینجور چیزا زیاد تو اینترنت به زبون فارسی گیر نمیاد:21:
مرسی:40:

silsin
05-02-2011, 14:53
حرف نداشت ممنون :40:

اما چرا وقتی یه بی سواد میاد یه اسم کاملا بی ربط رویه یه تکنس خارجی رو میزاره ماها باید از همون اسم استفاده کنیم به نظرتون ؟
مثل OO که کل دنیا به این اسم میشناسن حتی ژاپنی ها اما ما باید بگیم شی گرایی


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

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

silsin
07-02-2011, 20:12
سلام

قسمت دوم مقاله هم اماده شد . دوستان توجه کنند که چون این جزئ مهمترین مبحث ها در انریل اسکریپت هست حتما تا اخر و با دقت بخونن . توجه کنید که قسمت اول این بخش فقط برای این است که شما اگر مفاهیم داخل این مقاله را متوجه نشدید به ان رجوع کنید . امیدوارم تونسته باشم توی یا دیگری این زبان برنامه نویسی به بچه ها سهمی داشته باشم .
با تشکر silsin
---------------------------------------------------------------------------------------------------------
منطق شیئ گرایی در انریل اسکریپت
در منطق شیئ گرایی , کلاس توضیحی است از ان چه که ما می خواهیم به وجود بیاوریم . کلاس یک نوع موجودیت در تعریف یک مشخصه از مشخصات یک شیئ است(مثلا قسمتی از یک ماشین به زنگ دلخواه ما باشد)اما این همیشه نمی تواند بدین معنا باشد که این یک ویژگی کلی از این تنظیمات است.یک کلاس همیشه الگوی رفتاری یک شیئ را تعیین می کند.یک سری توابع و متد های خواص در کلاس های سما برای جهت دادن به چگونه رفتار نشان دادن شیئ ها استفاده می شود.
این بسیار مهم است که شما توجه کنید که کلاس ها در حقیقت یک شیئ نیستند, بلکه صرفا یک طرح (بلو پرینت)از شیئ یا اشیائی هستند که می خواهند ایجاد شوند.
هنگامی که شما یک شیئ را در داخل یک کلاس می سازید در حقیقت شما یک مدل از طرح کلی آن را ساخته اید .
مکانیزم کلاس ها
در انریل اسکریپت , ما کلاس را به صورت زیر تعریف می کنیم:
Class MyClass Extends MyParentClass;
کلاس در اینجا مشخص کننده این است که ما به انریل اسکریپت می گویم که می خواهیم یک کلاس جدید را تعریف کنیم.
MyClass نامی هست که ما به این کلاس جدید می دهیم.
حالا بیاید ادامه ان رابررسی کنیم.
بعد از اینکه شما کلاس را تعریف کردید اکنون اماده تعریف متغیرها هستید.
Var int color; //part color index number
Var byte manufacture; //manufacture refrence value
تعریف توابع در کلاس جدید شباهتی به تعریف متغیر ها دارد.
function doAThing()
{

}

function doAnotherThing()
{

}
در انریل اسکریپت, ما تبیین یک شیئ را spaw کردن ان می نامیم .
این چنین شما می توانید از تابع spawn() برای ساخت یک شیئ جدید در داخل قالب یک کلاس استفاده کنید :
Var actor MyObject; // variable to hold the object
MyObject =Spwn(MyClass); // Spawning the Object

متدها
اشیائ به طور مستقل از بر هم کنشی داده های موجود در حافظه جمع آوری می شوند.
که به صورت “مستقل” می باشد.هر شیئ این ویژگی را در خود دارد.اگر شما یک کلاس به نام
MyBot داشته باشید و شما دوشیئ را از داخل ان کلاس به نام های BotA وBotB را spawn کنید
ان دو نمی توانند با یک دیگر ارتباط داشته باشنتد.این موضوع مد نظر ما است برای مفهوم بعدی در برنامه نویسی شیئ گراست:
هنگامی که یک ابجکت spwn شد همیشه در ساختاری نگه داری می شود مانند متغیرها.و نامی که به ان اختصاص داده شده است
به عنوان مرجع مراجعات بعدی به ان تعیین می شود. این سیستم از این نام برای پیدا کردن ابجکت هایی که در متغیر ها تعریف و تجمع کرده اند استفاده می کند.
اگر شما بخواهید کار دیگری را انجام دهید مثل تغییر یا چیز دیگر نمی توانید چون فقط این ها برای این کار استفاده می شوند. از انجایی که اینها غیر قابل دسترس هستند و برخلاف و متغیر هایی معمولی شما نمی توانید آن را تغییر دهید پس شما نمی توانید اعمالی از قبیل باز کردن ویرایش و کارهای دیگر را روی انها انجام دهید .
متدها در کلاس ها برای این تعریف می شوند که که ابجکت ها بگویند که چه کاری را هنگام spawn شدن انجام دهند. اگر شما
بخواهید متغیر های موجود در داخل ابجکت ها را تغییر دهید , شما باید یک متد جدید برای این کلاس بنویسید که بتواند از متغیر مورد نظر شما استفاده کند:
مثال: .
Function SetColor(Int NewColor)
{
Color=NewColor;
}
در این حالت , تا وقتی که متد مورد نظر صدا زده شود , شیئ , ارگومان جلوی int را دریافت می کند و مقدار را در متغییر قرار می دهد. و ابجکت در داخل خودش تغییر میابد.نحوه ی صدا زدن متدی در داخل ابجکت در انریل اسکریپت به صورت زیر است .
MyObject.SetColor(15); // Tell The Object To Call It’s Set Color() Method
متدها – متغییر ها
این جمله من را گه گفتم ابجکت ها در داخل خودشان تغییر میابند را به یاد بیاورید.?
این نمی تواند کاملا صحیح باشد.من از شما می خواهم که فکر کنید.این می تواند امکان داشته باشد که متغیرها
را بر روی ابجکت ها اعمال و انها را تغییر داد .
MyObject.color=15;

کلاس های هم خانواده
خسته شدید؟اگر نه که ادامه می دهیم .حالا باید برویم به سراغ یکی از مفاهیم بنیادی در object oriented را بررسی کنیم.
شما می توانید چیزی را که به وجود اورده اید را ببینید.ابجکت ها تنها یک ویژگی هستند.ابجکت ها شمال قسمت هایی از مسئله می شوند که نمی توانیم انها را حل کنیم .با این وجود , این هنوز می تواند برای مدیریت تعداد زیادی از ابجکت ها مشکل باشد.مباحث در مورد موارد بنیادی برنامه نویسی شیئ گرایی مشتمل می شود از : روابط بین ابجکت ها .
بهترین راه برای به تصویر کشیدن روابط بین ابجکت ها مطابقت ان با مثال یک ماشین است .
کلاس ماشین نمی تواند در باره قسمت های ماشین شرح دهد.فقط انچه را که ما می خواهیم درباره قطعات ماشین بدانیم را به ما می دهد.ما شاید حتی از کلاس Carpart استفاده نکنیم ....ما فقط یک کلاس جدید را که از همان ویژگی های کلاس قبلی است می نویسیم اما برای استفاده های بیشتر از ان استفاده می کنیم.
در واقع , این نمی تواند یک موضوع کامل باشد .در ذهن ما , carpart یک نسبت اماده ساخته شده برای فرمان ماشین است .
اما یک فرمان ماشین در حقیقت یک قسمت از ماشین است . درسته؟ بنابراین اگر چه متد های کلاس carpart به صورت خیلی کلی تعریف شده و متغییرهای نمونه از قسمت های ماشین استفاده شده و دیگر کلاس steeringWheel نامیده و از ان مشتق شده - پس عملکرد ان چگونه انجام می شود؟
در برنامه نویسی ما این را "روابط بین کلاس های والد می نامیم. در اینجا " carpart " کلاس والد " یا super class است که steering whel به ان متصل می شود .. در انریل اسکریپت ما یک کلاس فرزند را به صورت زیر تعریف می کنیم .
Class streeingwheel extends carpart;
به کلمه Extends دقت کنید .این تعیین کننده این است که کلاسی که ما الان اعلان کرده ایم یک کلاس فرزند از carpart است .
به زودی در انریل روابط ویژه بین دو کلاس را خواهید دید.
وراثت:
چی,؟ واقعا , امکان دارد که رابطه پدری و فرزندی در حل مسئله به ما کمک کند؟این یک راحل حل ساده و بسیار کاربردی است.
در رابطه پدر و فرزندی بین دو کلاس , کلاس فرزند به سرعت تمامی تنظیمات و متد های کلاس پدر را به ارث می برد , بدون اینکه شما حتی یک خط کد تایپ کنید می توانید قسمت های مختلف یک مسئله مانند همین ماشین را بسازید .اگر بخشی از ماشین را با متد SetColor() تعریف کنیم این متد با همان روش و نوع در کلاس والد عمل خواهد کرد .وراثت در میان متغییرها , متد ها و states(وضعیت ها) است . تمامی اینهایی که در برنامه ها استفاده و ساخته می شوند به ان Object Hierarchy می گویند .
این ساختار ارث بردن در انریل اسکریپت است:
Object
| expanded by
Actor
| expanded by
CarPart
| expanded by
SteeringWheel
این ساختار درختی از کلاس در انریل اسکریپت بسیار کامل است به طوری که شما می توانید با یک نگاه روابط بین انها را متوجه شوید. در مثال روبه رو , ما یک رابطه پایه ای " هست – یک"(is –a) بررسی می کنیم:
فرمان ماشین هست یکی از اجزای ماشین
قسمت های یک ماشین هست یک اکتور
یک اکتور هست یک شیئ
هرلایه موفق از این خانواده به ارث می رسد و گسترش میابد بر عملکرد ان و جزئیات لایه های قبلی تاثیر می گذارد .این همیشه اسان ترین راه برای توصیف اشیائ پیچیده در اجزائ ابجکت هاست.این مهم است که درک کنید که این نسبت ها یک ارتباط نیستند.یک فرمان ماشین همیشه یک قسمت از ماشین است.اما ماشین نمی تواند قسمت از فرمان باشد.
اما یک لحظه صبر کنید....اگر ما بخواهیم بسازیم ماشینی که ان ماشین قطعه ای رابسازد چه؟ انگاه کلاس ماشین کجاست؟
این مهمترین ویژگی روابط است (هست –یک ,دارد یک)....در حقیقت یک قسمت از ماشین نمی تواند نوعی از ماشین باشد.
بنابراین قسمتی از ماشین از خود ماشین مشتق و یا گسترش میابد.
در اینجا ما یک ساختار در ختی دیگر را بررسی می کنیم :
Object
|
Actor
/ \
Car CarPart
|
SteeringWheel
ماشین یک کلاس است که از Actor مشتق شده است. اما این نمی تواند یک راه ارتباطی مستقیم برای carpart باشد.
در عوض, تعریف داخلی یک کلاس شاید در داخل متغیرهای نمونه ای ان باشد.در این نمونه . ما یک ارتباط داشتیم . ماشین یک فرمان دارد اما این فرمان نمی تواند یک ماشین باشد.
اگر شما هرگز کلاسی را به صورت سلسله مراتبی شبیه این تعریف نکرده اید و شما در باره ارتباط ابجکت سراسیمه و عجله دارید.ای مفهمی است بسیار پر استفاده در به وجود اوردن یک نسبت و ارتباط ( : هست یک) یا( دارد یک ) (is-a)(have-a)
حالا شما می توانید ببینید که ارتباط سلسله مراتبی چقدر مهم است.اگر ما بخواهیم از این, به عنوان یک مثال , که بیشتر از تعاریف یک ماشین بسازیم ما باید یک نوع جدید ازویژگی های یک وسیله نقلیه به ان اضافه کنیم.
Object
|
Actor
/ \
Part Vehicle
/ | | \
CarPart AirPart Car Airplane

خیلی خوب بود نه؟اگر فهمیدین که هیچ و اگر نفهمیدین دوباره برین سراغ این چون برای خواندن بقیه این مطالب فقط وقت گذرانی خواهید کرد.
Polymorphism
پولی چی؟ این یکی دیگر از اصطلاحات دیوانه وار برنامه نویسان است .پولی مورفیسم یکی دیگر از موارد بنیادی در برنامه نویسی شیئ گرا است .که در اختیار کلاس فرزند است که اضافه کند متغییرها , متدها , و وضعیتها را برای کلاس والد...
اما اگر ما بخواهیم این المان های موروثی را تغییر دهیم چه؟در مثال ماشین , ما ممکن است یک کلاس برای پدال تعریف کنیم و متد PushPedal() را برای ان صدا بزنیم. هنگامی که متد PushPedal() صدا زده شد , متد مورد نظر رفتاری پیش فرض را نسبت به آن انجام می دهد.(شاید بر ان وقفه ای اعمال کند) اگر ما کلاس Pedal را با یک کلاس جدید به نام Accelerator Pedal (پدال گاز)گسترش دهیم , متد PushPedal() به طور ناگهانی به صورت خطا و غلط اجرا می شود.یک پدال گاز
مطمئنا نباید با وقفه انجام و شروع شود.این یک وضعیت است. ما باید این رفتار جدید را که پدال گاز است را در پدال به عنوان یک رفتار جدبد تعریف کنیم.به تمامی این اعمال پولی مورفیسم یا Function overloading می گویند.
که شما از ان در بیشتر مواقعی که با انریل اسکریپت برنامه می نویسید استفاده می کنید .
Function OverLoading
اشاره می کند به نوشتن نسخه جدیدی از توابع در کلاس اولیه/برای مثال شما یک اسکریپت را برای یک نوع از هیولا به نام Demon می نویسید. کلاس Demon در این جا فقط ایجاد شده است , عوامل دیگر نظیر SeePlayer() را نیز باید فراخوانی کنید . بنابراین این عامل می تواند شروع کننده حمله هیولا به پلایر شود . این یک مفهوم عالی است , در اینجا شما به صورت دستی فرمانی به نام SeePlayer ایجاد کرده اید که با کلاس جدید Demon مختلف است.
در این جا, فقط تعریف مجدد توابع در کلاس فرزند اتفاق می افتد.هنگامی که یک کلاس نمونه ارائه می شود, ابجکت ها باید یک رفتار جدید را داشته باشند و نباید همان رفتار و کنش های کلاس والد را در خود داشته باشند.
سخن پایانی :
بنابراین شما حالا با مفاهیم بنیادی طراحی object oriented (شیئ گرایی ) اشنا شده و حتما ایده مورد نظرتان را برای ارتباط دو ابجکت با یک دیگر را یافته اید.
توجه کنسد که این یک مفهوم ساده و بنیادی در زبان های برنامه نویسی مدرن است که هدف اصلی ان راحتی برنامه نویس در برنامه نوشتن است و صد البته استفاده از ان در زبان های برنامه نویسی انتخابی . اما دقت کنید که اگر بخواهید تمامی برنامه ها را بنوسید اولا چه فشاری به بازی وارد و صد البته خودتان از این کار پشیمان می شوید . یادتان باشد این مفاهیم امده است که شما از برنامه نویسی لذت ببرید نه این که از ان فرار کنید .

VGS
09-02-2011, 03:55
حسینه تردکوندی دادا ادامه بده ادامه بده دادا:31:

L u K e !
11-03-2011, 19:59
حداقل منبع شو می زاشتی

silsin
11-03-2011, 20:10
کدوم رو می گی ؟ اولیه که منبعش ویکی پدایه. اومی هم یه متن ترجمه شدست که دو سومش رو خودم نوشتم . یعنی تقریبا میشه مال خودم . خوبه؟

---------- Post added at 08:10 PM ---------- Previous post was at 08:10 PM ----------

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