برنامه نويسي شي گرا ؟

Nasab187

Member
ويژگيهاي برنامه نويسي شي گرا

1. اشيا : جهاني را كه در آن زندگي مي كنيد در نظر بگيريد . اطراف شما پر از شي هاي گوناگون است . اين شي ها تفاوت هاي بسياري با هم دارند اما در يك ويژگي با هم مشتركند : همه ي آنها از مجموعه اي از خصوصيات و رفتارها تشكيل شده اند . براي مثال يك گربه خصوصياتي مانند اندازه ، رنگ ، وزن و . . . و رفتارهايي مانند خوردن ، خوابيدن ، ميوميو كردن و . . . دارد .
اشيا در برنامه نويسي شي گرا ( Object Oriented Programming ) هم بر همين مفاهيم بنا شده اند يعني در برنامه نويسي شي گرا هر شي داراي مجموعه اي از خصوصيات ( properties ) و رفتارهاست ( Methodes ) .
 

Nasab187

Member
خيلي ممنون . خوب بريم سراغ ادامه بحث :
مفهوم كلاسها :
اكشن اسكريپت و زبانهاي برنامه نويسي امكان ايجاد و كار كردن با اشيا را به كمك كلاسها ممكن مي سازند .
كلاس خصوصيات و متدهاي كلي مشترك ميان دسته اي از اشيا تعيين مي كند سپس با نمونه سازي از آن كلاس ميتوان شي مورد نظر را با خصوصيات خاص خودش ايجاد كرد .
يك كلاس را مي توان به نقشه ي يك خانه تشبيه كرد كه مي توان ساختمانهاي زيادي از روي آن ساخت اما هيچكدام از ساختمانها كاملا مشابه نيستند و مثلا در رنگ و نما باهم تفاوت دارند .
چگونگي ايجاد و استفاده از كلاسها در فلش :
براي روشن شدن مطلب از يك مثال استفاده مي كنم :
PHP:
class Box{
                 var tool:Number;
                 var arz:Number;
                 var ertefa:Number;
                 function Box(t:Number ,a:Number ,e:Number ) {
                           this.tool=t;
                           this.arz=a;
                           this.ertefa=e;
                  }
}
در اين مثال كلاسي به نام Box ايجاد مي شود كه از سه properties و يك متد ( constructor ) تشكيل شده است . يعني با نمونه سازي از اين كلاس مي توانيد جعبه هايي ايجاد كنيد كه طول - عرض و ارتفاع خاص خودشان را داشته باشند .

همانطور كه مي دانيد يا متوجه شده ايد تعريف هر كلاس با كلمه ي class شروع مي شود سپس نام كلاس نوشته مي شود و بعد از آن خصوصيات و متدها بين { } تعريف مي شوند .
متن كلاس بايد در يك فايل با پسوند AS نوشته و ذخيره شود .
ساده ترين راه استفاده از يك كلاس اين است كه فايلي را كه قصد داريد نمونه كلاس را در آن ايجاد كنيد در كنار فايل كلاس ذخيره كنيد و سپس با عبارتي مثل عبارت زير نمونه اي از آن ايجاد كنيد :
PHP:
var myBox:Box = new Box(10,30,15);
 trace(myBox.tool); // 10
 trace(myBox.arz); // 30
 trace(myBox.ertefa); // 15
 

roshanaiy

Active Member
خيلي ممونم از آموزش خوبت . فقط دو تا پيشنهاد دارم
1. كدهايي رو كه مي نويسي يه توضيح مختصر هم دربارشون بده .
مثلا : var متغيري است براي انجام فلان كار كه به صورت [مقدار متغير]=[نوع متغير]:[اسم متغير] Var تعريف مي شود . كاربرد آن فلان چيز است و ...
الان توضيحي كه در مورد كلاس دادي خيلي خوب و مختصر مفيده .
اين طوري كسايي كه با اكشن نويسي هم مشكل دارن يا اول راه هستن راه مي افتن
2. يه فايلي چيزي هم از آموزشت براي نمونه بزار
مرسي از دوست خوبم كه اينا رو بهم ياد داد و مرسي از تو
 

Nasab187

Member
تشكر ، پيشنهادها رو هم سعي مي كنم اجرا كنم .
2 . نهان سازي : يكي ديگر از ويژگي هاي OOP نهان سازي است . هدف از نهان سازي پوشاندن پيچيدگي هاست . براي مثال يك اتومبيل رو در نظر بگيريد . اصلا نيازي نيست يك راننده براي استفاده از اتومبيل تك تك اجزا و قطعات اتومبيل رو بشناسه فقط بايد با تعداد محدودي از ابزارها مثل دنده ، فرمان ، ترمز و . . . . كار كنه .
از مثال كه خارج شويم در برنامه نويسي شي گرا هم مي توان نمونه كلاسي (شي) داشت كه اعضاي ( متدها و متغيرها ) زيادي داشته باشد اما اصلا نيازي نباشد كه به طور مستقيم از همه ي آنها استفاده كرد .
اكشن و زبانهاي برنامه نويسي امكان نهان سازي را به وسيله ي مولفه هاي دستيابي ممكن مي سازند . اين مولفه ها عبارتند از : public ، private
با يك مثال كاربرد اين مولفه ها را نشان مي دهم :
PHP:
class Box{
     private var tool:Number;
     private var arz:Number;
     private var ertefa:Number;
     public function Box(t:Number , a:Number , e:Number){
          this.tool=t;
          this.arz=a;
          this.ertefa=e;
     }
     public function getProperties(): Object{
          var myObj:Object={tool: this.tool , arz: this.arz , ertefa: this.ertefa};
          return myObj ;
     }
}
خوب اين همون كلاس قبلي است با كمي تغيير : پيش از متغيرهاي طول ، عرض و ارتفاع عبارت private آورده شده است به اين معني كه اين متغيرها فقط به وسيله ي اعضاي همان كلاس قابل دستيابي مي باشند .
پيش از متد constructor ( متدي كه هنگام نمونه سازي با عبارت new فراخوانده مي شود ) عبارت public قرار دارد كه به اين معني است كه اين متد براي همه ي اشيا قابل دستيابي است . به وسيله ي اين متد متغيرها مقدار دهي مي شوند .
از آن جا كه متغيرها private هستند و از بيرون قابل دستيابي نيستند براي دستيابي به آنها به متد public داخل كلاس نياز داريم تا مقدار متغيرها را بگيرد و به ما بر گرداند . ازاين بعد براي دستيابي به نمونه متغيرها اينگونه عمل مي كنيم :
PHP:
var myBox:Box=new Box(10,20,30);
trace(myBox.getProperties().tool);
trace(myBox.getProperties().arz);
trace(myBox.getProperties().ertefa);
البته در اين مثال نيازي به نهان سازي نبود اما در بسياري موارد واقعا ضروري است .
فايلهاي پيوستي
مشاهده پیوست MyBox.zip
 

shirini_forush

Well-Known Member
سلام نسب جون. به بچه ها سلام برسون.
پایه های OOP عبارتن از:
Encapsulation
Inheritance
Polymorphism
و اینا هم از مفاهیم مهمش هستن:
Class
Object
Abstraction
Method
Message Passing
بعضی از زبانها هم به جای Inheritance توی Class ها Prototype-based هستن. یعنی اشیاء از Prototype ها مشتق میشن.
 

Nasab187

Member
سلام . اتفاقا ذكر خير شما دو نفر تو كلاس هست جاتون خاليه . :neutral:
اگه كم كم درباره ي هركدام از اين ويژگي ها و مفاهيم توضيح بدي تا بحث نصفه نمونه ممنونت مي شم چون ديگه به خاطر درس و مدرسه خيلي فرصت نمي كنم بيام اينجا . :roll:
 
آخرین ویرایش:

mohsensemsarpour

کاربر فعال
دوست عزیز ممنون
آموزش های شما خیلی عالیه
سعی کنید ادامه بدید
در ضمن در مورد مفاهیم کلاس ها بیشتر توضیح دهید
و اینکه آیا این کلاس های فلش دقیقا بر پایه C هستند یا نه
ممنون
 
سلام
عالی بود
میشه یه مثال کامل مثل یک بازی واسمون لینک بذاری که از کلاس ها استفاده کرده باشه؟
 

shirini_forush

Well-Known Member
دوست عزیز یه دوری توی انجمن بزنید لیست نسبتا کاملی از سایت هایی که سورس فلش ارائه میدن گیر میاری.
توی اون سایت ها اگر Oop بخش جدا نداشته باشه هم گیر آوردن چیزی که میخوای کاری نداره.
 

mafton

Member
PHP:
 public function getProperties(): Object{ 
          var myObj:Object={tool: this.tool , arz: this.arz , ertefa: this.ertefa}; 
          return myObj ; 
     }
سلام نساب جون ممکن هست راجب این کدی که نوشتی برامون توضیح بدی
 

Nasab187

Member
سلام فکر کنم نَسَب درست باشد . بابت تاخیر معذرت . ان شا الله بعد از کنکور فعالتر خواهم بود .
واما توضیح :
از آنجایی که در کلاسی که تعریف کردیم متغیرهای tool - arz و ertefa خصوصی ( private ) بودند به طور مستقیم نمی تونیم به آنها دسترسی داشته باشیم مثلا مقدارشون رو بدونیم یا تغیرشون بدیم پس برای اینکار یک تابع عمومی و قابل دسترسی در کلاس مورد نظر ایجاد می کنیم تا اون واسطه بشه و مقدار متغیرها رو به ما برگردونه .
چند تا نکته :
1 . چون تابع getProperties():eek:bject داخل کلاس تعریف شده پس می تونه به اعضای خصوصی کلاس دسترسی داشته باشه .
2 . می تونیم یک تابع عمومی دیگه تعریف کنیم که مثلا به کمک اون بتونیم مقدار متغیرهای خصوصی را تغییر دهیم . شاید بپرسید فایده اش چیه چرا متغیرها رو عمومی نمی کنیم ؟ باید گفت خب بله در این مثال ساده این کار بیهوده است اما در حالتی که با متغیرهای زیادی روبه رو باشیم که تغییر هرکدوم در دیگری اثر داره حتما باید از یه همچین متدی استفاده کرد .
 

mafton

Member
ببخشید نسب جون من از مفهوم public,private,friend سر در میارم ولی تو syntax مشکل دارم تو فلش نمیدونم باید چه کار کنم
اصلا اینها که ابی شده جزو کلمات رزرو شده هست دیگه مگه نه
 

Nasab187

Member
نه اینارو من رنگی نکردم خودش اینجوری شده :D . ولی اگه بخوایم بگیم سبزها رزرو شده و آبی هارو ما تعریف کردیم .
فکر کنم مشکل اینه که من درست درباره ی کلاسهای فلش و راه استفاده از اونها توضیح ندادم .
در اين مثال كلاسي به نام Box ايجاد مي شود كه از سه properties و يك متد ( constructor ) تشكيل شده است . يعني با نمونه سازي از اين كلاس مي توانيد جعبه هايي ايجاد كنيد كه طول - عرض و ارتفاع خاص خودشان را داشته باشند .

همانطور كه مي دانيد يا متوجه شده ايد تعريف هر كلاس با كلمه ي class شروع مي شود سپس نام كلاس نوشته مي شود و بعد از آن خصوصيات و متدها بين { } تعريف مي شوند .
متن كلاس بايد در يك فايل با پسوند AS نوشته و ذخيره شود .
توضیح بیشتر :
1- شما باید کلاس را در فایلی با پسوند as ذخیره کنید . برای نوشتن متن کلاس از notepad هم می تونید استفاده کنید ولی با فلش راحتتره . اگر بخواهید از فلش برای نوشتن کلاس استفاده کنید باید فلش رو باز کنید بعد ازمنوی فایل گزینه ی new را انتخاب کنید . یه پنجره باز می شه ( new document ) . در اون پنجره از قسمت generals آیتم Actionscript file رو انتخاب کنید تا وارد محیط کد نویسی بشید .
2- مرحله بعدی نوشتن کد تعریف کلاس در پنجره ی کدنویسی است . اینجوری :
کد:
class [نام کلاس] {
[INDENT][اعضای کلاس را اینجا تعریف خواهید کرد .][/INDENT]
}
3- حالا که برای کلاستون اسمی هم انتخاب کردید بهتره همین الان فایلتون رو ذخیره کنید . فایل را باید همنام با نام کلاس ذخیره کنید .
4- حلا نوبت به تعریف اعضای کلاس یعنی متغیرها و متد های عمومی و خصوصی است . اولین عضوی که باید تعریف کنید یک متد constructor است . متد کنستراکتور متدی همنام با کلاس است که هنگام ایجاد نمونه از کلاس فراخوانده می شود و وظیفه اش مقدار دهی اولیه ی متغیرها ست .این متد نباید هیچ مقداری را باز گرداند . به کد زیر توجه کنید :
کد:
class [نام کلاس] {
[INDENT]function [نام کلاس] (m:String){[/INDENT]
[INDENT][INDENT]trace(m);[/INDENT][/INDENT]
[INDENT]}[/INDENT]
}
این کلاس ( هر اسمی که می خواد داشته باشه ) فقط یک کنستراکتور داره . این کنستراکتور یک پرامتر m داره . موقع ایجاد نمونه از کلاس سازنده که ما باشیم حتما باید مقدار m را هم مشخص کنیم . در این کد کنستراکتور m را نمایش می ده .
( درباره ی ایجاد نمونه از کلاس توضیح خواهم داد)
یه چیزی هم درباره ی " : " بگم . علامت " : " که بعد از نام متغیر می آد صریحا نوع داده ای را که در متغیر ذخیره می شه مشخص می کنه تا مقادیر دیگر اجازه ی ذخیره شدن در آن را نداشته باشند البته دونقطه برای متدها هم بکار می ره و معنیش اینه که این متد چه چیزی رو برمی گردونه . دستورش همبرای متغیرها و متدها اینجوریه :
کد:
var [نام متغیر] : [data type];
کد:
function [نام تابع]([پارامترها]) : [data type]{
}
خب غیر از کنستراکتور شما می تونید هر متغیر و تابع دیگری رو که لازم دارید در کلاس مورد نظر ایجاد کنید . فقط چیزی که در تعریف کردن متغیرها و متدها قابل تامله خصوصی و عمومی بودن متغیرها و متد هاست .
هر متد یا متغیر می تونه عمومی یا خصوصی باشه و عمومی یا خصوصی بودنشون با private و public مشخص می شه که دقیقا قبل از تعریف متد یا متغیر می آیند . اینجوری :
کد:
[public or private] var [نام متغیر] : [data type];
و
[public or private] function [نام متد] ([parametr ha]): [data type]{
}
5 - حالا فقط می مونه استفاده از کلاس :
ساده ترين راه استفاده از يك كلاس اين است كه فايلي را كه قصد داريد نمونه كلاس را در آن ايجاد كنيد در كنار فايل كلاس ذخيره كنيد و سپس با عبارتي مثل عبارت زير نمونه اي از آن ايجاد كنيد :

کد PHP:
var myBox:Box = new Box(10,30,15);
trace(myBox.tool); // 10
trace(myBox.arz); // 30
trace(myBox.ertefa); // 15
یعنی برای ایجاد نمونه کلاس بعد از انکه فایل as را کنار فایلی که می خواد از کلاس استفاده کنه(fla یا as) منتقل کردید داخل اون فایلی که میخواد از کلاس استفاده کنه از دستور زیر استفاده کنید :
کد:
var [نام متغیر] : [class name]= new [class name]([parametr ha]);
در واقع برای ایجاد نمونه کلاس متد کنستراکتور اون رو فرا می خونید .
خب فکر می کنم دیگه چیزی نمونده باشه لطفا مثالهای قبلی و فلشهایی روکه از کلاسها استفاده می کنند بررسی کنید .
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا