1 of 36

Tehnici avansate pentru

dezvoltarea aplicațiilor mobile

Kotlin - Generice, obiecte și extensii

2 of 36

Tipul de date generic

2

3 of 36

Tipul de date generic

  • Tip generic folosit în proprietățile și metodele clasei
    • înlocuit cu orice tip de date la instanțierea clasei

Kotlin - Generice, obiecte și extensii

3

4 of 36

Proprietăți cu tip de date generic

  • Proprietățile pot avea tipul de date generic

Kotlin - Generice, obiecte și extensii

4

5 of 36

Instanțierea clasei cu tip de date generic

  • Tipul de date real va fi pasat atunci când instanțiem clasa

  • Proprietate cu tipul de date generic
    • Argumentul dat are tipul de date real specificat între <>

  • Ex. numele T pentru tipul generic (sau alte majuscule)

Kotlin - Generice, obiecte și extensii

5

6 of 36

Tipul de date generic - exemplu

  • 3 obiecte cu tipuri de date reale diferite

Kotlin - Generice, obiecte și extensii

6

7 of 36

Clasa enum

7

8 of 36

Clasa enum

  • Creează un tip de date cu un set limitat de valori posibile
  • Fiecare valoare = constantă enum
    • Convenție: numele constantelor scrise cu majuscule
  • Cuvântul cheie enum

Kotlin - Generice, obiecte și extensii

8

9 of 36

Clasa enum - constantele enum

  • Constantele enum se accesează folosind operatorul .
  • Clasa enum nu trebuie să fie instanțiată

Kotlin - Generice, obiecte și extensii

9

10 of 36

Clasa enum - exemplu

Kotlin - Generice, obiecte și extensii

10

11 of 36

Clasa data

11

12 of 36

Clasa data

  • Clase folosite doar pentru a stoca date, fără metode
  • Cuvântul cheie data
  • Compilatorul implementează automat niște metode
    • equals(), hashCode(), toString(), copy()

Kotlin - Generice, obiecte și extensii

12

13 of 36

Clasa data - exemplu

Kotlin - Generice, obiecte și extensii

13

14 of 36

Obiect Singleton

14

15 of 36

Obiect Singleton

  • Este o clasă care are o singură instanță
  • Cuvântul cheie object în loc de class
  • Nu poate avea un constructor - nu se va instanția direct
  • Toate proprietățile sunt definite între acolade și sunt inițializate

Kotlin - Generice, obiecte și extensii

15

16 of 36

Obiect Singleton

  • Proprietățile sunt accesate folosind operatorul .

Kotlin - Generice, obiecte și extensii

16

17 of 36

Obiect Singleton - exemplu

Kotlin - Generice, obiecte și extensii

17

18 of 36

Obiect companion

  • În Kotlin se pot defini clase și obiecte în cadrul altor clase

  • Obiect companion = obiect singleton în cadrul unei clase
    • Proprietățile/metodele aparțin clasei
    • Accesarea proprietăților și metodelor din interior clasei

Kotlin - Generice, obiecte și extensii

18

19 of 36

Obiect companion - exemplu

  • Proprietățile pot fi accesate doar specificând clasa care include companionul

Kotlin - Generice, obiecte și extensii

19

20 of 36

Extinderea claselor

20

21 of 36

Extinderea claselor cu noi proprietăți

  • Extinderea claselor deja implementate cu noi proprietăți
    • Fără a modifica clasa inițială
    • Proprietăți extensie

  • Extinderea tipurilor de date existente

  • Extinderea bibliotecilor, framework-urilor

Kotlin - Generice, obiecte și extensii

21

22 of 36

Extinderea claselor cu noi proprietăți

  • Proprietățile extensie nu pot seta date (nu avem set)
    • pot doar obține date folosind metoda get
  • Definite înafara clasei

Kotlin - Generice, obiecte și extensii

22

23 of 36

Extinderea claselor cu noi proprietăți

  • Adăugăm o proprietate nouă companionului Quiz.StudentProgress
  • O putem accesa folosind clasa Quiz

Kotlin - Generice, obiecte și extensii

23

24 of 36

Extinderea claselor cu noi funcții

  • Adăugarea unei noi funcții la o clasă deja implementată
    • Fără să modificăm clasa inițială
    • Funcții extensie

Kotlin - Generice, obiecte și extensii

24

25 of 36

Extinderea claselor cu noi metode

  • Adăugăm o nouă metodă companionului
  • O putem accesa doar folosind clasa Quiz

Kotlin - Generice, obiecte și extensii

25

26 of 36

Interfețe

26

27 of 36

Interfețe

  • Interfața este un contract care trebuie respectat de clasele care o implementează
    • când mai multe clase au proprietăți și metode comune
  • Cuvant cheie interface
  • Numele interfeței în Pascal case

Kotlin - Generice, obiecte și extensii

27

28 of 36

Implementarea unei interfețe

  • Clasa trebuie să implementeze toate proprietățile și metodele specificate în interfață
  • Fiecare clasă va putea avea comportament diferit
  • Folosim cuvantul cheie override pentru proprietăți/metode

Kotlin - Generice, obiecte și extensii

28

29 of 36

Interfețe - exemplu

Kotlin - Generice, obiecte și extensii

29

30 of 36

Funcții scope

30

31 of 36

Funcții scope

  • Funcții de ordin superior în Kotlin
    • primesc o funcție ca parametru sau returnează o funcție

  • Permit accesul la proprietățile/metodele unui obiect fără referirea numelui obiectului

  • Suntem în “domeniul” obiectului => putem omite numele obiectului
    • folosim it sau this

Kotlin - Generice, obiecte și extensii

31

32 of 36

Funcții scope

  • Cod mai concis - nu mai repetăm numele obiectului

  • Le putem apela pe un obiect chiar dacă el nu este asignat unei variabile

  • Putem omite () și folosim trailing lambda

  • Funcțiile scope:
    • let, run, with, apply, also

Kotlin - Generice, obiecte și extensii

32

33 of 36

Funcții scope - let

  • Funcția let()
    • Funcție extensie a oricărui obiect Kotlin
    • Obiectul se referă prin argumentul lambda sau prin it
    • Returnează rezultatul lambda

Kotlin - Generice, obiecte și extensii

33

34 of 36

Funcții scope - apply

  • apply() este o funcție extensie a oricărui obiect
    • Obiectul este accesat folosind this (se poate omite)
    • Folosit de obicei pentru configurația unui obiect
      • aplică anumite modificări obiectului
    • Returnează referința la obiectul modificat

Kotlin - Generice, obiecte și extensii

34

35 of 36

Bibliografie

35

36 of 36

Cuvinte cheie

  • Tipul generic
  • Clasa enum
  • Clasa data
  • Obiect Singleton
  • Obiect companion
  • Extinderea claselor
  • Interfață
  • Funcții scope
  • let()
  • apply()

Kotlin - Generice, obiecte și extensii

36

36