Kotlin - Classe e oggetto

In questo capitolo impareremo le basi della programmazione orientata agli oggetti (OOP) usando Kotlin. Impareremo a conoscere la classe e il suo oggetto e come giocare con quell'oggetto. Per definizione di OOP, una classe è un modello di un'entità di runtime e l'oggetto è il suo stato, che include sia il suo comportamento che lo stato. In Kotlin, la dichiarazione di classe consiste in un'intestazione di classe e un corpo di classe circondato da parentesi graffe, simile a Java.

Class myClass { // class Header 

   // class Body
}

Come Java, Kotlin consente anche di creare diversi oggetti di una classe e sei libero di includere i suoi membri e funzioni di classe. Possiamo controllare la visibilità delle variabili dei membri della classe utilizzando diverse parole chiave che impareremo nel Capitolo 10 - Controllo della visibilità. Nell'esempio seguente, creeremo una classe e il suo oggetto attraverso il quale accederemo a diversi membri di dati di quella classe.

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

La parte di codice precedente produrrà il seguente output nel browser, dove stiamo chiamando printMe () di myClass usando il proprio oggetto.

You are at the best Learning website Named- Tutorials.point

Classe annidata

Per definizione, quando una classe è stata creata all'interno di un'altra classe, viene chiamata come classe nidificata. In Kotlin, la classe annidata è per impostazione predefinita statica, quindi è possibile accedervi senza creare alcun oggetto di quella classe. Nel seguente esempio, vedremo come Kotlin interpreta la nostra classe annidata.

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"
   }
}

La parte di codice precedente produrrà il seguente output nel browser.

Welcome to The TutorialsPoint.com

Classe interna

Quando una classe annidata è contrassegnata come "interna", verrà chiamata come classe interna. È possibile accedere a una classe interna dal membro dati della classe esterna. Nell'esempio seguente accediamo al membro dati della classe esterna.

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

La parte di codice precedente produrrà il seguente output nel browser, dove stiamo chiamando la classe annidata usando il costruttore predefinito fornito dai compilatori Kotlin al momento della compilazione.

Welcome to the TutorialsPoint.com

Classe interna anonima

La classe interiore anonima è un concetto abbastanza buono che rende la vita di un programmatore molto facile. Ogni volta che implementiamo un'interfaccia, il concetto di blocco interno anonimo entra in scena. Il concetto di creare un oggetto di interfaccia utilizzando il riferimento all'oggetto di runtime è noto come classe anonima. Nel seguente esempio, creeremo un'interfaccia e creeremo un oggetto di tale interfaccia utilizzando il meccanismo della classe interna anonima.

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

La parte di codice precedente produrrà il seguente output nel browser.

I am an example of Anonymous Inner Class

Digitare Alias

Gli alias di tipo sono una proprietà del compilatore Kotlin. Fornisce la flessibilità di creare un nuovo nome di un tipo esistente, non crea un nuovo tipo. Se il nome del tipo è troppo lungo, puoi facilmente introdurre un nome più breve e utilizzarlo per usi futuri. Gli alias di tipo sono davvero utili per i tipi complessi. Nell'ultima versione, Kotlin ha revocato il supporto per gli alias di tipo, tuttavia, se stai usando una vecchia versione di Kotlin potresti averla usata come segue:

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