Dokumen tersebut membahas tentang pemrograman berorientasi objek (OOP) dalam bahasa pemrograman Kotlin, meliputi konsep-konsep seperti class, properties, function, inheritance, abstract class, interface, dan generics."
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010eddie Ismantoe
Modul pratikum algoritma dan pemrograman dalam bahasa visual C++ ini membahas mengenai Teknik pengimplementasian algoritma dalam Bahasa Visual C++ 2010
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010eddie Ismantoe
Modul pratikum algoritma dan pemrograman dalam bahasa visual C++ ini membahas mengenai Teknik pengimplementasian algoritma dalam Bahasa Visual C++ 2010
Utilizing Kotlin Flows in an Android application
Vijay will be revealing to you the kind of challenges we face while working with asynchronous data streams and how Kotlin Flows solves them.
Learn the latest tips, tricks, and tools for Android Development from our international team of Android Developers in Bangkok!
Materi yang ada pada slide ini berisi :
Pengenalan pemrograman berbasis OO
Teori enkapsulasi
Teori pewarisan
Teori polimorpisme
Praktik implementasi kelas di java
----------------------------------------------------------------------
Keep in touch with me in :
Twitter : https://twitter.com/rizkiadam_1991
Email : rizkiadamunikom@gmail.com
Github : https://github.com/RizkiAdamKurniawan
IG : @rizkiadamkurniawan
Membahas tentang tumpukan/stack dalam struktur data, serta penerapannya dalam mengecek kata/kalimat palindrom, juga penerapannya dalam mengubah notasi matematika infix menjadi prefix dan postfix.
Utilizing Kotlin Flows in an Android application
Vijay will be revealing to you the kind of challenges we face while working with asynchronous data streams and how Kotlin Flows solves them.
Learn the latest tips, tricks, and tools for Android Development from our international team of Android Developers in Bangkok!
Materi yang ada pada slide ini berisi :
Pengenalan pemrograman berbasis OO
Teori enkapsulasi
Teori pewarisan
Teori polimorpisme
Praktik implementasi kelas di java
----------------------------------------------------------------------
Keep in touch with me in :
Twitter : https://twitter.com/rizkiadam_1991
Email : rizkiadamunikom@gmail.com
Github : https://github.com/RizkiAdamKurniawan
IG : @rizkiadamkurniawan
Membahas tentang tumpukan/stack dalam struktur data, serta penerapannya dalam mengecek kata/kalimat palindrom, juga penerapannya dalam mengubah notasi matematika infix menjadi prefix dan postfix.
This guideline aims to provide clear instructions for submitting your GitHub repository as part of the BFAA (Belajar Fundamental Aplikasi Android) course on Dicoding. Following these guidelines will ensure that your submission is well-organized, easily navigable, and meets the evaluation criteria.
6. Class, Properties, & Function
Blueprint untuk membuat Object
fun main() {
val garfield = Cat("Orange", 27, 46, 4)
garfield.playing()
garfield.sleep()
garfield.eat()
garfield.purring()
}
7. Getter & Setter
class Animal{
var name: String = "Dicoding Miaw"
get(){
println("Fungsi Getter
terpanggil")
return field
}
set(value){
println("Fungsi Setter terpanggil")
field = value
}
}
fun main(){
val dicodingCat = Animal()
println("Nama: ${dicodingCat.name}" )
dicodingCat.name = "Goose"
println("Nama: ${dicodingCat.name}")
}
/*
output:
Fungsi Getter terpanggil
Nama: Dicoding Miaw
Fungsi Setter terpanggil
Fungsi Getter terpanggil
Nama: Goose
*/
11. Inheritance
class Cat : Animal() {
fun walk () {
}
override fun eat(){
}
override fun sleep() {
}
class ChildClass : ParentClass()
open class Animal(){
open fun eat(){
}
open fun sleep(){
}
}
agar dapat diwariskan
Cat menjadi turunan Animal
12. Abstract Class
Menghindari pembuatan instance dari kelas tersebut
abstract class Animal(
var name: String,
var weight: Double,
var age: Int,
var isCarnivore: Boolean){
}
fun main(){
val animal = Animal("dicoding animal", 2.6, 1, true)
}
*Cannot create an instance of an abstract class
14. Overloading
Membuat penamaan fungsi yang sama namun
berbeda parameternya.
class Animal(private var name: String) {
fun eat() {
println("$name makan!")
}
fun eat(typeFood: String) {
println("$name memakan $typeFood!")
}
fun eat(typeFood: String, quantity: Double) {
println("$name memakan $typeFood sebanyak $quantity
grams!")
}
}
fun main() {
val dicodingCat = Animal("Dicoding Miaw")
dicodingCat.eat()
dicodingCat.eat("Ikan Tuna")
dicodingCat.eat("Ikan Tuna", 450.0)
}
15. Interface
Supaya kelas turunan harus memiliki semua sifat yang sama
interface IFly {
fun fly()
}
class Bird : IFly {
override fun fly() {
println("I flying without wings")
}
}
harus ada
16. Property Delegation
Mengirimkan tugas pada kelas lain
class DelegateName {
private var value: String = "Default"
operator fun getValue(classRef: Any?, property: KProperty<*>) : String {
println("")
return value
}
operator fun setValue(classRef: Any?, property: KProperty<*>, newValue: String){
println("")
value = newValue
}
}
class Animal {
var name: String by DelegateName()
}
class Person {
var name: String by DelegateName()
}
19. Apa itu Generic?
dapat digunakan secara umum untuk berbagai macam tipe data
Contoh yang sudah ada di Kotlin:
val contributor = listOf("alfian","nrohmen","dimans","widy")
val contributorAge = listOf(17, 27, 37, 48)
val contributorSupport = listOf(true, false, false, true)
*listOf bisa digunakan secara umum (tipe data apa aja)
20. Cara Membuat Kelas Generic
fun main() {
val longArrayList = ArrayList<Long>()
val firstLong = longArrayList[0]
}
class ArrayList<T> : List<T> {
override fun get(index: Int): T {
return this[index]
}
}
interface List<T> {
operator fun get(index: Int): T
}
Angle brackets <>
21. Cara Membuat Fungsi
Genericfun main() {
val numbers = (1..100).toList()
print(numbers.potong(1..10))
}
fun <T> List<T>.potong(indices: IntRange): List<T> {
if (indices.isEmpty()) return listOf()
return this.subList(indices.first, indices.last + 1).toList()
}
22. Constraint Type Parameter
Pembatasan tipe nilai yang akan disematkan ke dalam parameter.
fun main() {
val numbers = ListNumber<Long>()
val numbers2 = ListNumber<Int>()
val numbers3 = ListNumber<String>()
error : Type argument is not within its bounds
}
class ListNumber<T : Number> : List<T>{
override fun get(index: Int): T {
return this[index]
}
}
interface List<T> {
operator fun get(index: Int): T
}
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
numbers.sumNumber()
val names = listOf("dicoding", "academy")
names.sumNumber()
// error : inferred type String is not a subtype of Number
}
fun <T : Number> List<T>.sumNumber() : T {
/* .. */
}
23. Variance
Variance dibutuhkan ketika kita ingin membuat kelas atau fungsi generic dengan
batasan yang tidak akan mengganggu dalam penggunaannya.
24. Covariant
tipe argument hanya dapat digunakan sebagai
tipe nilai kembalian
interface List<out E> : Collection<E> {
operator fun get(index: Int): E
}
Contravariant
tipe argument dapat digunakan sebagai
argumen untuk sebuah fungsi
interface Comparable<in T> {
operator fun compareTo(other: T): Int
}
26. Aku lebih takut kepada orang yang melatih
1 buah jurus tendangan 1000 kali,
daripada kepada orang yang berlatih
1000 jurus tendangan 1 kali".
- Bruce Lee
’’
’’
27. You can find me at:
● Google : Ahmad Arif Faizin
● Discord : @arifaizin
Thanks!
Any questions?