با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
با جلسه ای دیگر از سری جلسات دوره آموزش زبان برنامه نویسی دارت Dart در خدمت شما هستیم.
در این جلسه قصد داریم به آموزش وراثت در زبان دارت (Inheritance) بپردازیم.
وراثت Inheritance یکی از مهم ترین و پرکاربرد ترین ویژگی های شئ گرایی است.
با استفاده از وراثت میتوانیم کلاس هایی را بر اساس کلاس های موجود ایجاد کنیم.
در واقع کلاس های جدید میتوانند اعضا کلاس های والد خود را به ارث ببرند و از آن ها اسفاده کنند.
کلاس هایی که به ارث برده میشوند، والد و کلاس هایی که ارث بری میکنند، فرزند نامیده میشوند.
با استفاده از کلمه کلیدی extends، میتوانیم کلای ها را ارث بری کنیم.
بدین صورت که ابتدا نام کلاس فرزند، کلمه کلیدی extends و سپس نام کلاس والد را مینویسیم.
گرامر:
1 | class child_class_name extends parent_class_name |
در مثال زیر، ما یک کلاس به نام shape داریم.
کلاس circle این کلاس را ارث بری میکند. در نتیجه تمامی اعضای آن از جمله متغیر ها و متد های کلاس shape را در اختیار دارد.
1 2 3 4 5 6 7 8 9 10 | مثال:void main() { var obj = new Circle(); obj.cal_area(); } class Shape { void cal_area() { print("calling calc area defined in the Shape class"); } } class Circle extends Shape {} |
خروجی:
1 | calling calc area defined in the Shape class |
سه نوع وراثت در برنامه نویسی شئ گرا داریم:
مثال وراثت چند سطحی:
1 2 3 4 5 6 7 8 9 10 | void main() { var obj = new Leaf(); obj.str = "hello"; print(obj.str); } class Root { String str; } class Child extends Root {} class Leaf extends Child {} |
خروجی:
1 | hello |
با استفاده از سربارگذاری متد ها میتوانیم متد های کلاس والد را مجددا تعریف کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 | void main() { Child c = new Child(); c.m1(12); } class Parent { void m1(int a){ print("value of a ${a}");} } class Child extends Parent { @override void m1(int b) { print("value of b ${b}"); } } |
خروجی:
1 | value of b 12 |
توجه داشته باشید که نام و تعداد پارامتر های متد سربارگذاری شده باید با متد کلاس والد یکی باشد. در غیر این صورت با خطا مواجه خواهیم شد.
کلمه کلیدی static میتواند به اعضای یک کلاس اعمال شود.
یک متغیر استاتیک تا پایان اجرای برنامه، مقدارش را حفظ خواهد کرد. (متغیر استاتیک بین تمام اشیایی که از کلاس ساخته میشود، به اشتراک گراشته میشود.
همچنین میتوانیم بدون ایجاد شئ از کلاس، به اعضای static دسترسی داشته باشیم.
1 2 3 4 5 6 7 8 9 10 11 12 | class StaticMem { static int num; static disp() { print("The value of num is ${StaticMem.num}") ; } } void main() { StaticMem.num = 12; // initialize the static variable } StaticMem.disp(); // invoke the static method } |
خروجی:
1 | The value of num is 12 |
کلمه کلیدی super مانند کلمه کلیدی this است منتها به کلاس والد ارجاع میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | void main() { Child c = new Child(); c.m1(12); } class Parent { String msg = "message variable from the parent class"; void m1(int a){ print("value of a ${a}");} } class Child extends Parent { @override void m1(int b) { print("value of b ${b}"); super.m1(13); print("${super.msg}") ; } } |
خروجی:
1 2 3 | value of b 12 value of a 13 message variable from the parent class |
جلسه آموزش وراثت در زبان دارت Dart نیز به پایان رسید.
در جلسه بعد به آموزش کالکشن ها در زبان دارت خواهیم پرداخت.