برنامه نویسی شی گرایی در زبان دارت: مفهوم کلاس
مدت زمان تخمینی مطالعه: ۹ دقیقه
فهرست مطالب برنامه نویسی شی گرایی:
برنامه نویسی شی گرا به دلیل قابلیت توسعهپذیری و قابلیت استفاده مجدد، به عنوان یکی از روشهای محبوب برای پیادهسازی برنامههای بزرگ و پیچیده استفاده میشود.
شی گرایی یا Object Oriented Programming یکی از مباحث مهم برنامه نویسی هست که پیشنهاد میکنم حتما وقت بذارید و بصورت عملی کامل درک کنید و یاد بگیرید. امروز در قسمت اول با مفهوم کلاس ها در برنامه نویسی دارت آشنا میشویم.
در مطالب قبلی با تعریف متغیر در فلاتر آشنا شدیم. دیدیم که هر نوع متغیری یک سری خاصیت های متفاوتی دارد اما تعداد محدودی هم متغیر داریم.
برنامه نویسی شی گرایی چیست؟
شی گرایی یکی از مهمترین پارادایمهای برنامهنویسی است که در زبانهای مختلف مورد استفاده قرار میگیرد.
این رویکرد برنامهنویسی بر اساس مفهوم اشیاء (Objects) مبتنی است و این اشیاء دارای ویژگیها (متغیرها) و رفتارها (متدها) خود هستند.
هدف اصلی شی گرایی، مدلسازی مسائل و واقعیتهای جهان واقعی در برنامهها و ایجاد کدهای بهبود یافته، قابل تغییر و قابل استفاده مجدد است.
با استفاده از برنامه نویسی شی گرا ما سعی میکنیم که برنامه را به دنیای اطراف خودمون شبیه تر کنیم.
اما این که به دنیای خودمون شبیه کنیم یعنی چی؟
ببینید تمام اشیای که در محیط زندگی ما هستند چه جاندار و چه غیر جاندار همه دارای یک سری ویژگی ها هستند.
برای مثال انسان ها دارای ویژگی هایی مثل نام,سن,جنسیت,نام والدین و…. هستند.
هر کلاس شامل دو بخش مهم به نام ویژگی ها Atribute و رفتار Behavior هست.
برای اینکه از کلاس ها بتونیم استفاده کنیم باید از آنها یک نمونه یا آبجکت بسازیم.
هر آبجکت یک سری ویژگی ها و رفتار ها دارد که در سطح کلاس ابتدا آنها معرفی می شوند و سپس برای آبجکت مقدار دهی میکنیم.
تصور کنید که دارید با برنامه نویسی یک بازی ساده با خودروها مشغول هستید. در این بازی، شما باید خودروها را از یک طرف صفحه به طرف دیگر حرکت دهید و از برخوردهای آنها با هم جلوگیری کنید.
حالا بهتر است با کمک مفهوم شی گرایی این بازی را بهتر درک کنیم. در شی گرایی، هر خودرو به عنوان یک “شیء” دیده میشود که دارای “ویژگیها” و “رفتارها” خودش است.
ویژگیها مثل رنگ خودرو، سرعت و اندازه آن هستند. به عنوان مثال، یک خودرو قرمز رنگ، با سرعت متوسط و اندازه کوچک.
رفتارها همان کارها یا عملکردهایی هستند که خودرو میتواند انجام دهد. به عنوان مثال، حرکت به جلو، توقف، یا تغییر مسیر.
با استفاده از شی گرایی، میتوانیم همه خودروهای بازی را با کمک یک “قالب” یا “الگو” تعریف کنیم که ویژگیها و رفتارهای مشترک آنها را شامل میشود. این قالب را “کلاس” مینامیم.
حالا میتوانیم از این کلاس برای ساختن خودروهای مختلف استفاده کنیم. مثلاً یک خودرو قرمز، یک خودرو آبی، یک خودرو با سرعت زیاد یا یک خودرو با سرعت کم.
همچنین میتوانیم برای هر خودرو، رفتارهای مختلفی تعریف کنیم. مثلاً میتوانیم برای خودروها حرکت به جلو، توقف کردن یا تغییر مسیر را تعریف کنیم.
شی گرایی میتواند باعث کنترل بهتر بازی شما شود. با استفاده از این روش، میتوانید اشیاء مختلف را مدیریت کنید و به راحتی خودروها را به جلو حرکت دهید، توقف کنید یا مسیر آنها را تغییر دهید.
به این ترتیب، با استفاده از شی گرایی، میتوانید بازی جالبتری بسازید و با اشیاء مختلف بازی کنید و خلاقیت خود را در برنامهنویسی نشان دهید.
این باعث میشود که بتوانید بازیهای جدید و هیجانانگیزتری بسازید و خودروهای مختلف را در بازیهای جدید خود استفاده کنید.
بازی با اشیاء و شی گرایی بسیار جذابتر و هیجانانگیزتر خواهد شد و شما هم خودروهای مختلف و سریع و کند در بازیهای خود داشته باشید. اینطوری به علاوه بازی کردن لذت بخش خواهد بود، هم میتوانید چیزهای جدیدی درباره برنامهنویسی یاد بگیرید.
این روش بسیار مفید و مهمتر از آن حتی در آینده شما به عنوان برنامه نویس حرفهای در کارهای خود خیلی کمک میکند.
برای یادگیری حرفه شی گرایی و طراحی اپلیکیشن میتوانید از دوره ۰ تا ۱۰۰ آموزش فلاتر استفاده نمایید.
با شی گرایی به توانایی بسیار بالاتر در برنامهنویسی خواهید رسید و میتوانید برنامههای بزرگتر و پیچیدهتری بنویسید. امیدوارم که از این توضیحات لذت برده باشید و بازی با اشیاء را دوست داشته باشید!
تعریف کلاس در فلاتر
مفهوم کلاس در برنامهنویسی، یک الگو یا قالب است که برای تعریف یک نوع خاص از اشیاء استفاده میشود.
کلاسها میتوانند مجموعهای از ویژگیها و رفتارها را به یکدیگر مرتبط کنند و اشیاء مختلفی را از یک کلاس ایجاد کنند. به عبارت دیگر، کلاسها تعیینکنندههایی هستند که توصیف میکنند که یک نوع خاص از اشیاء چه ویژگیها و رفتارها را دارد.
برای مثال، فرض کنید که میخواهیم بازی کامپیوتری با خودروها بسازیم.
میتوانیم یک کلاس به نام “خودرو” تعریف کنیم که ویژگیها و رفتارهای مشترکی که همه خودروها دارند را مشخص کند.
ویژگیها مثل رنگ، سرعت، اندازه و مدل خودرو میتوانند به عنوان ویژگیهای این کلاس تعریف شوند. همچنین رفتارها مانند حرکت به جلو، توقف و تغییر مسیر نیز به عنوان متدهای این کلاس تعریف میشوند.
حالا همونطور که متغیر تعریف میکردیم میتونیم بیایم از کلاس خودمون یک شی تعریف کنیم.
String a;
Car c;
در کد بالا یک متغیر از نوع String به نام a ساختیم و در خط بعدی یک کلاس که جلوتر میسازیم به نام Car داریم که از این کلاس یک شی به نام c تعریف کردیم, میبنیم که هیچ تفاوتی با تعریف متغیر ندارد.
برای تعریف کلاس یک فایل جدید ایجاد کنید. سپس از کلمه کلیدی Class استفاده میکنیم و بعد نام کلاس را مینویسیم.
Class Car{
}
ما الان یک کلاس اولیه ساختیم و هیچ ویژگی یا رفتاری نداره این کلاس.
ویژگی های آبجکت
خب بیاید به کلاس خودمون یک سری ویژگی هایی مثل رنگ, نام برند و قیمت اضافه کنیم.
class Car{
String name;
String Brand;
int Speed;
}
میبینید ما با استفاده از متغیر هایی که داریم ویژگی های کلاس خودمون و مشخص کردیم.
چون اسم ماشین و نام برند از نوع رشته هستند از String استفاده کردیم و سرعت هم به دلیل عدد صحیح بودن نوع int انتخاب کردیم.
برای استفاده از این کلاس به کد های زیر دقت کنید.
Car mycar = new Car();
mycar.name="pride";
print(mycar.name);
نکته مهم در ساخت آبجکت ها این هستند که حتما بعد از نوشتن اسم آبجکت از کلمه کلیدی new باید استفاده کنید و بعد از آن اسم کلاس و بنویسید.
در مثال بالامن یک آبجکت به نام mycar ساختم و در خط پایین تر ویژگی name و برای این آبجکت برابر با pride گذاشتم و در خط بعدی گفتم که ویژگی name و برای من پرینت بگیر.
رفتار آبجکت
تا اینجا به شکل خیلی ساده تونستیم ویژگی های کلاس خودمون و طراحی کنیم گفتیم که در بحث شی گرایی ما یک بخش دیگه به اسم رفتار هم داریم.
رفتار ها همون متد های کلاس ما هستند.
خب ماشین میتونه رفتارهایی مثل بوق زدن, گاز دادن, ترمز کردن و خیلی چیزهای دیگه داشته باشه ما میتونیم برای تمام این ها متد ایجاد کنیم.
برای شروع من یه متد برای گاز دادن مینویسم که با هربار فراخوانی ۱۰ تا به مقدار سرعت ماشین اضافه میکنه.
class Car {
String name;
String Brand;
int speed;
void Acceleration() {
speed = speed + 10;
print('speed: $speed');
}
}
داخل متد بالا بعد از اضافه کردن ده تا به سرعت یک پرینت هم انجام میدیم.
Car mycar = new Car();
mycar.name="pride";
mycar.speed=20;
print(mycar.speed);
mycar.Acceleration();
در کد بالا ابتدا سرعت و ۲۰ قرار دادیم و سپس با نوشتن اسم آبجکت متد Acceleration() و صدا زدیم.
خروجی کد بالا به شکل زیر است.
۲۰
speed: 30
ویژگی های خصوصی کلاس
ویژگی هایی که در بالا برای کلاس تعریف کردیم از نوع Public هستند به همین خاطر به صورت مستقیم با صدا زدن نام آبجکت میتونیم به اون ها دسترسی داشته باشیم.
اما میتونیم این ویژگی هارو از نوع Private تعریف کنیم که فقط با استفاده از متد هایی به نام Getter و Setter بتونیم برای اونها مقادیر جدید قرار بدیم.
در زبان دارت برای اینکه یک متغیر و به شکل Private تعریف کنیم باید قبل از اسم متغیر از _ استفاده کنیم.
برای شروع من یک ویژگی قیمت به کلاس های خودمون اضافه میکنم که از نوع Private هست.
class Car{
String name;
String Brand;
int speed;
int _Price;
void setPrice(int price){
this._Price = price;
}
int getPrice(){
return _Price;
}
}
ویژگی Price_ بصورت خصوصی تعریف شده و برای اینکه موقع ساخت آبجکت بتونیم قیمت را مقدار دهی کنیم باید حتما از متد setPrice استفاده کنیم.
کلمه کلیدی this اینجا به متغیر های داخل کلاس اشاره میکند.
همچنین برای اینکه بتونیم مقدار Price_ و دریافت کنیم باید حتما از متد getPrice استفاده کنیم.
Car mycar = new Car();
mycar.setPrice(50000);
print(mycar.getPrice());
متد سازنده Constructor چیست؟
در شی گرایی ما یک سری متد داریم به اسم متد سازنده (کانستراکتور Constructor) به متدهایی که هم نام کلاس باشند متد سازنده میگیم.
اگر متد سازنده ای تعریف نکنیم بصورت پیش فرض یک متد سازنده خالی برای ما فرض می شود به شکل زیر
class Car {
String name;
String Brand;
int speed;
int _Price;
Car() {
}
}
متد سازنده متدی است که هنگام ساختن آبجکت اجرا می شود.
در این متد ما میتونیم هر کاری انجام دهیم برای مثال یک پیغام میتونیم قرار بدیم پرینت شود.
اما یکی از کارهای مهمی که با این متد انجام می شود مقداردهی ویژگی های کلاس ما هست.
فرض کنید ما ده تا ویژگی داره کلاسمون و موقع ساخت آبجکت برای اینکه این ویژگی ها را مقداری دهی کنیم باید ده بار متد های مختلف Set و صدا بزنیم, این کار و میتونیم در Constructor به راحتی انجام بدیم.
class Car {
String name;
String Brand;
int speed;
int _Price;
Car(String name,String Brand,int speed,int price) {
this.name=name;
this.Brand=Brand;
this.speed=speed;
this._Price=price;
}
در کد بالا من یک متد سازنده با ۴ پارامتر معرفی کردم که کاربر هر با ساختن آبجکت جدید باید حتما این ۴ پارامتر را وارد کنید.
Car mycar = new Car("Pride","Saipa",120,520000);
print(mycar.name);
print(mycar.getPrice());
output:
Pride
۵۲۰۰۰۰
نحوه استفاده از متد سازنده را هم در کد بالا میتونید ببینید.
مطالب زیر را حتما مطالعه کنید
ساخت اولین پروژه زبان برنامه نویسی دارت Dart
آموزش کار با لیست و آرایه در زبان برنامه نویسی دارت Dart
آموزش شی گرایی در زبان دارت: ارث بری
آشنایی با مفهوم Mixin در زبان برنامه نویسی دارت
آشنایی با اینترفیس در برنامه نویسی دارت
آشنایی با الگوی طراحی Singleton
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام .اگه تو متد کانستراکتور، دیگه نوع داده هارو مشخص نکنیم،مشکلی پیش میاد؟
من تست کردم مشکلی پیش نیومد.
class Car {
String name;
String model;
Car(name, model) {
print(‘$name $model’);
}
}
خیلی خوب توضیح میدی بابا دمت گرم