Interface vs Abstract Class - في كوتلن

في Kotlin، هناك فارق بين الـ Interface والـ Abstract Class، ولكل منهما استخداماته الخاصة. إليك شرح موجز للفرق بينهما:

Interface (واجهة):

  • الواجهات هي هياكل بيانات خالية من الحالة، ولا تحتوي على حقول (متغيرات) أو دوال مع مرفقات (implementations).
  • يتم استخدام الواجهات لتعريف عقود (contracts) للسلوك الذي يجب أن يتبعه الكلاسات التي تنفذ هذه الواجهات.
  • يمكن للكلاس أن ينفذ واجهة واحدة أو أكثر باستخدام الكلمة المفتاحية :.
  • يتعين على الكلاس الذي ينفذ واجهة تنفيذ جميع الدوال المعرفة في الواجهة.

مثال:

interface Shape {
    fun calculateArea(): Double
    fun calculatePerimeter(): Double
}

class Circle(val radius: Double) : Shape {
    override fun calculateArea() = Math.PI * radius * radius
    override fun calculatePerimeter() = 2 * Math.PI * radius
}

Abstract Class (كلاس مجرد):

  • الكلاسات المجردة هي كلاسات قابلة للتمديد (inheritance) ويمكن أن تحتوي على حقول ودوال مجردة (abstract functions) ودوال عادية مع مرفقات (implementations).
  • يمكن أن يرث الكلاسات الفرعية من الكلاس المجرد وتنفيذ الدوال المجردة المعرفة فيه أو استدعاء الدوال المنفذة بالفعل.
  • يتعين على الكلاس الفرعي تنفيذ جميع الدوال المجردة المعرفة في الكلاس المجرد.

مثال : 

abstract class Shape {
    abstract fun calculateArea(): Double
    abstract fun calculatePerimeter(): Double

    fun printDetails() {
        println("Area: ${calculateArea()}")
        println("Perimeter: ${calculatePerimeter()}")
    }
}

class Circle(val radius: Double) : Shape() {
    override fun calculateArea() = Math.PI * radius * radius
    override fun calculatePerimeter() = 2 * Math.PI * radius
}
بشكل عام، استخدم الواجهات عندما ترغب في تعريف عقود للسلوك وتوحيد السلوك بين مجموعة متنوعة من الكلاسات. بينما استخدم الكلاسات المجردة عندما تحتاج إلى تقديم هيكل أو سلوك مشترك لمجموعة من الكلاسات الفرعية.
اقرأ  مقدمة عن البرمجة