با سلام خدمت کاربران گرامی سایت پی وی لرن و کاربرانی که علاقمند به دوره آموزش کاتلین هستند. در جلسه گذشته ما به صورت مفصل و جامع به بررسی جریان کنترل در این زبان برنامه نویسی پرداختیم. در این جلسه ما به آموزش Class و Object در کاتلین می پردازیم.
در شروع جلسه آموزش Class و Object در کاتلین ، ما با اصول اولیه برنامه نویسی Object-Oriented یا (OOP) را با استفاده از کاتلین خواهیم آموخت.
در این جلسه در مورد Class و Object و چگونگی کار با Object را می آموزیم.
OOP یک یک کلاس برای تعیین زمان اجرا است و Object نیز حالت آن است که شامل دو بخش می شود:
رفتار OPP و وضعیت OPP.
در کاتلین اعلامیه class مانند جاوا شامل یک سر صفحه یا هدر و یک بدنه طبقه بندی شده با پرانتزهای پیچیده است.
1 2 3 4 | Class myClass { // class Header // class Body } |
مانند جاوا، کاتلین هم به شما اجازه می دهد که چندین objects مختلف از class یک بسازید و لذا آزادید که از اعضای این class و توابع آن استفاده نمایید.
می توان قابل مشاهده بودن این class ها را با استفاده از کلمات کلیدی مختلف کنترل کرد.
این قابلیت در جلسات بعدی به آموزش داده می شود.
در مثال زیر ما یک class و objects آن را ایجاد خواهیم کرد و از طریق آن به اعضای داده های مختلفی آن class دسترسی خواهیم داشت.
1 2 3 4 5 6 7 8 9 10 11 12 13 | class myClass { // property (data member) private var name: String = "Tutorials.point" // member function fun printMe() { print("You are at the best Learning website Named-"+name) } } fun main(args: Array<String>) { val obj = myClass() // create obj object of myClass class obj.printMe() } |
قطعه کد بالا خروجی زیر را در مرورگر تولید می کند.
جایی که از ()printMe را برای نام گذاری myClass استفاده شده است، ما از object خود آن استفاده کرده ایم.
1 | You are at the best Learning website Named- Tutorials.point |
اگر بخواهیم این کلاس را تعریف کنیم:
هر وقت یک کلاس درون یک کلاس دیگر ایجاد شود؛ کلاس تو در تود یا nested class ایجاد می گردد.
در کاتلین، به صورت پیش فرض استاتیک هستند، از این رو بدون ایجاد هیچ object از آن کلاس،می توان آن را مشاهده نمود.
در مثال زیر می بینید که چگونه کاتلین کلاس تو در تو را تفسیر می نماید.
1 2 3 4 5 6 7 8 9 | fun main(args: Array<String>) { val demo = Outer.Nested().foo() // calling nested class method print(demo) } class Outer { class Nested { fun foo() = "Welcome to The TutorialsPoint.com" } } |
قطعه کد بالا خروجی زیر را در مرورگر تولید می کند.
1 | Welcome to The TutorialsPoint.com |
وقتی یک کلاس تو در تو با عنوان “inner” مشخص شود؛ آن گاه به آن کلاس داخلی یا inner class می گویند.
یک کلاس داخلی می تواند به وسیله اجزای داده های یک کلاس دیگر قابل دسترسی باشد.
در مثال زیر، نحوه دسترسی به اجزای داده کلاس بیرونی را می بینید.
1 2 3 4 5 6 7 8 9 10 | fun main(args: Array<String>) { val demo = Outer().Nested().foo() // calling nested class method print(demo) } class Outer { private val welcomeMessage: String = "Welcome to the TutorialsPoint.com" inner class Nested { fun foo() = welcomeMessage } } |
قطعه کد بالا خروجی زیر را در مرورگر تولید می کند.
جایی که از دستور استفاده از کلاس تو در تو برای نام گذاری سازنده پیش فرض استفاده شده است؛ می توان از کامپایلر کاتلین در زمان کامپایل استفاده کرد.
1 | Welcome to the TutorialsPoint.com |
کلاس داخلی ناشناس یک ابزار بسیار مفید برای برنامه نویسان است.
هر وقت یک interface را اجرا نماییم در این هنگام بلوک کلاس داخلی ناشناس نیز وارد صحنه می شود.
ساختن یک object از interface، با استفاده از مرجع object، با عنوان کلاس ناشناس شناخته می شود.
در مثال زیر ما یک interface را ایجاد خواهیم کرد و یک object از آن interface را با استفاده از مکانیزم کلاس ناشناس ایجاد خواهیم نمود.
1 2 3 4 5 6 7 8 9 10 11 | fun main(args: Array<String>) { var programmer :Human = object:Human // creating an instance of the interface { override fun think() { // overriding the think method print("I am an example of Anonymous Inner Class ") } } programmer.think() } interface Human { fun think() } |
قطعه کد بالا خروجی زیر را در مرورگر تولید می کند.
1 | I am an example of Anonymous Inner Class |
Type Aliases نوعی از ویژگی های کامپایلر کوتلین هستند.
این ویزگی موجب ایجاد انعطاف پذیری در هنگام ساخت یک نام جدید از نوع موجود existing type آن می شود.
اگر نام type بیش از حد طولانی باشد با استفاده از این قابلیت می توانید یک نام کوتاه بسازید و در آینده نیز از آن استفاده نمایید.
Type Aliases واقعا برای کار با Type مفید هستند.
گرچه در آخرین نسخه، کاتلین پشتیبانی از type aliases را لغو نمود اما اگر از نسخه های قدیمی تر کاتلین استفاده می کنید می توانید برای استفاده از این قابلیت به صورت عمل کنید.
1 2 | typealias NodeSet = Set<Network.Node> typealias FileTable<K> = MutableMap<K, MutableList<File>> |
در این جلسه به آموزش Class و Object در کاتلین پرداختیم.
در جلسه بعد شما را با سازنده ها یا Constructors در کاتلین آشنا می نماییم.
با پی وی لرن همراه باشید.