کلاس و شیء در کاتلین
از این قسمت از نوشته ی علمی فراگیری کاتلین به آنگاه، به نظارت مفاهیم مربوط به اپنویسی شیءگرا در کاتلین میپردازیم. در صدر با معنی کلاس، نحوه تولید شیء و به کار گیری طراحی اپلیکیشن در مشهد از آن درین گویش اپنویسی آشنا میشویم.
کاتلین از هر دو پارادایم نرم افزارنویسی تابعی و شیءگرا تامین مینماید. امکانهای کاتلین قابلیت تایپ کردن تابعهای سکو بالا، گونه های متعدد تابعها و لامبدا را مهیا میسازد و براین اساس به موردای بهتر برای مدل اپنویسی تابعی تبدیل میگردد. البته دراین نصیب بر روی رسیدگی مفاهیم مدل نرم افزارنویسی شیءگرا متمرکز خواهیم شد.
اپنویسی شیءگرا
در مدل نرم افزارنویسی شیءگرا (OOP) یک موضوع غامض با ساختوساز شیءهایی به گروههای خردخیس تقسیم می شود. این شی ءها دو ویژگی دارا هستند:
وضعیت
کردار
بهدنبال برخی نمونههایی از شی ها را نظارت می کنیم.
چراغ (Lamp) یک شیء میباشد:
این شیء می تواند وضعیتهای پرنور (On) و بی سروصدا (Off) داشته باشد.
این شیء قادر است اخلاق پرنور کردن (turn on) و خموشی کردن (turn off) را بگیرد.
دوچرخه (Bicycle) یک شیء میباشد.
این شیء قادر است شرایطهای «دنده کنونی» (current gear)، «دو چرخ» (two wheels)، «تعداد دنده» (number of gear) و بخش اعظمی موقعیتهای دیگر را داشته باشد.
این شیء می تواند کردار «ترمز کردن» (braking)، «پدال زدن» (changing gears)، «عوض کردن دنده» (changing gears) و اکثری رفتارهای دیگر را داشته باشد.
در نصیبهای آینده این نوشتهعلمی فراگیری کاتلین در مورد خصوصیتهای متفاوت اپلیکیشننویسی شیءگرا از قبیل کپسولهسازی دادهها، وراثت، چندریختی و غیره سخن خوا هیم کرد. درین نصیب فقطً روی مبانی مقدماتی شیءگرایی در کاتلین تمرکز میکنیم.
کلاس کاتلین
قبل از آن که بتوان اشیایی در کاتلین تشکیل داد، بایستی یک کلاس درین لهجه تمجید کرد. کلاس، یک نقشه نخستین برای تشکیل داد شیء محسوب میشود. کلاس را میقدرت مانند یک ترسیم اول (پروتوتایپ) از یک منزل تصور کرد. این کلاس دربرگیرنده جزییاتی در امر طبقات، درها، پنجرههای و اجزای دیگر منزل داراست. مطابق این تعریفها میاقتدار منزل را تشکیل داد. براین اساس منزل درست شده یک شیء خواهد بود. همانگونه که منزلهای متعددی را میقدرت از روی یک نقشه نخستین واحد ایجاد کرد، از روی یک کلاس نیز میاقتدار اشیای متعددی ساخت.
نحوه تمجید کلاس در کاتلین چهطور میباشد؟
برای تعریف و تمجید یک کلاس در کاتلین می بایست از کلیدواژه class استعمال کنیم:
1class ClassName {
2 // property
3 // member function
4 ... .. ...
5}
به نمونه تحت دقت فرمایید:
1class Lamp {
2
3 // property (data member)
4 private var isOn: Boolean = false
5
6 // member function
7 fun turnOn() {
8 isOn = true
9 }
10
11 // member function
12 fun turnOff() {
13 isOn = false
14 }
15}
مشاهده بدون نقص کدها
در نمونه فوق یک کلاس با اسم Lamp تعریفوتمجید کردهایم. این کلاس دارنده یک مشخصه به اسم isOn میباشد که همچون یک متغیر تعریف و تمجید گردیدهاست. همینطور دو تابع عضو به اسمهای ()turnOn و ()turnOff دارااست.
یک مشخصه در کلاسهای کاتلین یا این که می بایست مقداردهی خواهد شد و یا این که به طور «مجرد» (abstract) اعلان گردد. در نمونه فوق، مشخصه isOn به طور False مقداردهی گردیدهاست. کلاسها، شی ها، مشخصهها، تابع عضو و غیره، کلیه دارنده مادیفایرهای «نمایانی» (Visibility) میباشند. برای مثال مشخصه isOn محرمانه میباشد. این بدان مفهوم میباشد که مشخصه isOn صرفا از داخل کلاس Lamp می تواند تغییر و تحول یابد.
مادیفایرهای دیگر نمایانی در کاتلین به تفصیل ذیل می باشند:
Private – تنهاً از باطن خویش کلاس قابل مشاهده (دسترسی) میباشد.
Public – در هر کجا نمایان میباشد.
Protected – برای کلاس و زیرکلاسهای آن نمایان میباشد.
Internal – هر کلاینت داخل ماژول میتواند به آن دسترسی داشته باشد.
در نصیبهای آجل در امر مادیفایرهای protected و internal بیشتر حرف خوا هیم کرد. در نرم افزار فوق، تابعهای عضو ()turnOn و ()turnOff به طور همگانی (public) می باشند، در حالی که مشخصه isOn محرمانه (private) میباشد.
اشیای کاتلین
در حین تمجید یک کلاس، تنهاً مشخصههای شیء تمجید میشوند و هیچ یاد یا این که فضای ذخیرهسازی به آن اختصاص نمییابد. برای دسترسی به تابعهای عوض باطن کلاس بایستی از روی آن اشیایی ساخت. بهدنبال مثالی از ساخت یک شیء بر مبنای کلاس Lamp می بینید که در قسمت گذشته تعریفوتمجید کردیم:
1class Lamp {
2
3 // property (data member)
4 private var isOn: Boolean = false
5
6 // member function
7 fun turnOn() {
8 isOn = true
9 }
10
11 // member function
12 fun turnOff() {
13 isOn = false
14 }
15}
16
17fun main(args: Array) {
18
19 val l1 = Lamp() // create l1 object of Lamp class
20 val l2 = Lamp() // create l2 object of Lamp class
21}
مشاهده بی نقص کدها
نرمافزار فوق دو شیء به اسمهای l1 و l2 از روی کلاس Lamp تولید مینماید. مشخصه isOn برای هر دو چراغ l1 و l2 به طور false میباشد.
طریق دسترسی به جوارح چهگونه میباشد؟
قابلیت دسترسی به مشخصهها و تابعهای عضو یک کلاس با به کارگیری از آرم نقطه (.) وجود داراست. به نمونه تحت دقت نمائید:
l1.turnOn()
جمله فوق تابع ()turnOn را روی شیء l1 فرا می خواند. به نمونه پایین نیز اعتنا نمائید:
l2.isOn = true
در اینجا مقدار مشخصه isOn مرتبط با شیء l2 را به طور true تهیه میکنیم. دقت فرمایید که مشخصه isOn به طور سری تعریفوتمجید شدهاست و در صورتی همت فرمائید از سوا کلاس به آن دسترسی داشته باشید، یک استثنا ساخت و ساز میگردد.
مثالی از کلاس و شیء کاتلین
1class Lamp {
2
3 // property (data member)
4 private var isOn: Boolean = false
5
6 // member function
7 fun turnOn() {
8 isOn = true
9 }
10
11 // member function
12 fun turnOff() {
13 isOn = false
14 }
15
16 fun displayLightStatus(lamp: String) {
17 if (isOn == true)
18 println("$lamp lamp is on.")
19 else
20 println("$lamp lamp is off.")
21 }
22}
23
24fun main(args: Array) {
25
26 val l1 = Lamp() // create l1 object of Lamp class
27 val l2 = Lamp() // create l2 object of Lamp class
28
29 l1.turnOn()
30 l2.turnOff()
31
32 l1.displayLightStatus("l1")
33 l2.displayLightStatus("l2")
34}
مشاهده بی نقص کدها
خروجی نرم افزار فوق به طور تحت میباشد:
l1 Lamp is on.
l2 Lamp is off.
درین قسمت در باب اپ فوق بعضی توضیحها را ارائه میکنیم:
آغاز کلاس Lamp ساختوساز می شود.
این کلاس دارنده مشخصه isOn و سه تابع عضو به طور ()turnOn() ،turnOff و ()displayLightStatus میباشد.
دو شیء l1 و l2 مرتبط با کلاس Lamp در تابع ()main ساختوساز گردیدهاند.
به دنبال تابع ()turnOn با به کارگیری از شیء l1 به طور ()l1.turnOn فراخوانی میگردد. این روال موجب می گردد که متغیر نوبتای isOn مرتبط با شیء l1 به طور true تهیه خواهد شد.
آنگاه تابع ()turnOff با به کارگیری از شیء l2 به طور ()l2.turnOff فراخوانی میشود. این مشی نیز موجب میگردد که اسلوب نوبتای isOff مرتبط با شیء l2 به طور false تهیه و تنظیم گردد.
در غایت تابع ()displayLightStatus برای هر دو شیء l1 و l2 فراخوانی میگردد و پیام قابل قبولی بسته بهاین که مشخصه isOn مقدار true یا این که false داشته باشد، تهیه مینماید.
دقت نمایید که مشخصه isOn باطن کلاس به طور false مقداردهی می شود. وقتی که یک شیء از کلاس ساخت و ساز میگردد، مشخصه isOn مرتبط با آن شیء به طور خود کار روی false تهیه میگردد. به این ترتیب لزومی به فراخوانی ()turnOff برای تهیه مقدار مشخصه isOn به مقدار false وجود نخواهد داشت.
به نمونه تحت دقت نمایید:
1class Lamp {
2
3 // property (data member)
4 private var isOn: Boolean = false
5
6 // member function
7 fun turnOn() {
8 isOn = true
9 }
10
11 // member function
12 fun turnOff() {
13 isOn = false
14 }
15
16 fun displayLightStatus() {
17 if (isOn == true)
18 println("lamp is on.")
19 else
20 println("lamp is off.")
21 }
22}
23
24fun main(args: Array) {
25
26 val lamp = Lamp()
27 lamp.displayLightStatus()
28}
مشاهده بدون نقص کدها
خروجی اپ فوق اینگونه میباشد:
lamp is off.
براین اساس به انتهای این نصیب از نوشتهی علمی فراگیری کاتلین میرسیم. دراین قسمت با مفاهیم مقدماتی اپلیکیشننویسی شیءگرا در کاتلین آشنا شدیم.
کلاس و شیء در کاتلین
از این قسمت از نوشته ی علمی فراگیری کاتلین به آنگاه، به نظارت مفاهیم مربوط به اپنویسی شیءگرا در کاتلین میپردازیم. در صدر با معنی کلاس، نحوه تولید شیء و به کار گیری طراحی اپلیکیشن در مشهد از آن درین گویش اپنویسی آشنا میشویم.
کاتلین از هر دو پارادایم نرم افزارنویسی تابعی و شیءگرا تامین مینماید. امکانهای کاتلین قابلیت تایپ کردن تابعهای سکو بالا، گونه های متعدد تابعها و لامبدا را مهیا میسازد و براین اساس به موردای بهتر برای مدل اپنویسی تابعی تبدیل میگردد. البته دراین نصیب بر روی رسیدگی مفاهیم مدل نرم افزارنویسی شیءگرا متمرکز خواهیم شد.
اپنویسی شیءگرا
در مدل نرم افزارنویسی شیءگرا (OOP) یک موضوع غامض با ساختوساز شیءهایی به گروههای خردخیس تقسیم می شود. این شی ءها دو ویژگی دارا هستند:
وضعیت
کردار
بهدنبال برخی نمونههایی از شی ها را نظارت می کنیم.
چراغ (Lamp) یک شیء میباشد:
این شیء می تواند وضعیتهای پرنور (On) و بی سروصدا (Off) داشته باشد.
این شیء قادر است اخلاق پرنور کردن (turn on) و خموشی کردن (turn off) را بگیرد.
دوچرخه (Bicycle) یک شیء میباشد.
این شیء قادر است شرایطهای «دنده کنونی» (current gear)، «دو چرخ» (two wheels)، «تعداد دنده» (number of gear) و بخش اعظمی موقعیتهای دیگر را داشته باشد.
این شیء می تواند کردار «ترمز کردن» (braking)، «پدال زدن» (changing gears)، «عوض کردن دنده» (changing gears) و اکثری رفتارهای دیگر را داشته باشد.
در نصیبهای آینده این نوشتهعلمی فراگیری کاتلین در مورد خصوصیتهای متفاوت اپلیکیشننویسی شیءگرا از قبیل کپسولهسازی دادهها، وراثت، چندریختی و غیره سخن خوا هیم کرد. درین نصیب فقطً روی مبانی مقدماتی شیءگرایی در کاتلین تمرکز میکنیم.
کلاس کاتلین
قبل از آن که بتوان اشیایی در کاتلین تشکیل داد، بایستی یک کلاس درین لهجه تمجید کرد. کلاس، یک نقشه نخستین برای تشکیل داد شیء محسوب میشود. کلاس را میقدرت مانند یک ترسیم اول (پروتوتایپ) از یک منزل تصور کرد. این کلاس دربرگیرنده جزییاتی در امر طبقات، درها، پنجرههای و اجزای دیگر منزل داراست. مطابق این تعریفها میاقتدار منزل را تشکیل داد. براین اساس منزل درست شده یک شیء خواهد بود. همانگونه که منزلهای متعددی را میقدرت از روی یک نقشه نخستین واحد ایجاد کرد، از روی یک کلاس نیز میاقتدار اشیای متعددی ساخت.
نحوه تمجید کلاس در کاتلین چهطور میباشد؟
برای تعریف و تمجید یک کلاس در کاتلین می بایست از کلیدواژه class استعمال کنیم:
1class ClassName {
2 // property
3 // member function
4 ... .. ...
5}
به نمونه تحت دقت فرمایید:
1class Lamp {
2
3 // property (data member)
4 private var isOn: Boolean = false
5
6 // member function
7 fun turnOn() {
8 isOn = true
9 }
10
11 // member function
12 fun turnOff() {
13 isOn = false
14 }
15}
مشاهده بدون نقص کدها
در نمونه فوق یک کلاس با اسم Lamp تعریفوتمجید کردهایم. این کلاس دارنده یک مشخصه به اسم isOn میباشد که همچون یک متغیر تعریف و تمجید گردیدهاست. همینطور دو تابع عضو به اسمهای ()turnOn و ()turnOff دارااست.
یک مشخصه در کلاسهای کاتلین یا این که می بایست مقداردهی خواهد شد و یا این که به طور «مجرد» (abstract) اعلان گردد. در نمونه فوق، مشخصه isOn به طور False مقداردهی گردیدهاست. کلاسها، شی ها، مشخصهها، تابع عضو و غیره، کلیه دارنده مادیفایرهای «نمایانی» (Visibility) میباشند. برای مثال مشخصه isOn محرمانه میباشد. این بدان مفهوم میباشد که مشخصه isOn صرفا از داخل کلاس Lamp می تواند تغییر و تحول یابد.
مادیفایرهای دیگر نمایانی در کاتلین به تفصیل ذیل می باشند:
Private – تنهاً از باطن خویش کلاس قابل مشاهده (دسترسی) میباشد.
Public – در هر کجا نمایان میباشد.
Protected – برای کلاس و زیرکلاسهای آن نمایان میباشد.
Internal – هر کلاینت داخل ماژول میتواند به آن دسترسی داشته باشد.
در نصیبهای آجل در امر مادیفایرهای protected و internal بیشتر حرف خوا هیم کرد. در نرم افزار فوق، تابعهای عضو ()turnOn و ()turnOff به طور همگانی (public) می باشند، در حالی که مشخصه isOn محرمانه (private) میباشد.
اشیای کاتلین
در حین تمجید یک کلاس، تنهاً مشخصههای شیء تمجید میشوند و هیچ یاد یا این که فضای ذخیرهسازی به آن اختصاص نمییابد. برای دسترسی به تابعهای عوض باطن کلاس بایستی از روی آن اشیایی ساخت. بهدنبال مثالی از ساخت یک شیء بر مبنای کلاس Lamp می بینید که در قسمت گذشته تعریفوتمجید کردیم:
1class Lamp {
2
3 // property (data member)
4 private var isOn: Boolean = false
5
6 // member function
7 fun turnOn() {
8 isOn = true
9 }
10
11 // member function
12 fun turnOff() {
13 isOn = false
14 }
15}
16
17fun main(args: Array) {
18
19 val l1 = Lamp() // create l1 object of Lamp class
20 val l2 = Lamp() // create l2 object of Lamp class
21}
مشاهده بی نقص کدها
نرمافزار فوق دو شیء به اسمهای l1 و l2 از روی کلاس Lamp تولید مینماید. مشخصه isOn برای هر دو چراغ l1 و l2 به طور false میباشد.
طریق دسترسی به جوارح چهگونه میباشد؟
قابلیت دسترسی به مشخصهها و تابعهای عضو یک کلاس با به کارگیری از آرم نقطه (.) وجود داراست. به نمونه تحت دقت نمائید:
l1.turnOn()
جمله فوق تابع ()turnOn را روی شیء l1 فرا می خواند. به نمونه پایین نیز اعتنا نمائید:
l2.isOn = true
در اینجا مقدار مشخصه isOn مرتبط با شیء l2 را به طور true تهیه میکنیم. دقت فرمایید که مشخصه isOn به طور سری تعریفوتمجید شدهاست و در صورتی همت فرمائید از سوا کلاس به آن دسترسی داشته باشید، یک استثنا ساخت و ساز میگردد.
مثالی از کلاس و شیء کاتلین
1class Lamp {
2
3 // property (data member)
4 private var isOn: Boolean = false
5
6 // member function
7 fun turnOn() {
8 isOn = true
9 }
10
11 // member function
12 fun turnOff() {
13 isOn = false
14 }
15
16 fun displayLightStatus(lamp: String) {
17 if (isOn == true)
18 println("$lamp lamp is on.")
19 else
20 println("$lamp lamp is off.")
21 }
22}
23
24fun main(args: Array) {
25
26 val l1 = Lamp() // create l1 object of Lamp class
27 val l2 = Lamp() // create l2 object of Lamp class
28
29 l1.turnOn()
30 l2.turnOff()
31
32 l1.displayLightStatus("l1")
33 l2.displayLightStatus("l2")
34}
مشاهده بی نقص کدها
خروجی نرم افزار فوق به طور تحت میباشد:
l1 Lamp is on.
l2 Lamp is off.
درین قسمت در باب اپ فوق بعضی توضیحها را ارائه میکنیم:
آغاز کلاس Lamp ساختوساز می شود.
این کلاس دارنده مشخصه isOn و سه تابع عضو به طور ()turnOn() ،turnOff و ()displayLightStatus میباشد.
دو شیء l1 و l2 مرتبط با کلاس Lamp در تابع ()main ساختوساز گردیدهاند.
به دنبال تابع ()turnOn با به کارگیری از شیء l1 به طور ()l1.turnOn فراخوانی میگردد. این روال موجب می گردد که متغیر نوبتای isOn مرتبط با شیء l1 به طور true تهیه خواهد شد.
آنگاه تابع ()turnOff با به کارگیری از شیء l2 به طور ()l2.turnOff فراخوانی میشود. این مشی نیز موجب میگردد که اسلوب نوبتای isOff مرتبط با شیء l2 به طور false تهیه و تنظیم گردد.
در غایت تابع ()displayLightStatus برای هر دو شیء l1 و l2 فراخوانی میگردد و پیام قابل قبولی بسته بهاین که مشخصه isOn مقدار true یا این که false داشته باشد، تهیه مینماید.
دقت نمایید که مشخصه isOn باطن کلاس به طور false مقداردهی می شود. وقتی که یک شیء از کلاس ساخت و ساز میگردد، مشخصه isOn مرتبط با آن شیء به طور خود کار روی false تهیه میگردد. به این ترتیب لزومی به فراخوانی ()turnOff برای تهیه مقدار مشخصه isOn به مقدار false وجود نخواهد داشت.
به نمونه تحت دقت نمایید:
1class Lamp {
2
3 // property (data member)
4 private var isOn: Boolean = false
5
6 // member function
7 fun turnOn() {
8 isOn = true
9 }
10
11 // member function
12 fun turnOff() {
13 isOn = false
14 }
15
16 fun displayLightStatus() {
17 if (isOn == true)
18 println("lamp is on.")
19 else
20 println("lamp is off.")
21 }
22}
23
24fun main(args: Array) {
25
26 val lamp = Lamp()
27 lamp.displayLightStatus()
28}
مشاهده بدون نقص کدها
خروجی اپ فوق اینگونه میباشد:
lamp is off.
براین اساس به انتهای این نصیب از نوشتهی علمی فراگیری کاتلین میرسیم. دراین قسمت با مفاهیم مقدماتی اپلیکیشننویسی شیءگرا در کاتلین آشنا شدیم.

معایب سبک ایده پردازی و فروش آن و درآمد از اندروید