Polymorphism

 أولاً: مبدأ Polymorphism :-

هذا المفهوم يعني بأن لدينا دالة في الـ super class  إذا هي دالة رئيسية ، ولدينا أيضا sub classes نقوم بعمل override للدالة التي في super class .

إذا بشكل عام هي دالة لها أكثر من وجه .


ثانياً:شروط Polymorphism :-

  • لابد من تواجد super class و sub classes.
  • الوراثة ، إذ تعتبر الوراثة عامل مهم لنتمكن من قول أن العملية التي أمامنا polymorphism .
  • الدالة التي بالـ super class نجعلها open ، ونقوم بعملية override لها في sub classes .

ثالثاً:أمثلة متنوعة لمفهوم Polymorphism :-

مثال (١):-

 

open class schools(){


    open fun getInfo(){
        var name:String = readLine()!!
        println("Welcome in to our schools $name")
    }

    class employees():schools(){
        override fun getInfo() {
            println("every employee in this school have ID")
        }
    }

    class students():schools(){
        override fun getInfo() {
            println("we are proud of our students")
        }

    }
}

  • نلاحظ أننا قمنا بعمل sub classes بداخل super class وهذا ليس للتعقيد إنما نريد توضيح بأنك تستطيع صنع نفس العمل بأكثر من طريقة (كل الطرق تؤدي إلى روما) المهم أن يكون العمل صحيح ومنطقي.
  • نلاحظ أن التصنيف الرئيسي super class يحتوي على دالة ترحيبية وافترضنا انك ستمرر قيمة التي هي اسم المدرسة ومن ثم تقوم بطباعة رسالة ترحيبية باسم المدرسة التي مررتها.
  • قمنا بعمل override لنفس الدالة في sub classes ولكن كل دالة تقوم بعمل معين حسب التصنيف التي تتبعه فمثلا تصنيف الموظفين هي نفس الدالة فيه ولكن تقوم بطباعة معلومة أن كل موظف لديهم يحمل رقم وظيفي .
  • في الدالة الرئيسية :-

نستطيع أن نقوم بطريقتين لاستدعاء الدالة ذات الوجوه المتعددة :

الطريقة الأولى : عمل دالة خارجية ويتم الاستداعاء من خلالها :-

fun showInfo(s:schools){
    s.getInfo()
}

fun main (args:Array<String>){


    var sch = schools()
    showInfo(sch)

}

نلاحظ قمنا بتمرير كائن من التصنيف الرئيسي وبداخل الدالة هذه جلبنا الدالة التي تطبع البيانات ، ومن ثم عرفنا كائن من التصنيف الرئيسي واستدعينا الدالة التي عرفناها ومررنا لها نفس الكائن .

ناتج التنفيذ :

happy kids
Welcome in to our schools happy kids

الطريقة الثانية : تعريف كائن مرجعه الـsuper class  :-

fun main (args:Array<String>){

    var emp:schools = schools.employees()
    emp.getInfo()

}

ناتج التنفيذ :

every employee in this school have ID

مثال (٢):-

open class primaryOperator() {

    open fun operator() {
        println("primary operator")
        println("please choose between this operators(+ , -) :")
        var c = readLine()!!
        if (c == "+") {
            println("Enter first number :")
            var a: Int = readLine()!!.toInt()
            println("Enter second number :")
            var b: Int = readLine()!!.toInt()
            var result = a + b
            println("The result is = $result")
        } else if (c == "-") {
            println("Enter first number :")
            var a: Int = readLine()!!.toInt()
            println("Enter second number :")
            var b: Int = readLine()!!.toInt()
            var result = a - b
            println("The result is = $result")
        }
    }
}

open class seconderyOperator() : primaryOperator() {

    override fun operator() {
        println("secondary operator")
        println("please choose between this operators(* , /) :")
        var c = readLine()!!
        if (c == "*") {
            println("Enter first number :")
            var a: Int = readLine()!!.toInt()
            println("Enter second number :")
            var b: Int = readLine()!!.toInt()
            var result = a * b
            println("The result is = $result")
        } else if (c == "/") {
            println("Enter first number :")
            var a: Int = readLine()!!.toInt()
            println("Enter second number :")
            var b: Int = readLine()!!.toInt()
            var result = a / b
            println("The result is = $result")
        }
    }
}








fun main(args:Array<String>){


    var secOp: primaryOperator=seconderyOperator()
    secOp.operator()


}

ناتج التنفيذ :

secondary operator
please choose between this operators(* , /) :
*
Enter first number :
3
Enter second number :
8
The result is = 24

مثال (٣):-

 open class shapes(){

   open fun getShape(){
        println("shape")
    }
}

class rectangle():shapes(){
    override fun getShape() {
        println("Rectangle")
    }
}

class circle():shapes(){
    override fun getShape() {
        println("Circle")
    }
}

class triangle():shapes(){
    override fun getShape() {
        println("Triangle")
    }
}

fun showShapes(s:shapes){
    s.getShape()
}


fun main (args:Array<String>){

    var shape1 = triangle()
    showShapes(shape1)

}

ناتج التنفيذ :

Triangle