Kotlin polymorphism late binding


#1

سلام عزیزان
من این لیت بایندینگ رو تو پولی مورفیزم رو متوجه نشدم میشه به صورت ابتدایی توضیح بدین ؟ البته تو کاتلین …
خیلی ممنون :tulip::tulip:


#2

کلا late binding یعنی تایپ یا متد فراخوانی شده در زمان اجرا مشخص میشه، اگر بدونم دقیقا کجا با این مطلب برخورد کردین بهتر میتونم راهنمایی کنم و آیا rules هم جز پرسش هست یا نه؟


#3

سلام اقا توماج
اول اینکه مرسی از پاسختون … من تو یادگیری کاتلین به قسمت polymorphism رسیدم و این دوره چهار تا قسمت از پولیمرفیزم رو تدریس میکنه که شامل
polymorphism and upcasting
polymorphism late binding
اگه پلیمرفیزم نباشه
و توسعه پذیری با پلی مرفیزم

من تو قسمت دوم دچار گیجی شدم … وخواستم ببینم میشه شماها به صورت ساده توضیحی بدین همین.
در ضمن در قسمت rules راست میگین باید حذفش کنم چون اصلا هنوز خودشم بلد نیستم


#4

چشم، فقط بایداول یک مطالعه کوتاه انجام بدم, راستش من در زمینه کاتلین تخصص ندارم اما بدم نمیاد یه چیزی یاد بگیرم، شاید @samdvr بهتر بتونه کمک کنه :slight_smile:


#5

Static Binding / Early Binding در زمان compile شدن معلوم میشه چه متودی فراخوانی بشه مثله method overloading

class MethodOverloading{  
    fun area(a:Int):Int{  
        return a*a  
    }  
    fun area(length:Int,height:Int):Int{  
        return length*height  
    }  
    fun area(base:Float,height:Float):Float{  
        return (base*height)/2  
    }  
}  
fun main(args:Array<String>){  
    var obj=MethodOverloading()  
    println("Area of Square="+obj.area(5))  
    println("Area of Rectangle="+obj.area(5,4))  
    println("Area of Triangle="+obj.area(10.05f,5.5f))  
}  

compiler وقتی داره compile میکنه میفهمه کدوم یکی از متود های area نسبت به ارگمنت ها فراخوانی کنه و اگه نتونه برنامه compile نمیشه

Dynamic Binding/Late Binding/Runtime Binding

این مثله method overriding هستش و method در زمانه runtime نسبت به شی ساخته شده
برای فراخوانی درست لود میشه و فراخوانی میشه

open class Car(var speed:Int){  
 open  fun show(){  
        println("car is running on $speed km/hrs")  
    }  
}  
class Mercedize(var mspeed:Int) : Car(mspeed){  
    override fun show(){  
        println("Mercedize is running on $mspeed km/hrs")  
    }  
}  
fun main(args:Array<String>){  
    var newcar=Mercedize(150);  
    println(newcar.show())  
}  

Polymorphism خاصیت برنامه که یک شی میتونه نسبت به پیش فرض حالت مختلف بگیره گفته میشه Static polymorphism و Dynamic Polymorphism فرق بزرگش در زمانی که method ها تعریف میشن

Static خوبیش اینکه خطا در زمانه compile معلوم میشه
Dynamic برای کارهای مثل meta programming راحت تره

Typeclass یا adhoc polymorphism بهترین خاصیت هردو داره