درس 5 - کلاس ها و شی ها در کاتلین
آموزش کاتلین

آموزش شی گرایی در زبان برنامه نویسی کاتلین

از آنجایی که زبان کاتلین یک زبان شی گرا است شما میتوانید از این شیوه ی برنامه نویسی کمک بگیرید تا بتوانید از شی گرایی در کاتلین استفاده کنید.

Object-Oriented Programming (OOP) یک شیوه ی برنامه نویسی هست که اکثر زبان های برنامه نویسی آنرا ساپورت میکنند و به سرعت و انعطاف پذیری بیشتر پروژه ها کمک میکند.

در این درس آموزشی به کلاس ها در زبان کاتلین و همچنین اشیا یا آبجکت ها و نحوه ی استفاده از آنها میپردازیم.

یک کلاس یک طرح کلی از یک موجودیت است و آبجکت یا شی یک نمونه ی ساخته شده از هر کلاس است.

در زبان برنامه نویسی کاتلین نحوه ی تعریف کلاس به شکل زیر است که دارای دو بخش class Header و class Body است و که با آکولاد باز و بسته تعریف میشود.

Class myClass { // class Header 

   // class Body
}

همانند زبان جاوا در کاتلین نیز شما میتوانید به تعداد زیادی آبجکت یا شی از یک کلاس تولید کنید و این اختیار را دارید که اعضا و متود ها را اضافه کنید یا نه.

در مثال زیر ما یک کلاس ایجاد میکنیم و سپس یک شی میسازیم که داده های درون کلاس دسترسی داریم.

class myClass {
   // property (data member)
   private var name: String = "avasam.ir"
   
   // 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()
}

نمونه کد کاتلین بالا خروجی زیر را تولید میکند.

You are at the best Learning website Named- avasam.ir

 

کلاس های تودرتو یا Nested Class در زبان کاتلین

بصورت مفهومی در زبان کاتلین هرگاه که یک کلاس درون کلاس دیگری ایجاد و تعریف شود به آن Nested class یا کلاس های تو در تو میگویند.

در زبان کاتلین بصورت پیشفرض کلاس های تو در تو static هستند بنابراین بدون نیاز به ساختن هیچ آبجکت یا شی میتوان از آن استفاده کرد.

در مثال زیر نحوه ی تعریف کلاس های تودرتو یا Nested classes در زبان کاتلین را میبینید.

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 avasam.ir"
   }
}

نمونه کد کاتلین بالا خروجی زیر را در پی خواهد داشت.

Welcome to The avasam.ir

 

کلاس های درونی یا Inner Class در کاتلین

در زبان کاتلین زمانی که یک کلاس nested بعنوان inner تعریف شود ، بعنوان یک کلاس درونی یا Inner Class گفته میشود.

یک کلاس inner میتواند توسط یک کلاس دیگر outer قابل دسترسی باشد. در مثال زیر نحوه ی استفاده از inner کلاس ها را متوجه میشوید.

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 avasam.ir"
   inner class Nested {
      fun foo() = welcomeMessage
   }
}

کد بالا نتیجه ی زیر را در خروجی خواهد داشت.همانطور که دیدید ما Nested Class را در متود سازنده ی اصلی ساخته شده توسط کامپایلر صدا میزنیم.

Welcome to the avasam.ir

 

کلاس های درونی Anonymous در زبان کاتلین

کلاس های درونی یا inner class های anonymous یکی از مفاهیم به درد بخور برای برنامه نویسان کاتلین خواهد بود.

زمانی که با اینترفیس ها کار میکنید این کلاس ها در زبان کاتلین خودنمایی میکنند. در واقع مفهوم ساختن یک شی از interface با استفاده از اشیای مرجع runtime بعنوان یک کلاس anonymous شناخته میشود.

در مثال زیر با استفاده از زبان برنامه نویسی کاتلین یک interface میسازیم و سپس یک شی از interface با استفاده از مکانیسم Anonymous Inner class میسازیم.

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()
}

کد بالا نتیجه ی زیر را در پی خواهد داشت.

I am an example of Anonymous Inner Class 

 

Type Aliases در زبان کاتلین

Type aliases یکی از ویژگی های کامپایلر زبان برنامه نویسی کاتلین است. این امکان را میدهد که از یک نوع با نام جدید بسازید و به معنی این نیست که شما میتوانید نوع داده های جدیدی را تعریف کنید.

مثلا اگر نام یک نوع داده طولانی است میتوانید یک نام جدید و مختصر تعریف کنید. این ویژگی برای تعریف نوع داده های پیچیده مناسب است ولی در ورژن های جدید کاتلین پشتیبانی از این ابزار به اتمام رسیده است و اگر از نسخه های قدیمی کاتلین استفاده میکنید میتوانید طبق مثال زیر از این ویژگی زبان کاتلین استفاده کنید.

typealias NodeSet = Set<Network.Node>
typealias FileTable<K> = MutableMap<K, MutableList<File>>

اتمام درس